我正在从Windows VC10到Mac XCode 10.7移植一些C++代码库。我有一个包装“assert()”的宏。Microsoft编译器的以下定义没有问题:

void assert(bool result, const char *call, const char *file, int line);
/// Wraps \c assert().//
#define MY_ASSERT(call) (mynsp::assert((call), #call, __FILE__, __LINE__))

而XCode抛出一个错误:
提供给类似函数的宏调用的参数过多

对OS X和LLVM完全陌生,我的问题是如何解决此问题?

顺便说一句,assert()声明包装有自定义 namespace (mynsp)

最佳答案

标准头<cassert>(或C中的<assert.h>)将assert定义为宏,从而使该名称无法用于任何其他目的。即使您自己不包含该 header ,也有可能间接从其他 header 中包含该 header 。这可能就是为什么您只在一个平台而不是两个平台上都看到问题的原因。

最好的选择是重命名函数,以避免冲突。或者,您可以在要使用该名称的任何文件中使用#undef assert

关于c++ - XCode C++断言重新定义,编译器不允许,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18591155/

10-16 04:40