2011-11-28 12 views
10

Jak mogę skompilować program C bez żadnych optymalizacji za pomocą gcc/g ++?Jak skompilować program C bez żadnej optymalizacji?

+0

Przy braku szansy, że nie szukasz przełącznika kompilatora, możesz chcieć zadeklarować zmienna (-e) 'volatile'. – user786653

+0

Dlaczego chcesz je wyłączyć? Czy masz powody, by sądzić, że optymalizacje są 1) włączone i 2) powodując problemy? Rzadko kiedy optymalizacja powoduje problemy z poprawnie napisanym kodem. Jednak często przydaje się użycie -O0 w połączeniu z -ggdb do debugowania. –

Odpowiedz

13
gcc main.c 

lub

g++ main.cpp 

domyślnie nie robi żadnych optymalizacje. Tylko wtedy, gdy podasz -O1, -O2, -O3, etc..., zrobisz optymalizacje.

Możesz też użyć przełącznika -O0, aby było to wyraźne.

5

Nie powinieneś otrzymywać żadnych optymalizacji, chyba że poprosisz o nie flagą -O. Jeśli chcesz cofnąć niektóre ustawienia domyślne dostarczone przez Twój system kompilacji, -O0 zrobi to za Ciebie, o ile jest to ostatnia flaga -O w wierszu poleceń.

1

Korzystanie z gcc, przechodzą w flagi: -O 0.

11

Używanie -O0 jest najbliższe mi znane, jednak w przeciwieństwie do innych odpowiedzi, nie oznacza to zero optymalizacji. Można policzyć liczbę włączonych optymalizacje dla różnych poziomów optymalizacji gcc tak (to 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 

Więc w -O0, istnieje 52 optymalizacje włączona. Przypuszczam, że można je wyłączyć jeden po drugim, ale nigdy tego nie widziałem.

Zauważ, że strona gcc człowiek mówi:

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

To nie obiecując zerowe optymalizacje.

Nie jestem deweloperem gcc, ale przypuszczam, że powiedzieliby, że optymalizacje -O0 stały się tak standardowe, że już prawie nie można ich nazwać optymalizacjami, a raczej "standardami". Jeśli to prawda, to jest trochę mylące, ponieważ gcc nadal ma je na liście optymalizatorów. Nie znam też wystarczająco dobrze historii: być może dla wcześniejszej wersji -O0 naprawdę oznaczało zero optymalizacji ...

Powiązane problemy