我一直在尝试实现类似于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不支持attribute(error))
#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/