繁体   English   中英

不存在编译警告(GCC和g ++)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM