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

Макрос TRACE - C++

Восстановить пароль Регистрация
 
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
11.07.2015, 17:46     Макрос TRACE #1
Здорова!

Часто вижу в коде 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2015, 17:46     Макрос TRACE
Посмотрите здесь:

C++ макрос <L> не работает
Макрос C++
Если макрос на VBA переписать на С++, то макрос станет работать быстрее? C++
Макрос на с++ C++
C++ Сложный макрос
Разработайте макрос C++
Сложный макрос C++
C++ макрос препроцессора
Реализуйте макрос C++
C++ макрос COMBINE
Макрос-класс? C++
C++ Не работает макрос

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

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

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

Добавлено через 3 минуты
Цитата Сообщение от ninja2 Посмотреть сообщение
Вычитал что макросов TRACE много бывает типо TRACE0,TRACE1,TRACE2 и т.д. типо 0 это без параметров 2 это 2 параметра
Выходит, что да, но в доках в этим макросам указано, что они являются устаревшими, и рекомендуется писать с помощью ATLTRACE2
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
11.07.2015, 18:04  [ТС]     Макрос TRACE #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
Та пофигу макрос как был так он и будет в новых версиях работать, это ж специально сделали как бы инкапсуляция макросом, так что можно и старое использовать.
Yandex
Объявления
11.07.2015, 18:04     Макрос TRACE
Ответ Создать тему
Опции темы

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