Вы не можете сделать это во время компиляции, но во время выполнения вы можете проверить, оптимизирована ли ваша программа или нет.
Напишите код, который определенно будет изменен оптимизатором, например, смешивая энергонезависимую переменную с setjmp
/ longjmp
, и по значению этой переменной вы будете знать, оптимизирована ваша программа или нет.
#include <setjmp.h>
#include <stdio.h>
int is_optimised(void) {
int i = 1;
jmp_buf jmp_loc;
if (setjmp(jmp_loc)) {
return i; // optimiser changes it to "return 1"
}
i = 0;
longjmp(jmp_loc, 1);
return 0;
}
int main(int argc, char *argv[]) {
printf("%soptimised\n", is_optimised() ? "" : "non-");
return 0;
}
Если скомпилировано с GCC без ключа -O
, выводится «non-optimised
», для переключателей -O1
- -O4
выводится «optimised
».
Конечно, ваш пробег (с другими компиляторами) может отличаться.