【发布时间】:2014-02-26 07:51:07
【问题描述】:
有没有办法使用 C/C++ 预处理器“刻画”某些东西?您可以通过以下方式“字符串化”:
#define STRINGIFY(x) #x
那么,有没有一种方法可以使用相同的原理来“刻画”?
【问题讨论】:
-
(#x [0])? (长度) -
至少 GCC 和可能的 Clang 将
("string literal"[0])视为常量表达式。 -
@user3175411 但不幸的是 C 并不将其视为常量表达式
-
@ouah,你确定吗?对我来说,它看起来很稳定。请问标准的章节和诗句?
-
@vonbrand 尝试使用 gcc 或 clang 编译
static int x = "a"[0];,您会看到非常量初始化程序出现错误。对于 c99 中 6.6p6 和 6.6p7 的标准外观,您会看到“a”[0] 不在允许的常量表达式列表中。
标签: c macros c-preprocessor stringification