我正在将一些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)
中答案 0 :(得分:2)
标准标题<cassert>
(或C中的<assert.h>
)将assert
定义为宏,使该名称无法用于任何其他目的。即使您自己不包含该标题,也可能间接包含其他标题。这可能就是为什么你只能在一个平台上看到问题,而不是两者兼而有之。
最好的选择是重命名你的功能以避免冲突;或者,您可以在任何想要为您的目的使用该名称的文件中使用#undef assert
。
答案 1 :(得分:1)
右键单击原型中的assert
,然后选择“跳转到定义”。你会看到它在某处定义了#lind'd,给你带来了这个问题。
你可以#undef assert
通过它。