问题描述
我想将一个参数的值添加到指定的初始化程序内的另一个参数,而不必定义一个单独的变量来保存该值。这可能吗?
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指出:
尤其是,评估顺序不必与顺序相同 子对象初始化。