【发布时间】:2019-12-19 03:38:22
【问题描述】:
当我将 Nilorea 库中的这个多行宏包含在我的 C++ 项目中时,它无法编译。它被标记为外部“C”。
尝试过 GodBolt,并且 GCC 8.1 编译器在以下代码中的 if 语句中出现问题:https://godbolt.org/z/Lq_7aT
#define Free( __ptr )\
if ( __ptr )\
{\
free( __ptr );\
__ptr = NULL;\
}
int* i = 0;
Free(i);
它应该编译。这是使用标准的问题吗?
我用一个糟糕的可编译示例编辑了这个问题。
【问题讨论】:
-
你说一个宏被标记为
extern "C"是什么意思?这对 C 预处理器来说毫无意义! -
注意:下划线是为编译器保留的。我假设你在一个函数中调用你的
Free(0)? -
它定义的header标记为extern c
-
free(NULL)没问题,if ( __ptr )测试用处不大。 -
你知道你可以用
-E开关在godbolt中运行编译器吗? godbolt.org/z/1Nyfvq 这将消除 macro 噪音。