gpt4 book ai didi

c - splinter 的多线宏

转载 作者:太空宇宙 更新时间:2023-11-04 06:10:45 24 4
gpt4 key购买 nike

当我将 Nilorea 库中的这个多行宏包含在我的 C++ 项目中时,它无法编译。它被标记为外部“C”。

尝试了 GodBolt,GCC 8.1 编译器在以下代码中的 if 语句上 barfs:https://godbolt.org/z/Lq_7aT

#define Free( __ptr )\
if ( __ptr )\
{\
free( __ptr );\
__ptr = NULL;\
}
int* i = 0;
Free(i);

它应该编译。这是使用标准的问题吗?

我用一个糟糕的可编译示例编辑了问题。

最佳答案

Godbolt 代码编译失败是因为

  • 您正在调用函数外的代码
  • 您正在尝试分配给文字 0
  • 您没有包含必要的 header 。

此外,如评论中所述,标识符中的双下划线保留用于实现。编译器不会对此进行诊断,但无论如何它都是非法的。

解决这三个问题时,它有效:

#include <stdlib.h>

#define Free(ptr) \
if (ptr) \
{ \
free(ptr); \
ptr = NULL; \
}

int main(void) {
int *px = NULL;
Free(px);
}

(我还修复了残忍、不一致的间距。)

关于c - splinter 的多线宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57463195/

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