2011-10-10 29 views
8

Jaka jest różnica między debugowania i _DEBUG w VC++ w Visual Studio 2008.Is jakaś różnica, bo w W moim projekcie, w pewnym module preprocesora DEBUG i jest w jakiś moduł jest _DEBUG.DEBUG vs _DEBUG

+0

pokrewne [ '_DEBUG' vs' NDEBUG'] (http://stackoverflow.com/questions/2290509/) –

Odpowiedz

5

W własnego kodu można sprawdzić za jakiekolwiek makro chcesz, więc nie ma znaczenia, który z nich korzystać.

Ale biblioteki użyć może zachowywać się inaczej. Na przykład. dokumentacja MSDN na temat assert stwierdza:

Instrukcje asercji kompilują się tylko wtedy, gdy zdefiniowano _DEBUG. Gdy _DEBUG nie jest zdefiniowany, kompilator traktuje asercje jako instrukcje puste.

Proponuję więc zawsze używać _DEBUG.

Edit: Według MSDN nawet nie trzeba definiować żadnych specjalnych debugowania makra ponieważ kompilator zrobi to dla ciebie jak najszybciej określić biblioteki debug wykonania.

2

To zależy od tego, jakie zdefiniowane jest użycie makra. Jak wiem domyślny projekt VS2008 C++ zawiera _DEBUG do zdefiniowania do konfiguracji debugowania. Może się zdarzyć, że w twoim projekcie zdefiniowane jest także niestandardowe makro DEBUG. Spróbuj wyszukać definicję DEBUG.

Domyślnie zawsze należy używać _DEBUG.

1

Jeśli ustawieniem Codegeneration projektu jest cokolwiek z "debugowaniem", to makro _DEBUG definiowane jest przez kompilator. Odpowiednie możliwości kompilatorów /MDD wielowątkowych DLL dynamiczna sprzężenia z libc, analizę /MLD jednowątkowy statyczne powiązanie libc debugowania (VC6) /MTD wielowątkowy, podnośnik statyczną libc, analizę

opcja kompilatora/LDd definiuje także makro _DEBUG.

Makro DEBUG jest często jawnie zdefiniowane w ustawieniu projektu debugowania.