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

标签 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 的完全菜鸟,我的问题是如何解决这个问题?

顺便说一句,assert() 声明是用自定义命名空间 (mynsp) 包装的

最佳答案

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

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

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

相关文章:

c++ - 难以编写多级 for 循环

c++ - std::vector<T>::使用子范围赋值有效吗?

git - git merge 命令后出现不明确的信息消息

xcode - 在 xcode 7 中使用 Mac App 预配置菜单项

ios - 使用 swift 在大量 map 上的 xcode 中构建时间极长

node.js - Macbook React Native 安装

c++ - 正则表达式匹配空格,但不在 "strings"

c++ - CMake 找不到包含文件

swift - 使用 UITextField 和 UITextView 时出错

xcode - 非事件窗口上带有自定义图像的 Mac 圆形纹理按钮