【发布时间】: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
};
}
【问题讨论】:
我想将一个参数的值添加到指定初始化程序中的另一个参数,而不必定义一个单独的变量来保存该值。这可能吗?
typedef struct {
int x;
int y;
} point;
int main() {
point p = {
.x = 1,
.y = x + 2 // I want to reference .x
};
}
【问题讨论】:
这是不可能的。初始化程序中表达式的求值顺序不按任何特定顺序求值,因此不能保证 .x 将在 .y 设置为 .x + 2 之前设置为 1。
这在C standard 的第 6.7.9p23 节中有详细说明:
初始化列表表达式的求值是 相对于彼此不确定地排序并且
因此任何副作用发生的顺序是 未指定。152)
脚注 152 指出:
特别是,评估顺序不必与顺序相同 子对象初始化。
【讨论】: