[英]Compilation warning not present (GCC and g++)
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 int main(int argc, char* argv[])
5 {
6 int bret = 1;
7 bret - 2;
8
9 printf("bret=%d",bret);
10 return 0;
11 }
在第7行中,没有左手运算符来显示该值,但编译器仍未生成任何警告,GCC和g ++均如此。 这背后有什么意图吗?
[添加/编辑]根据评论,只有在使用以下标记后,我才会得到警告:-Wall -Wextra
[debd@test]$gcc -Wall -Wextra test2.c
test2.c: In function 'main':
test2.c:7: warning: statement with no effect
test2.c:4: warning: unused parameter 'argc'
test2.c:4: warning: unused parameter 'argv'
[debd@test]$
就语言而言,没有错误-不需要声明即可产生副作用。
但是,由于几乎什么都不做的语句几乎肯定是一个错误,因此大多数编译器都会对此发出警告。 您会的,但前提是您通过命令行参数启用了该警告。
您可以仅使用-Wunused-value
启用该警告,但我建议您使用-Wall -Wextra
启用一组不错的警告(包括该警告)。
如您所见,这还会警告您未使用功能参数。 由于这是main
,因此可以通过将签名更改为不包含任何参数来轻松修复它:
int main()
更一般地,为了避免在需要忽略参数时发出警告,C ++允许您不命名它们:
int main(int, char**)
并且两种语言都允许您显式使用但忽略该值
(void)argc;
(void)argv;
bret - 2;
是一个表达式语句 ,它没有副作用。
C对此语句不需要任何警告。 编译器可以自由添加或不提供提示性警告,以表明该语句无效。 编译器可以优化语句。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.