【发布时间】:2020-08-15 11:11:57
【问题描述】:
今天早上脑部痉挛。不记得要标记的 GNU 编译器选项
if (a = b)
作为一个警告/错误,因为它是一个赋值而不是一个条件。
【问题讨论】:
-
-Wall包括对此的评论(此处提到 en.wikipedia.org/wiki/Yoda_conditions )。这是一个选择吗?
今天早上脑部痉挛。不记得要标记的 GNU 编译器选项
if (a = b)
作为一个警告/错误,因为它是一个赋值而不是一个条件。
【问题讨论】:
-Wall 包括对此的评论(此处提到 en.wikipedia.org/wiki/Yoda_conditions )。这是一个选择吗?
最简单的方法是启用所有警告并查看报告的内容:
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
【讨论】:
-Wall(甚至-Wextra)不会启用编译器可以产生的所有警告(尽管有名称!)。
-Wshadow噪音