我正在尝试实现一些对其他人有用的代码。我使用的是 Visual Studio 2013,但我相信他们使用的是不同的编译器。代码中的所有内容都正常工作,除了一些宏。
一个例子:
#ifndef SAFE_DELETE
#define SAFE_DELETE(x) /
if (x != NULL) /
{ /
delete x; /
x = NULL; /
}
#endif
这里我得到错误expected a declaration
,或者error C2059: syntax error : 'if'
不足为奇,我在尝试使用它时遇到错误:
SAFE_DELETE(*it); // "expected an expression"
我定义此宏的 namespace 与我的应用程序的其余部分共享,并且该宏未在其他任何地方使用。也没有任何其他语法错误。注释掉 include 和 SAFE_DELETE(*it);
生成可以编译的代码。此外,用宏中的代码替换宏调用也有效。
我尝试重新定义函数如下:
#ifndef SAFE_DELETE
#define SAFE_DELETE(x) /
x = NULL; /
#endif
这会产生错误 Error: this declaration has no storage class or type specifier
。这让我相信,不知何故,这并没有在类里面被调用,但很明显是这样。
是什么导致了这个问题?此外,这怎么可能是为其他人编译的?
最佳答案
您需要反斜杠 (\
) 来续行,而不是正斜杠 (/
)。
关于c++ - C++ 中的宏问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29111850/