【问题标题】:C global function (not C++)C 全局函数(不是 C++)
【发布时间】:2015-02-20 17:07:37
【问题描述】:

我正在尝试在 C 中创建一个全局函数。可以从不同文件中调用的东西。

我知道如何创建一个全局变量,方法是在除一个文件之外的所有文件中声明它(使用 extern),然后只在一个文件中定义它(不使用 extern)。

我需要一个 - 可能很简单 - 可以与 C89 一起使用的解决方案(我正在使用 VS2013)。

我现在正在 C 模式下编译,但如果我稍后切换到 C++ 模式,我希望它能够工作。

谢谢。

【问题讨论】:

  • extern 也可以以同样的方式处理函数。但最好使用头文件来包含...

标签: c function function-pointers global


【解决方案1】:

声明,通常在 .h 文件中,但也可以直接复制粘贴到 .c 文件中(用于快速和肮脏的测试等,对于任何真正的代码你应该写一个正确的 .h 文件)。只要它们匹配,同一编译单元中的重复就可以了。您可以将extern 与变量一起使用,但这不是必需的,编译器会知道这只是函数声明,因为没有函数体{}。此外,由于没有 static 关键字,编译器假定这是一个全局符号。

int my_global_function(const char *string);

定义,恰好在一个 .c 文件中(更正式地说是一个编译单元),因此它将在一个 .o 文件(或库)中,否则链接器会抱怨的。:

int my_global_function(const char *string)
{
    puts(string);
    return 0;
}

【讨论】:

  • 但最好在实现该函数的 C 文件中包含的同一个头文件中包含一个原型声明:然后编译器将检查原型是否与其实现匹配。
  • 我在除一个之外的所有声明前使用了带有函数声明和 extern 的标题。有用。这是好的还是坏的做法?
  • @Agostino 我不会在.h 文件中将extern 与函数声明一起使用,但如果你这样做,请保持一致并在任何地方以相同的方式使用相同的逻辑。 AFAIK 对 C 编译器没有影响。
猜你喜欢
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 2020-07-10
  • 1970-01-01
  • 1970-01-01
  • 2019-12-03
  • 2020-09-09
  • 2011-11-09
相关资源
最近更新 更多