Забавное для функциональщиков предупреждение GCC

2011-02-04

При включении предупреждений компилятор GCC пробует обнаружить в коде разные возможные проблемы. В том числе и наличие вычислений, результаты которых не используются. Иногда это приводит к смешным предупреждениям, если представить их в контексте такого языка как Haskell :)

Возьмём такую программу на C:

$ cat > tmp.c << EOF
> struct S {
>     int x;
>     int y;
> };
> 
> int f(int x) {
>     struct S s = {x, 42};
>     s.y;
>     return x;
> }
> EOF

Обратите внимание на инструкцию s.y;.

Теперь попробуем скомпилировать её при помощи GCC с включёнными предупреждениями:

$ gcc -c -std=c99 -Wall -Wextra -pedantic tmp.c
tmp.c: In function 'f':
tmp.c:8:5: warning: statement with no effect