【发布时间】:2016-01-08 03:46:24
【问题描述】:
如何确保在编译时将 COLOR_NAMES 填充到正确的大小?如果添加了新颜色,比如 COLOR_4(因此 N_COLORS 会自动递增),编译器会告诉我 COLOR_NAMES 未填充到大小。
我在网上找到的大多数答案都是针对运行时的,而不是编译时的。
这是用于 C 风格的表示法(不使用 STL 和其他库)。
enum Colors
{
COLOR_1,
COLOR_2,
COLOR_3,
N_COLORS;
};
const char* COLOR_NAMES[N_COLORS] =
{
/* COLOR_1 */ "Color1",
/* COLOR_2 */ "Color2",
/* COLOR_3 */ "Color3"
};
const char* Blah()
{
Colors color;
...
printf("%s blah blah\n", COLOR_NAMES(color));
}
【问题讨论】:
-
编译时间不长,但您可以在单元测试中轻松检查。
-
如果可能的话,它怎么知道新颜色使用什么字符串?
-
“Sam”在上一个问题stackoverflow.com/questions/712463/… 中的答案看起来很聪明。