gpt4 book ai didi

c++ - 是否有满足 C99 标准的 static_assert 替代品?

转载 作者:IT老高 更新时间:2023-10-28 23:20:14 32 4
gpt4 key购买 nike

我一直在尝试实现类似于 C++11 标准中定义的 static_assert 的方法。主要问题是 C++ 编译器如何将传递给 static_assert 的文本消息编写为 const char*?我可以让编译器编写类似 A_is_not_POD 的消息。这就是我所拥有的:

#define MY_STATIC_ASSERT(condition, name)         \
typedef char name[(condition) ? 1 : -1];

但是让编译器编写类似 "Error: A is not POD."之类的东西会非常好。有什么建议吗?

最佳答案

不确定我是否理解问题,但 C11 有 _Static_assert(condition, errmessage)。在 C99 中缺少此功能,但根据编译器,可以进行模拟。例如。对于 gcc(不幸的是 clang 不支持属性(错误))

#define MY_STATIC_ASSERT(cnd, descr) ({ \
extern int __attribute__ ((error("static assert failed: (" #cnd ") (" #descr ")"))) \
compile_time_check(void); \
((cnd) ? 0 : compile_time_check()), 0; \
})

关于c++ - 是否有满足 C99 标准的 static_assert 替代品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20425938/

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