在Visual Studio中定义与Typedef枚举发生冲突的原因是什么?



我有一些代码,这些代码在这里看起来像这样的代码(当然,我简化了它)

#define ERROR 0
namespace lib{
    class Logger{
         public:
             typedef enum {ERROR = 1} LogLevel;
    };
}

在Visual Studio中编译时,我会收到错误:syntax error: 'constant'。显然,问题是我正在重复使用定义和typedef枚举的单词错误。

任何人都知道定义的逻辑影响了某些可变名称,这些名称被包括在名称空间和类中。我的意思是,如何将ERRORlib::Logger::ERROR混淆,因为我的猜测是它们具有完全不同的范围。

预处理器#define替换是您编译代码时发生的第一件事。这些替代是在文本上进行的,并忽略了C 语法。您的代码等同于:

namespace lib{
    class Logger{
         public:
             typedef enum {0 = 1} LogLevel;
    };
}

很明显,在用ERROR替换CC_5之后,您的enum定义不正确。

如果其他任何机制可以做相同的工作,使用预处理器Marcos通常被视为一个坏主意。这个问题说明了与使用它们相关的许多风险之一。请参阅问题为什么预处理宏是邪恶的,还有什么选择?

相关内容

最新更新