Как скомпилировать программу на C без какой-либо оптимизации - PullRequest
14 голосов
/ 28 ноября 2011

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

Ответы [ 5 ]

19 голосов
/ 27 апреля 2014

Использование -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 оптимизации. Я полагаю, что их можно отключить по очереди, но я никогда не видел, чтобы это было сделано.

Обратите внимание, что на странице руководства gcc написано:

-O0 Reduce compilation time and make debugging produce the expected results.  This is the default.

Это не обещает нулевой оптимизации.

Я не разработчик gcc, но я думаю, они скажут, что оптимизации -O0 стали настолько стандартными, что их уже едва можно назвать оптимизациями, а скорее "стандартами". Если это правда, это немного сбивает с толку, так как у gcc они все еще есть в списке оптимизаторов. Я также недостаточно хорошо знаю историю: возможно, для предыдущей версии -O0 действительно означало нулевую оптимизацию ...

16 голосов
/ 28 ноября 2011
gcc main.c

или

g++ main.cpp

по умолчанию не выполняет никаких оптимизаций.Только когда вы указываете -O1, -O2, -O3, etc..., он выполняет оптимизацию.

Или вы можете использовать переключатель -O0, чтобы сделать его явным.

6 голосов
/ 28 ноября 2011

Вы не должны получать никаких оптимизаций, если вы не попросите их через флаг -O.Если вам нужно отменить некоторые значения по умолчанию, предоставленные вашей системой сборки, -O0 сделает это за вас, если это последний флаг -O в командной строке.

1 голос
/ 28 ноября 2011

Используйте переключатель компилятора -O0 .

1 голос
/ 28 ноября 2011

Используя gcc, передайте флаг: -O 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...