我有一个全局帮助函数,由头文件中的一堆宏使用。目的是通过简单地#include
单个头来允许宏可用(换句话说,我想将函数定义保留在头中并避免将其放在单独的编译单元中)。但是,当应用程序#include
在多个编译单元中存在此文件时会出现问题,因为出现重复符号问题。
辅助函数具有足够的特性,不应该在其中声明内联。
我在乱搞,发现使用未命名的命名空间解决了重复符号的问题,即:
namespace
{
void foo(...)
{
}
};
#define HELPER_A foo(1, ...);
#define HELPER_B foo(2, ...);
...
这种方法有什么缺点吗?还有更好的选择吗?
答案 0 :(得分:4)
除非标记为inline
,否则您的项目中只允许使用一个定义定义。你可以拥有尽可能多的函数声明(也就是函数原型)。
将您的函数定义移动到.cpp文件,并将声明保留在头文件中
void foo(...); // no function body makes this a declaration only
或者您可以将其标记为inline
:
inline void foo(...) { /* ... */ }
作为一般规则, inline
函数应该很小且计算速度快。