c - 过程声明和定义不匹配

标签 c gcc

static void foo(void);

[.....]

void foo(void) {
    .....
}

产生静态范围的“foo”,而如果“static”从声明移动到定义,则会出现错误。我无法提出一个谷歌问题来让我找到理由,但对我来说这似乎不合理......

有人有见解吗?

最佳答案

链接器需要函数声明来解析通过翻译单元的调用。因此,如果函数被声明为静态,则在翻译单元之外将无法访问它。

如果将 functio 声明为非静态,并定义为静态,则会收到错误,因为声明和定义不匹配,但名称相同。

关于c - 过程声明和定义不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22079144/

相关文章:

c - C 中的本地和全局函数

linux - 尽管与存档有直接链接,但对任何 libc 符号的 undefined reference

c++ - GCC ARM 交叉编译, undefined reference `__cxa_end_catch@CXXABI_1.3' 等错误表示什么?

gcc - 从 g++/gcc 3.2.3 到 4.2.4 的性能改进

c - Windows 8.1 上带有 Cygwin 的 ARM GCC : fatal error: no input file

c - 递减渐近时间复杂度

c - 什么是intptr_t,它是整数类型还是指针类型?

c - 水平频率直方图出现问题

C 函数 fread() 不读取整个文件

c - 该程序编译但在执行时终止。为什么?