考虑以下main()
:
int main(int argc, char *argv[])
{
return (0);
}
编译后cc -Wall -Wextra
,生成“未使用的参数”的警告。
当我不需要在函数中使用参数时(例如在信号处理函数 http://en.wikipedia.org/wiki/C_signal_handling没有利用它的int
参数),我习惯于执行以下操作:
int main(int argc, char *argv[])
{
(void)argc;
(void)argv;
return (0);
}
(对于那个特定的main()
,我有时看到其他人这样做:argv = argv - argc + argc
)
But 什么是(void)var
实际上do?
我明白那个(void)
是一个强制转换,所以我想我正在抛弃该变量?什么是var;
行(不加演员)做什么?它是一个空的赋值、一个空的表达式吗?
我想了解到底发生了什么。
这只是创建对变量的“无害”引用的一种方法。编译器不会抱怨未使用的变量,因为您确实引用了该值,并且它不会抱怨您没有对表达式的值执行任何操作var
因为您明确地将其转换为 void(无),表明您不关心该值。
我以前没有在变量上看到过这种用法(因为我使用的编译器通常不会抱怨未使用的函数参数),但我看到它经常用于向编译器表明您并不真正关心的返回值一个函数。printf(),
例如,返回一个值,但 99% 的 C 程序员不知道(或关心)它返回什么。为了使一些挑剔的编译器或 lint 工具不会抱怨未使用的返回值,您可以将返回值转换为 void,以表明您知道它在那里,并且您明确不关心它。
除了向编译器传达您的意图(您不关心这个值)之外,它实际上并不do任何东西 - 这只是对编译器的提示。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)