避免重复符号并保留头文件中的代码

时间:2013-05-31 07:07:52

标签: c++

我有一个全局帮助函数,由头文件中的一堆宏使用。目的是通过简单地#include单个头来允许宏可用(换句话说,我想将函数定义保留在头中并避免将其放在单独的编译单元中)。但是,当应用程序#include在多个编译单元中存在此文件时会出现问题,因为出现重复符号问题。

辅助函数具有足够的特性,不应该在其中声明内联。

我在乱搞,发现使用未命名的命名空间解决了重复符号的问题,即:

namespace
{
    void foo(...)
    {
    }
};

#define HELPER_A foo(1, ...);
#define HELPER_B foo(2, ...);
...

这种方法有什么缺点吗?还有更好的选择吗?

1 个答案:

答案 0 :(得分:4)

除非标记为inline,否则您的项目中只允许使用一个定义定义。你可以拥有尽可能多的函数声明(也就是函数原型)。

将您的函数定义移动到.cpp文件,并将声明保留在头文件中

void foo(...); // no function body makes this a declaration only

或者您可以将其标记为inline

inline void foo(...) { /* ... */ } 
作为一般规则,

inline函数应该很小且计算速度快。