C语言宏:优雅地检测常量表达式

2025-05-13

本文探讨了在C语言中编写宏以检测表达式是否为编译时常量的多种方法。作者尝试了利用C23的`constexpr`和`typeof`、GNU扩展`__builtin_constant_p`、C11的`static_assert`、以及巧妙运用`sizeof`和复合字面量等技巧。这些方法各有优劣,有的需要较新的C标准支持,有的依赖编译器扩展,有的可能改变表达式的类型或产生警告信息。文章最后总结了这些方法的利弊,并表达了对更优雅解决方案的期待。