Xcode 中 DEBUG 标识符上的编译错误
Compilation error on the DEBUG identifier in Xcode
我正在尝试使用 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
,以便您可以编写
#ifdef DEBUG
// do something in debugging mode only
#endif
看起来在您的 Xcode 构建中,DEBUG
被定义为不是标识符的东西,可能是DEBUG=1
或DEBUG=
。因此,预处理后的代码看起来像SPEW = 1, 1 = 2,
或SPEW = 1, = 2,
。
避免在代码中使用标识符DEBUG
。在 C 语言中,你通常会在这些标识符之前加上前缀:LOG_LEVEL_DONT_PRINT
、LOG_LEVEL_SPEW
、LOG_LEVEL_DEBUG
等。在C++中,命名空间大多使此类前缀变得不必要且不合时宜。尽管如此,请避免全大写DEBUG
。您可以以不同的方式命名此标识符,或者使用 Spew
、 Debug
等,并将全部大写字母保留给预处理器。
如果无法避免使用标识符 DEBUG
,则可以通过确保生成环境从不将其定义为处理器宏来允许程序生成。如果你想吃你的蛋糕,你可以做得更好:确保DEBUG
是未定义的,或者它被定义为DEBUG
(即什么都没有或-UDEBUG
,或者在编译器命令行上-DDEBUG=DEBUG
(。当预处理器宏扩展到自身时,这会将标识符原封不动地传递到编译器的下一阶段(因此DEBUG
将正常充当标识符(,但在条件编译指令中阻塞#ifdef DEBUG
... #endif
将被编译。
- std::is_base_of表示ctor编译错误
- Qt5:使用QCommandLineParser类时出现奇怪的编译错误
- 如何修复sfml c++代码编译错误
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- vscode下的Arduino代码出现意外编译错误
- 第三方 API 中的编译错误 - Visual Studio
- std::cout输出int时出现编译错误
- 奇怪的代码抛出编译错误模板< J,int aSize=10> C2143:语法错误:在"<"之前缺少";"
- 提升图广度优先搜索前置编译错误
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 使用带有 ref 参数的成员函数创建线程时出现编译错误
- 我在C++中遇到了这个奇怪的编译错误
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- 使用 std::enable_if 限制派生类的模板参数时出现编译错误
- 现代OpenGL和GLEW Libraray的编译错误
- C++ 编译错误:意外的类型名称"字符串":预期的表达式
- C ++程序编译错误,找不到/访问文件
- 使用直接大括号初始化时,C++ 编译错误"声明末尾的预期";"
- 为什么传递非静态成员函数会导致编译错误?