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 }
Run Code Online (Sandbox Code Playgroud)
在第7行中,没有左手操作符来显示值,仍然编译器没有生成任何警告,GCC和g ++都.这背后是否有任何意图的紫癜?
[ADDED/EDIT]根据评论,我只有在使用以下标志后才会收到警告:-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]$
Run Code Online (Sandbox Code Playgroud)
就语言而言,没有错误 - 声明不需要产生副作用.
但是,由于一个不做任何事情的声明几乎肯定是一个错误,大多数编译器都会对此发出警告.您的,但仅当您通过命令行参数启用该警告时.
您可以启用该警告-Wunused-value,但我建议您启用一组体面的警告(包括此警告)-Wall -Wextra.
如您所见,这也会发出警告,表示函数参数未使用.既然如此main,您可以通过将签名更改为不具有任何参数来轻松修复它:
int main()
Run Code Online (Sandbox Code Playgroud)
更一般地说,如果你需要忽略参数来避免警告,C++允许你不要命名它们:
int main(int, char**)
Run Code Online (Sandbox Code Playgroud)
并且两种语言都允许您显式使用但忽略该值
(void)argc;
(void)argv;
Run Code Online (Sandbox Code Playgroud)