【问题标题】:How can I reference a parameter within a designated initializer?如何在指定的初始化程序中引用参数?
【发布时间】:2020-10-25 02:52:11
【问题描述】:

我想将一个参数的值添加到指定初始化程序中的另一个参数,而不必定义一个单独的变量来保存该值。这可能吗?

typedef struct {
  int x;
  int y;
} point;

int main() {
  point p = {
    .x = 1,
    .y = x + 2 // I want to reference .x
  };
}

【问题讨论】:

    标签: c designated-initializer


    【解决方案1】:

    这是不可能的。初始化程序中表达式的求值顺序不按任何特定顺序求值,因此不能保证 .x 将在 .y 设置为 .x + 2 之前设置为 1。

    这在C standard 的第 6.7.9p23 节中有详细说明:

    初始化列表表达式的求值是 相对于彼此不确定地排序并且
    因此任何副作用发生的顺序是 未指定。152)

    脚注 152 指出:

    特别是,评估顺序不必与顺序相同 子对象初始化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-05
      • 2021-03-25
      • 2013-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多