1

我想创建一个Commons.h文件,我可以在其中放置一些共享信息、常量、宏和辅助函数。

该文件必须包含在我的应用程序的许多部分中。

如果我用这种语法创建函数,我会得到一个Duplicate Symbol错误:

int myFunction(int a){ 
   //do something..
}

如果我添加 static 关键字,我不会收到任何错误。

static int myFunction(int a){ 
   //do something..
}

1)这是向项目添加辅助功能的有效/正确方法吗?static2)在该定义中添加关键字究竟会发生什么?

4

2 回答 2

4

并不真地。您正在每个翻译单元中创建该函数的单独实例。你应该做的只是在头文件中声明函数:

extern int myFunction( int a );

并在某处的源文件中定义它。(请注意, extern上面的内容是可选的,因为它对所有函数声明都是隐含的,并且通常会省略它。我在这里添加它只是为了强调您是在声明而不是定义的事实。)

于 2013-09-10T10:23:51.893 回答
1

如果static在函数声明之前使用关键字,则只能在定义它的实际翻译单元(.cpp、.c 或 .m)内使用此函数。

所以它是关键字的反义词externextern函数的默认存储类说明符。

使用辅助函数是错误的,因为它甚至不能编译。

相反,您应该将帮助文件中的函数声明为 extern。并使用它而无需再次实现它。您可以在帮助程序 .h 的 .c/.cpp/.m 中实现一次。

如果您将某个函数用作其他文件的辅助函数,那么最好使用extern关键字,即使它不是必需的。这是给程序员的一个提示,这个函数在别处使用。

于 2013-09-10T10:19:04.050 回答