在C ++和C#中完成了大部分的开发工作后,我发现在C中指定一个带有“void”的空参数列表的习惯有点奇怪,但在“值得信赖的来源”中看到它让我认为它是必需的 - 是的。问题是为什么?
为了澄清,例如在Visual Studio中,我不能使用已启用的C编译器开关和禁用的C ++编译器开关的任何组合,在编写此代码时可以获得与编译器警告一样多的内容:
void foo_bar();
那么,是什么让它成为必要 - 而是用这个声明它:
void foo_bar(void);
是否只是旧的C标准,这是后来的C标准不需要的延迟?
答案 0 :(得分:2)
在C中声明函数(实际上是任何符号)时,您需要以正确的顺序声明所有内容(在使用之前声明一个函数),否则您将收到有关未定义符号的错误。
函数的转发声明允许您通过仅声明函数签名(没有正文)来完成此操作。这允许编译器识别函数名称(符号),然后在完全定义之前使用它们。
当使用前向声明导出库的公共可访问函数时(在公共头文件中),您将声明整个签名,以便库的用户知道预期的参数。
当使用前向声明供你自己内部使用时,你(有时)不需要声明函数的整个签名,只有返回类型和名称就足够了 - 没有参数。只有在最终定义函数时,才会指定参数列表。
是的,它只是旧的C标准而已。因为相同的 C standardese 表示空括号表示未知数量的参数(不一定是0)。
This question我前段时间曾经问过,试图用你的方式来理解使用"未知数量的参数" - 显然是以一种非常误解的方式。