请考虑以下main()
函数:
int main(int argc, char *argv[])
{
return (0);
}
使用cc -Wall -Wextra
编译时,会生成警告信息“unused parameter”。
当我在函数中不需要使用参数时(例如在int
参数没有被使用的信号处理函数中),我习惯采用以下方法:
int main(int argc, char *argv[])
{
(void)argc;
(void)argv;
return (0);
}
(对于这个特定的
main()
,有时我会看到其他人这样做:argv = argv - argc + argc
)
但是,(void)var
实际上是做什么的?
我知道(void)
是一个强制类型转换,所以我猜我正在强制转换变量。那么没有强制类型转换的var;
行是做什么的?这是一个空赋值吗,还是一个空表达式?
我想要理解实际上发生了什么。
expr;
是一个没有效果的语句。它什么也不做。写(void) expr;
可以抑制没有效果的语句的警告。在涉及到expr
的无效语句中写入一个语句可以消除在函数参数列表中出现expr
但未使用expr
时的警告。 - Brandin