gcc переключается на анализ предупреждений - PullRequest
2 голосов
/ 20 мая 2009

В gcc некоторые предупреждения требуют включения оптимизации. Например:

int foo() {
    int x;
    return x;
}

Чтобы обнаружить неинициализированную переменную, необходимо передать -O.

$ gcc -W -Wall -c test.c
$ gcc -W -Wall -c test.c -O
test.c: In function ‘foo’:
test.c:3: warning: ‘x’ is used uninitialized in this function

Однако это может помешать отладке. Есть ли способ включить только фазы анализа, необходимые для предупреждений (и не только это конкретное предупреждение, но как можно больше), не оказывая слишком большого влияния на сгенерированный код?

Я использую gcc версии 4.3.3 (Ubuntu 4.3.3-5ubuntu4) на x86-64.

Ответы [ 3 ]

2 голосов
/ 20 мая 2009

Попробуйте использовать -Wall вместо -W. -W устарело IIRC. (Как отмечает Джонатан Леффлер в комментарии, замена -W на -Wextra, а не -Wall.)

[редактировать]

-Wunused-variable
Предупреждать всякий раз, когда локальная переменная или непостоянная статическая переменная не используются, кроме ее объявления. Это предупреждение включено -Wall.

http://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/Warning-Options.html#Warning-Options

[редактировать]

Это поведение изменило в GCC 4.4 :

Неинициализированные предупреждения больше не требуют включения оптимизации, то есть -Wuninitialized может использоваться вместе с -O0. Тем не менее предупреждения, выданные -Wuninitialized, вероятно, будут более точными, если оптимизация включена.

0 голосов
/ 20 мая 2009

Это то, для чего у вас есть автоматическая сборка. Позвольте вашему автоматизированному механизму сборки собрать с -Werror -Wall -O2, и вы поймете все предупреждения, вызванные более высокими уровнями оптимизации.

0 голосов
/ 20 мая 2009

DDD и gdb в основном справляются с кодом, скомпилированным с gcc -O -g. Иногда переменные не находятся в области видимости, когда вы ожидаете, что они будут, но DDD достаточно умен, чтобы сказать «оптимизирован» вместо того, чтобы сходить с ума. Но нет никаких сомнений в том, что легче отлаживать с -O выключено & mdash; я часто видел это с кодом моих учеников.

...