检查创建的对象是否没有外部链接

时间:2012-05-30 10:30:39

标签: c++ linker external

是否存在任何方式执行链接时约束 - 检查对象实例是否在没有外部链接的情况下创建为静态,反之亦然?

例如:

// test.cpp

// correct
namespace{
static MyObject obj;
}

//test.h

struct Obj
{
    // wrong
    static MyObject m_obj;
}

在这种情况下,将错误链接为诊断消息即可。

据我所知,在编译时不可能创建类似的东西。

1 个答案:

答案 0 :(得分:0)

糟糕的方式,但你可以使用宏(我不认为这是你需要的)

#define MyObject MyObject
...
#ifdef MyObject
#error somemessagethere
#endif

或者只需在.h文件中声明之前键入extern

我记得,在函数外部使用的static关键字意味着变量/函数实例只应存在于当前模块中。