2011-11-28 26 views
10

¿Cómo puedo compilar un programa en C sin realizar ninguna optimización con gcc/g ++?Cómo compilar el programa C sin ninguna optimización

+0

En el caso de que no esté buscando un interruptor de compilación, podría estar buscando declarar su variable (s) 'volátil'. – user786653

+0

¿Por qué quieres que se apaguen? ¿Tiene alguna razón para creer que las optimizaciones están 1) habilitadas y 2) causándole problemas? Es raro que una optimización cause problemas con el código escrito correctamente. Sin embargo, a menudo es útil usar -O0 en combinación con -ggdb para la depuración. –

Respuesta

13
gcc main.c 

o

g++ main.cpp 

por defecto no hace ninguna optimización. Solo cuando especifica -O1, -O2, -O3, etc... hace optimizaciones.

O puede usar el interruptor -O0 para hacerlo explícito.

5

No debe obtener ninguna optimización a menos que la solicite a través del -O. Si necesita deshacer algunos valores predeterminados proporcionados por su sistema de compilación, -O0 lo hará por usted, siempre que sea el último indicador -O en la línea de comando.

1

Usando gcc, pase en la bandera: -O 0.

1

Utilice el interruptor de compilador -O0.

11

El uso de -O0 es lo más cercano que conozco, sin embargo, a diferencia de otras respuestas, esto no significa cero optimizaciones. Se puede contar el número de optimizaciones habilitadas para los distintos niveles de optimización de gcc como este (esto es 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 

Así que en -O0, hay 52 optimizaciones habilitadas. Supongo que uno podría deshabilitarlos uno por uno, pero nunca he visto eso hecho.

Tenga en cuenta que la página man gcc dice:

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

No es prometedor cero optimizaciones.

No soy un desarrollador gcc, pero supongo que dirían que las optimizaciones -O0 se han vuelto tan estándar que ya no se pueden llamar optimizaciones, sino "estándares". Si eso es cierto, es un poco confuso, ya que gcc todavía los tiene en la lista de optimizadores. Tampoco conozco la historia lo suficientemente bien: quizás para una versión anterior -O0 significaba realmente cero optimizaciones ...

Cuestiones relacionadas