gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:52:46 24 4
gpt4 key购买 nike

我正在将一些 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com