Опция компилятора GNU c для пометки if (a = b)

#c #gcc #gnu

#c #gcc #gnu

Вопрос:

Сегодня утром у меня был спазм мозга. Не могу вспомнить опцию компилятора GNU для пометки

 if (a = b) 
  

как предупреждение / ошибка, поскольку это назначение, а не условие.

Комментарии:

1. -Wall включает в себя комментарий по этому поводу (упомянутый здесь en.wikipedia.org/wiki/Yoda_conditions ). Это опция?

Ответ №1:

Самый простой способ — включить все предупреждения и посмотреть, о чем сообщается:

 int main(int argc, char **argv){
    if(argc=0) ;
}
  

скомпилируйте с -Wall

вы получите предупреждение:

 <source>: In function 'int main(int, char**)':

<source>:3:12: warning: suggest parentheses around assignment used as truth value [-Wparentheses]

    3 |     if(argc=0) ;

      |        ~~~~^~

Compiler returned: 0
  

Таким образом, опция: -Wparentheses

https://godbolt.org/z/6ac1zG

Комментарии:

1. Также смотрите документы: gcc.gnu.org/onlinedocs/gcc/Warning-Options.html

2. @BenjaminMaurer это был ленивый способ :). Документация длинная

3. IDK, я только что погуглил это и получил документы. Кажется еще более ленивым: P

4. Работает для этого случая, но обратите внимание, что в целом -Wall (и даже -Wextra ) не активирует все предупреждения, которые может выдавать компилятор (несмотря на название!).).

5. @P__J__ грустные -Wshadow шумы