我试图找到关于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的答案。
谢谢。
答案 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
中静态的行为是函数或变量只在当前编译范围内已知,数据保存在生成的可执行文件中。