gpt4 book ai didi

c++ - 如何通过 C++ 宏调用编译时错误?

转载 作者:搜寻专家 更新时间:2023-10-31 01:05:33 25 4
gpt4 key购买 nike

这个想法是在调用 某个宏时导致编译时错误并显示错误消息。这可以做到吗?怎么办?

#ifdef RUBBISH_COMPILER
# define alignof(T) // what here?
#endif

const std::size_t = alignof(some_type); // invocation, causing compilation error

调用应产生一个合理的错误消息,如alignof() 不适用于此编译器

最佳答案

在 C++11 中,

#define DONT_INVOKE_ME static_assert(false, "Don't invoke this macro");

从历史上看,很容易导致错误,但在输出中获取消息则比较棘手。一个简单的技巧是创建一个无效的声明,在声明的名称中包含消息:

#define DONT_INVOKE_ME char dont_invoke_this_macro[-1];

这并不完美,因为您不能为消息使用自由格式的文本 - 它必须是有效的标识符。有更高级的技巧(例如 Boost 的静态断言所使用的技巧),但它们现在仅具有历史意义。

关于c++ - 如何通过 C++ 宏调用编译时错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22409939/

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