Существует ли стандартизированный (например, реализован всеми главными компиляторами) #define, который позволит мне различать отладку и сборки конечных версий?
Edit: Я неправильно понял вопрос и ушел по другой касательной!!! Извиняюсь... Макрос _NDEBUG используется как в Linux, так и в Windows...
Если бинарник собран и вам нужно определить, была ли сборка release/debug, вы можете получить шестнадцатеричный дамп, если вы увидите в нем много символов, которые будут отладочной информацией... например, в Linux, используя утилиту strings. Существует версия для Windows от SysInternals, доступная здесь на technet. Релизные версии двоичных исполняемых файлов не будут иметь строк, представляющих различные символы...
strings some_binary
Надеюсь, это поможет, С наилучшими пожеланиями, Том.
Поскольку нет стандартного определения отладки или выпуска, нет способа сделать это. Я могу придумать, по крайней мере, четыре разных вещи, которые можно было бы иметь в виду, и все они могут быть изменены независимо. Только два могут быть протестированы из кода.
если верить
#ifdef NDEBUG
// nondebug
#else
// debug code
#endif
наиболее переносимым.
Но ни один компилятор не знает, компилируете ли вы debug или release, так что это не автоматически. Но этот параметр используется assert.h в c-runtime, так что он довольно распространен. Visual Studio установит его, и я уверен, что большинство других IDE тоже.