Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
#1

Макрос TRACE - C++

11.07.2015, 17:46. Просмотров 794. Ответов 3
Метки нет (Все метки)

Здорова!

Часто вижу в коде TRACE, но что то ничего не пойму что он делает, вот есть код:
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
using std::cout;
#include <afxwin.h>
 
int main()
{
    TRACE("Hellow world!\n");
 
    return 0;
}
Компилирую и ничего не происходит?
Запускаю в режиме отладки тоже ничего не происходит и ничего не выводится хз. что это?

Добавлено через 3 минуты
Короче при компиляции этот макрос компилируется в ничего. Его можно использовать при отладке, только что то отладчик мне ниче не показывает.

Добавлено через 16 минут
Почему я от сделал такой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using std::cout;
#include <afxwin.h>
 
void f(double a)
{
    TRACE("Переменная %d\r\n",a);
}
 
int main()
{
    TRACE("Hellow world!\r\n");
    f(0.35);
    
 
    return 0;
}
В функцию f передаю 0.35 и вывожу его в вывод с помощью TRACE и вывелось большое число
"test.exe": Загружено: "C:\Windows\System32\dwmapi.dll", Невозможно найти или открыть файл PDB
Hellow world!
Переменная 1717986918
"test.exe": Выгружено: "C:\Windows\System32\dwmapi.dll"

Что это за фигня? Почему так происходит? Если ставлю 35, то 0 выводится

Добавлено через 1 минуту
ладно нужно %f писать вместо %d
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2015, 17:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Макрос TRACE (C++):

Если макрос на VBA переписать на С++, то макрос станет работать быстрее? - C++
Всем привет!) У меня есть макрос написанный в Екселе на VBA, если его переписать на С++ , то макрос станет работать быстрее? ...

Макрос - C++
Как в макросе интовское число разделить на число с запятой?

Макрос на с++ - C++
Здравствуйте, надо разработать макрос type(x,y) который объявляет x как некий тип с именем y.

макрос препроцессора - C++
Здравствуйте ув. форумчани. Читаю книгу &quot;Философия с++. Введение в стандартный с++&quot;. Дошел к одному примеру. И все компилируется, но...

Сложный макрос - C++
В книге была задача, написать макрос, определяющий массив типа Type, который называется Name, имеет Number элементов, и все элементы...

макрос COMBINE - C++
Доброго времени суток. Дан код: #define SUFFIX 5 #define COMBINE(a,b) COMBINE1(a,b) #define COMBINE1(a,b) ...

3
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
11.07.2015, 17:54  [ТС] #2
Цитата Сообщение от iRomul Посмотреть сообщение
потому что в формате строки стоит %d, а передаётся double
А в этом макросе такие же параметры как и в printf

Добавлено через 3 минуты
Вычитал что макросов TRACE много бывает типо TRACE0,TRACE1,TRACE2 и т.д. типо 0 это без параметров 2 это 2 параметра, а кто небудь его использует?
0
iRomul
159 / 100 / 11
Регистрация: 17.10.2012
Сообщений: 480
Завершенные тесты: 1
11.07.2015, 18:00 #3
Цитата Сообщение от ninja2 Посмотреть сообщение
А в этом макросе такие же параметры как и в printf
Скорее всего это обёртка над fprintf или подобным.
Если верить документации, то сообщение выводится в отладчик. Если разрабатываете в VS, то стоит глянуть панель вывода.

Добавлено через 3 минуты
Цитата Сообщение от ninja2 Посмотреть сообщение
Вычитал что макросов TRACE много бывает типо TRACE0,TRACE1,TRACE2 и т.д. типо 0 это без параметров 2 это 2 параметра
Выходит, что да, но в доках в этим макросам указано, что они являются устаревшими, и рекомендуется писать с помощью ATLTRACE2
1
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
11.07.2015, 18:04  [ТС] #4
Цитата Сообщение от iRomul Посмотреть сообщение
Скорее всего это обёртка над fprintf или подобным.
Нет там можно посмотреть вот определение:
C++
1
#define TRACE ATLTRACE
для 0 и 3
C++
1
2
3
4
#define TRACE0(sz)              TRACE(_T("%s"), _T(sz))
#define TRACE1(sz, p1)          TRACE(_T(sz), p1)
#define TRACE2(sz, p1, p2)      TRACE(_T(sz), p1, p2)
#define TRACE3(sz, p1, p2, p3)  TRACE(_T(sz), p1, p2, p3)
Определение ATLTRACE
C++
1
#define ATLTRACE ATL::CTraceFileAndLineInfo(__FILE__, __LINE__)
И само определение CTraceFileAndLineInfo
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
_trace.TraceV(m_pszFileName, m_nLineNo, dwCategory, nLevel, pszFmt, ptr);
        va_end(ptr);
    }
#pragma warning(pop)
 
#pragma warning(push)
#pragma warning(disable : 4793)
    void __cdecl operator()(
        _In_z_ const char *pszFmt, 
        ...) const
    {
        va_list ptr; va_start(ptr, pszFmt);
        ATL::CTrace::s_trace.TraceV(m_pszFileName, m_nLineNo, atlTraceGeneral, 0, pszFmt, ptr);
        va_end(ptr);
    }
#pragma warning(pop)
 
#pragma warning(push)
#pragma warning(disable : 4793)
    void __cdecl operator()(
        _In_z_ const wchar_t *pszFmt, 
        ...) const
    {
        va_list ptr; va_start(ptr, pszFmt);
        ATL::CTrace::s_trace.TraceV(m_pszFileName, m_nLineNo, atlTraceGeneral, 0, pszFmt, ptr);
        va_end(ptr);
    }
#pragma warning(pop)
 
private:
    /* unimplemented */
    CTraceFileAndLineInfo &__cdecl operator=(_In_ const CTraceFileAndLineInfo &right);
 
    const char *const m_pszFileName;
    const int m_nLineNo;
};


Добавлено через 2 минуты
Цитата Сообщение от iRomul Посмотреть сообщение
Выходит, что да, но в доках в этим макросам указано, что они являются устаревшими, и рекомендуется писать с помощью ATLTRACE2
Та пофигу макрос как был так он и будет в новых версиях работать, это ж специально сделали как бы инкапсуляция макросом, так что можно и старое использовать.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2015, 18:04
Привет! Вот еще темы с ответами:

Не работает макрос - C++
Добрый день. Есть макросы:#define ACTION(var, value) int var = value; #define EXEC_ACTION(value, handler, ...) handler(value,...

Не работает макрос - C++
в лабораторной работе у меня надо написать макрос: создать макроопределение (некий PRINT_TYPE) в зависимости от которого новосозданная...

макрос <L> не работает - C++
Подскажите, как исправить эту ошибку? Error 1 error C2440: 'initializing' : cannot convert from 'const wchar_t ' to...

Разработайте макрос - C++
Очень нужна ваша помощь, скоро контрольная, а я никак не могу разобраться 2. Разработайте макрос tolower(c) который преобразует символ c...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Yandex
Объявления
11.07.2015, 18:04
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru