在C中使用void指定空参数列表的相关性

时间:2014-06-12 07:55:47

标签: c

在C ++和C#中完成了大部分的开发工作后,我发现在C中指定一个带有“void”的空参数列表的习惯有点奇怪,但在“值得信赖的来源”中看到它让我认为它是必需的 - 是的。问题是为什么

为了澄清,例如在Visual Studio中,我不能使用已启用的C编译器开关和禁用的C ++编译器开关的任何组合,在编写此代码时可以获得与编译器警告一样多的内容:

void foo_bar();

那么,是什么让它成为必要 - 而是用这个声明它:

void foo_bar(void);

是否只是旧的C标准,这是后来的C标准不需要的延迟?

1 个答案:

答案 0 :(得分:2)

背景故事:

在C中声明函数(实际上是任何符号)时,您需要以正确的顺序声明所有内容(在使用之前声明一个函数),否则您将收到有关未定义符号的错误。

函数的转发声明允许您通过仅声明函数签名(没有正文)来完成此操作。这允许编译器识别函数名称(符号),然后在完全定义之前使用它们。

当使用前向声明导出库的公共可访问函数时(在公共头文件中),您将声明整个签名,以便库的用户知道预期的参数。

当使用前向声明供你自己内部使用时,你(有时)不需要声明函数的整个签名,只有返回类型和名称就足够了 - 没有参数。只有在最终定义函数时,才会指定参数列表。

直接回答:

是的,它只是旧的C标准而已。因为相同的 C standardese 表示空括号表示未知数量的参数(不一定是0)。

相关阅读:

This question我前段时间曾经问过,试图用你的方式来理解使用"未知数量的参数" - 显然是以一种非常误解的方式。