C - "static"函数的函数原型(prototype)和定义不匹配

标签 c gcc function-prototypes

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

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 的答案。

谢谢。

最佳答案

您可以从 http://www.iso.org/iso/home/store/catalogue_ics/catalogue_detail_ics.htm?csnumber=57853 下载完整规范

238 瑞士法郎,我相信会有答案。否则,我拥有的最佳资源来自 K&R 的“The C Programming Language”第 2 版,第 83 页的第 4.6 节(添加了重点)

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

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

关于C - "static"函数的函数原型(prototype)和定义不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22307991/

相关文章:

c++ - 为什么即使没有任何类声明也需要原型(prototype)?

c - 为什么将 int(或任何)指针指向结构不会给出错误

c - 实现 Sobel 过滤器时出现奇怪的结果

使用 LEA 优化 gcc

c - GCC 中 C 程序出现链接错误

c++ - 函数原型(prototype) vs 在 cpp 中包含 header

c - 数据对齐: where can it be read off?可以改吗?

c++ - 声明时可以使用变量吗?

c++ - 在 OSX 上安装 SDL