gpt4 book ai didi

c++ - 有没有办法让 C 预处理器解析 #error 语句中的宏?

转载 作者:可可西里 更新时间:2023-11-01 15:10:59 24 4
gpt4 key购买 nike

正如标题所说。我想在 #error 语句的文本中使用预处理器宏:

#define SOME_MACRO 1

#if SOME_MACRO != 0
#error "SOME_MACRO was not 0; it was [value of SOME_MACRO]"
#endif

在此示例中,我希望预处理器将 [value of SOME_MACRO] 解析为 SOME_MACRO 的实际值,在本例中为 1。这应该在预处理器之前发生,编译器或任何进程 #error 打印错误输出
有没有办法做到这一点,或者这是不可能的?

我不想知道是否有 ISO C++ 标准方法可以做到这一点,因为据我所知,预处理程序指令 #error 没有在任何 ISO C++ 标准中说明。但是,我知道 GCC 和 Visual C++ 支持 #error。但我的问题并不特定于那些编译器,我只是好奇是否有任何 C/C++ 编译器/预处理器可以做到这一点。

我试图搜索那个主题,但没有成功。

最佳答案

为了完整性,我建议使用 C++0x 方式(使用与 Kirill 相同的技巧):

#define STRING2(x) #x
#define STRING(x) STRING2(x)

#define EXPECT(v,a) static_assert((v)==(a), "Expecting " #v "==" STRING(a) " [" #v ": " STRING(v) "]")


#define VALUE 1

EXPECT(VALUE, 0);

给予:

g++ -Wall -Wextra -std=c++0x test.cc                     
test.cc:9: error: static assertion failed: "Expecting VALUE==0 [VALUE: 1]"

关于c++ - 有没有办法让 C 预处理器解析 #error 语句中的宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6002594/

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