我想创建一个Commons.h
文件,我可以在其中放置一些共享信息,常量,宏和辅助函数。
此文件必须包含在我的应用程序的许多部分中。
如果我使用这种语法创建函数,我会收到Duplicate Symbol
错误:
int myFunction(int a){
//do something..
}
如果我添加静态关键字,我没有错误。
static int myFunction(int a){
//do something..
}
1)这是向项目添加辅助函数的有效/正确方法吗?
2)在该定义中准确添加static
关键字会发生什么?
答案 0 :(得分:4)
不是真的。您正在创建该函数的单独实例 在每个翻译单元。你应该做的只是声明 标题中的函数:
extern int myFunction( int a );
并在某个源文件中定义它。 (注意
上面的extern
是可选的,因为它是隐含的
函数声明,通常省略它。我添加它
这里只是强调你要宣告的事实,而不是
定义。)
答案 1 :(得分:1)
如果您在功能声明之前使用关键字static
,那么您只能使用此功能 实际的翻译单元(.cpp,.c)或.m),它的定义。
因此它与关键字extern
相反,extern
是函数的默认存储类说明符。
然后使用辅助函数是错误的,因为它甚至不能编译。
相反,您应该将辅助文件中的函数声明为extern。并使用它而不再实施它。您可以在帮助器.h。
的.c / .cpp / .m中实现一次如果您将函数用作其他文件的辅助函数,则最好使用extern
关键字,即使不需要它也是如此。这是程序员的一个提示,这个功能在其他地方使用。