我可以用这种方式使用#undef吗?

时间:2010-05-27 22:57:16

标签: c++ visual-c++ c-preprocessor

我想获得一些我存储在注册表中的设置,如果它们与#define不同,我想重新定义它,我可以这样做吗?:

#define DEFINED_X "testSetting"

void LoadConfig()
{
    regConfigX = some value previusly stored in the registry;
    if(regConfigX!=DEFINED_X)
    {
        #undef DEFINED_X
        #define DEFINED_X regConfigX
    }
}

我认为#define仅在编译时使用,此代码在运行已编译的exe时是否有效?

3 个答案:

答案 0 :(得分:1)

没有。 #define#undef预处理指令;在编译源代码之前对它们进行评估。

您需要为此使用变量,而不是宏。

答案 1 :(得分:1)

#define#undef在源代码甚至命中编译器之前发生。与#define的任何关系都不能在运行时发生。

您也应该查看Boost预处理器库。

答案 2 :(得分:0)

不,使用静态变量来存储DEFINED_X的值。