C - 不匹配的函数原型和“静态”函数的定义

时间:2014-03-10 18:10:48

标签: c gcc function-prototypes

我试图找到关于C函数的理论的一些官方确认。在我的一个简单项目中,我有一个函数,我只希望在定义它的.c文件中可见。函数原型是:

static int sum(int a, int b);

功能定义是:

int sum(int a, int b) {
   return (a+b);
}

在分析构建输出,链接映射等时,似乎该函数确实是静态的。我很惊讶我也没有收到任何构建警告或错误。但是,是否存在可以确认此行为或预期内容的文档(即GCC手册中的特定行)?

我已经找到了与C ++(Static keyword in function declaration can be missing in function definition?)相同的这个问题,但我正在寻找关于纯C的答案。

谢谢。

2 个答案:

答案 0 :(得分:2)

您可以从http://www.iso.org/iso/home/store/catalogue_ics/catalogue_detail_ics.htm?csnumber=57853

下载完整规范 对于238瑞士法郎,我确信这将得到答案。否则,我拥有的最好的资源来自" C编程语言" K& R第2版,第83页第4.6节(重点补充)

"外部静态声明最常用于变量,但它也可以应用于函数。通常,函数名称是全局的,对整个程序的任何部分都是可见的。但是,如果函数声明静态,则其名称在声明的文件之外是不可见的。"

请注意,引用仅引用函数的声明,而不是其定义,尽管静态函数的常见做法是定义也用作声明。

答案 1 :(得分:0)

默认情况下,该函数仅在.c中可见,以使其在标题(.h文件)中声明其原型的其他文件可见。

在Java或其他只有类可以调用静态方法的OO语言中,不要认为静态,这是非常不同的。

C中静态的行为是函数或变量只在当前编译范围内已知,数据保存在生成​​的可执行文件中。