XCode C ++断言编译器不允许重定义

时间:2013-09-03 11:29:37

标签: c++ xcode macos llvm

我正在将一些C ++代码库从Windows VC10移植到Mac XCode 10.7。我有一个包装“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的完整noob我的问题是如何解决这个问题?

顺便说一句,assert()声明包含在自定义命名空间(mynsp)

2 个答案:

答案 0 :(得分:2)

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

最好的选择是重命名你的功能以避免冲突;或者,您可以在任何想要为您的目的使用该名称的文件中使用#undef assert

答案 1 :(得分:1)

右键单击原型中的assert,然后选择“跳转到定义”。你会看到它在某处定义了#lind'd,给你带来了这个问题。

你可以#undef assert通过它。