Как скомпилировать программу C без какой-либо оптимизации

Как я могу скомпилировать программу C без каких-либо оптимизаций с помощью gcc/g++?

Ответ 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.