Вы можете проверить, что делает GCC / G ++, используя опцию -S . Это выведет код до его фактической сборки - см. gcc (1) .
GCC и G ++ более или менее ведут себя одинаково в этом случае.
Поэтому я сначала перевел код на C, чтобы провести дальнейшие тесты:
char WARNINGS_ENABLED = 0;
inline void WARN(const char* message) {
if (!WARNINGS_ENABLED) {
return;
}
puts(message);
}
int main() {
WARN("foo");
return 0;
}
запустите gcc -O3 -S file.c и посмотрите в выходной файл ' file.s '
Вы увидите, что GCC ничего не удалил !
Это не то, что вы просили, но для того, чтобы дать компилятору возможность оптимизировать этот код, вам нужно сделать WARNINGS_ENABLED постоянной . Альтернативой является сделать его статическим и не изменять значение в этом файле. Но : делая его статическим имеет побочный эффект, что символ не экспортируется.
static const char WARNINGS_ENABLED = 0;
inline void WARN(const char* message) {
if (!WARNINGS_ENABLED) {
return;
}
puts(message);
}
int main() {
WARN("foo");
return 0;
}
GCC затем полностью очищает код.