【发布时间】:2013-09-06 14:54:58
【问题描述】:
我正在将一些 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 的新手,我的问题是如何解决这个问题?
顺便说一句,assert() 声明是用自定义命名空间 (mynsp) 包装的
【问题讨论】:
-
适用于 G++。您向宏传递了多少个参数?
-
你有
<cassert>吗? -
不,我没有。应该吗?
-
不,你不应该。可能是其他一些标题。这是宏很烂的原因之一。
-
assert是<cassert>中定义的宏的名称;我建议您为函数使用不同的名称。这将解决您的问题,或者至少可以防止人们阅读您的代码的 WTF 时刻。当我在代码中看到assert时,我只是假设它是标准的。