首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据常量表达式的结果在指示器中选择标识符的能力会有用吗?

根据常量表达式的结果在指示器中选择标识符的能力会有用吗?
EN

Stack Overflow用户
提问于 2021-08-16 12:49:08
回答 2查看 72关注 0票数 0

C11,6.7.9初始化:

代码语言:javascript
复制
designator:
    [ constant-expression ]
    . identifier

根据常量表达式的结果在指示器中选择标识符的能力会有用吗?

基本原理:如果“一个常量表达式可以在翻译期间而不是运行时计算”(6.6常数表达式),那么它的结果可以用来提供选择标识符的能力。

示例:

代码语言:javascript
复制
union
{
    float f;
    int   i;
} x = { <constant-expression> ? .f = 1.0f : .i = 0 };

它可以看作是:根据常量表达式的结果控制目标类型。否则(现在)需要预先知道目标类型(即标识符中的标识符)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-16 14:06:41

根据常量表达式的结果在指示器中选择标识符的能力会有用吗?

由于代码已经可以有选择地初始化对象,所以我几乎没有看到OP有选择地初始化成员的新想法的应用程序。

代码语言:javascript
复制
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;
}

输出

代码语言:javascript
复制
0.000000 0
1.000000 1065353216
票数 2
EN

Stack Overflow用户

发布于 2021-08-16 13:14:42

我想OP被标准的说法弄糊涂了。

代码语言:javascript
复制
designator:
    [ constant-expression ]
    . identifier

仅仅是示例的定义,例如在6.7.9p35中。

代码语言:javascript
复制
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

所以

代码语言:javascript
复制
union
{
    float f;
    int   i;
} x = { <constant-expression> ? .f = 1.0f : .i = 0 };

当前无效的C。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68803108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档