使用static关键字复制符号和函数

时间:2013-09-10 09:50:30

标签: c++ objective-c c coding-style

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

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

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

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

如果我添加静态关键字,我没有错误。

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

1)这是向项目添加辅助函数的有效/正确方法吗? 2)在该定义中准确添加static关键字会发生什么?

2 个答案:

答案 0 :(得分:4)

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

extern int myFunction( int a );

并在某个源文件中定义它。 (注意 上面的extern是可选的,因为它是隐含的 函数声明,通常省略它。我添加它 这里只是强调你要宣告的事实,而不是 定义。)

答案 1 :(得分:1)

如果您在功能声明之前使用关键字static,那么您只能使用此功能 实际的翻译单元(.cpp,.c)或.m),它的定义。

因此它与关键字extern相反,extern函数默认存储类说明符。

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

相反,您应该将辅助文件中的函数声明为extern。并使用它而不再实施它。您可以在帮助器.h。

的.c / .cpp / .m中实现一次

如果您将函数用作其他文件的辅助函数,则最好使用extern关键字,即使不需要它也是如此。这是程序员的一个提示,这个功能在其他地方使用。