【发布时间】:2015-06-27 02:42:05
【问题描述】:
我正在阅读“用 C 语言编程”一书,在第 10 章中找到了这样一个示例:
#include <stdio.h>
void test (int *int_pointer)
{
*int_pointer = 100;
}
int main (void)
{
void test (int *int_pointer);
int i = 50, *p = &i;
printf ("Before the call to test i = %i\n", i);
test (p);
printf ("After the call to test i = %i\n", i);
return 0;
}
我理解这个例子,但我不理解 void test (int *int_pointer); 内的 main 行。为什么我又定义了test的签名?那是惯用的 C 吗?
【问题讨论】:
-
这是多余的。你不需要。
-
这是一个声明,它告诉编译器某处有一个名为
test的函数,它接受指定的参数并且不返回任何内容。它也被称为“函数原型”。在您的简单示例中您并不真正需要它,因为函数原型已经用函数定义声明,但如果您例如将定义移至main函数下方,或移至另一个源文件。声明就是声明,声明就是声明,你可以在允许放置声明的地方放置任何你想要的声明。 -
@JoachimPileborg; “声明就是声明,声明就是声明,你可以在允许放置声明的地方放置任何你想要的声明。”:?
-
@hacks 我的意思是声明就是声明,无论它声明什么。如果语言允许声明,则可以放置任何类型的声明。
-
@Olaf:我不同意你的说法。可能有一些极端和奇怪的情况是必要的,但我不同意有很多这样的情况。此外,在可能有必要的少数情况下,我认为代码将存在重大维护问题。可能标头试图过于全面,或者代码正在尝试做一些它确实不应该做的事情。