C11,6.7.9初始化:
designator:
[ constant-expression ]
. identifier根据常量表达式的结果在指示器中选择标识符的能力会有用吗?
基本原理:如果“一个常量表达式可以在翻译期间而不是运行时计算”(6.6常数表达式),那么它的结果可以用来提供选择标识符的能力。
示例:
union
{
float f;
int i;
} x = { <constant-expression> ? .f = 1.0f : .i = 0 };它可以看作是:根据常量表达式的结果控制目标类型。否则(现在)需要预先知道目标类型(即标识符中的标识符)。
发布于 2021-08-16 14:06:41
根据常量表达式的结果在指示器中选择标识符的能力会有用吗?
由于代码已经可以有选择地初始化对象,所以我几乎没有看到OP有选择地初始化成员的新想法的应用程序。
typedef union {
float f;
int i;
} fi;
int main() {
fi x = 0 ? (fi) {.f = 1.0f} : (fi) {.i = 0};
printf("%f %d\n", x.f, x.i);
fi y = 1 ? (fi) {.f = 1.0f} : (fi) {.i = 0};
printf("%f %d\n", y.f, y.i);
return 0;
}输出
0.000000 0
1.000000 1065353216发布于 2021-08-16 13:14:42
我想OP被标准的说法弄糊涂了。
designator:
[ constant-expression ]
. identifier仅仅是示例的定义,例如在6.7.9p35中。
35 EXAMPLE 11 Designators can be used to provide explicit initialization when unadorned initializer lists
might be misunderstood:
struct { int a[3], b; } w[] =
{ [0].a = {1}, [1].a[0] = 2 };这里有一个变量w,它是一个结构数组,[0].a = {1}初始化数组w的第一个元素的字段a。
所以
union
{
float f;
int i;
} x = { <constant-expression> ? .f = 1.0f : .i = 0 };当前无效的C。
https://stackoverflow.com/questions/68803108
复制相似问题