Как я могу скомпилировать программу C без каких-либо оптимизаций с помощью gcc/g++?
Как скомпилировать программу C без какой-либо оптимизации
Ответ 1
gcc main.c
или
g++ main.cpp
по умолчанию он не выполняет никаких оптимизаций. Только когда вы указываете -O1, -O2, -O3, etc...
, он делает оптимизацию.
Или вы можете использовать переключатель -O0
, чтобы сделать его явным.
Ответ 2
Использование -O0 является ближайшим, о котором я знаю, однако, в отличие от других ответов, это не означает нулевые оптимизации. Вы можете подсчитать количество включенных оптимизаций для разных уровней оптимизации gcc (это gcc 4.8.2):
$ gcc -Q -O0 --help=optimizers | grep enabled | wc -l
52
$ gcc -Q -O1 --help=optimizers | grep enabled | wc -l
80
$ gcc -Q -O2 --help=optimizers | grep enabled | wc -l
110
$ gcc -Q -O3 --help=optimizers | grep enabled | wc -l
119
Таким образом, при -O0 включено 52 оптимизации. Полагаю, можно было бы отключить их один за другим, но я никогда не видел, чтобы это делалось.
Обратите внимание, что в man-странице gcc говорится:
-O0 Reduce compilation time and make debugging produce the expected results. This is the default.
Это не обещает оптимизацию нуля.
Я не разработчик gcc, но я бы предположил, что они скажут, что оптимизация -O0 стала настолько стандартной, что их едва можно назвать оптимизациями, а скорее "стандартами". Если это правда, это немного запутанно, поскольку gcc все еще имеет их в списке оптимизаторов. Я также не знаю историю достаточно хорошо: возможно, для предыдущей версии -O0 действительно означали нулевые оптимизации...
Ответ 3
Вы не должны получать какие-либо оптимизации, если вы не попросите их с помощью флага -O
. Если вам нужно отменить некоторые значения по умолчанию, предоставленные вашей системой сборки, -O0
сделает это для вас, если это последний -O
флаг в командной строке.
Ответ 4
Используя gcc, перейдите во флаг: -O 0.
Ответ 5
Используйте переключатель компилятора -O0.