gpt4 book ai didi

c++ - Xcode 中 DEBUG 标识符的编译错误

转载 作者:太空宇宙 更新时间:2023-11-04 11:23:26 25 4
gpt4 key购买 nike

我正在尝试使用 Xcode 构建静态 C++ 库。我在下面的枚举中的 DEBUG 标识符上遇到构建错误,不确定为什么会这样。我可以从终端使用 Clang++ 编译它。为什么在 Xcode 中编译失败?

错误:

Parse Issue
temp_1.h:9:5: Expected identifier

temp_1.h

enum LogLevel {

DONT_PRINT = 0,
SPEW = 1,
DEBUG = 2,
INFO = 3,
WARNING = 4,
ERROR = 5,
FATAL = 6,
INVALID = 7,
NO_EXIT_ON_ERROR = 8,
MANDATORY = 9
};

class temp_1 {
public:
temp_1();
int get_var();
void set_var(int _var);

private:
int var;
};

temp_1.cpp:

#include "temp_1.h"

temp_1::temp_1() {
var = DEBUG;
}
int temp_1::get_var() {
return var;
}
void temp_1::set_var(int _var) {
var = _var;
}

最佳答案

很多构建环境定义了预处理器宏DEBUG,当代码在 Debug模式下编译时,这样你就可以写

#ifdef DEBUG
// do something in debugging mode only
#endif

看起来在您的 Xcode 构建中,DEBUG 被定义为不是标识符的东西,可能是 DEBUG=1DEBUG=。因此,预处理后的代码看起来像 SPEW = 1, 1 = 2,SPEW = 1, = 2,

避免在代码中使用标识符 DEBUG。在 C 语言中,您通常会在这些标识符之前加上前缀:LOG_LEVEL_DONT_PRINTLOG_LEVEL_SPEWLOG_LEVEL_DEBUG 等。在 C++ 中,命名空间大多使用此类前缀不必要的和不合逻辑的。尽管如此,请避免全部大写 DEBUG。您可以仅以不同方式命名此标识符,或使用 SpewDebug 等,并将全部大写保留给预处理器。

如果您无法避免使用标识符DEBUG,那么您可以通过确保您的构建环境从不将其定义为处理器宏来允许程序构建。如果你想吃蛋糕吃,你可以做得更好:确保 DEBUG 未定义或定义为 DEBUG(即在编译器命令行上没有任何内容或 -UDEBUG,或 -DDEBUG=DEBUG)。当预处理器宏扩展为自身时,会将标识符原封不动地传递给编译器的下一阶段(因此 DEBUG 将正常充当标识符),但会阻塞条件编译指令 #ifdef DEBUG#endif 将被编译。

关于c++ - Xcode 中 DEBUG 标识符的编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27489745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com