使用三元运算符进行数组初始化?

Rud*_*sel 8 c ternary-operator

我无法访问C11规范,因此我无法调查此错误.

以下声明在编译期间出现错误:

int why[2] =  1 == 1 ? {1,2} : {3,4}; 
Run Code Online (Sandbox Code Playgroud)

错误是:{之前的预期表达式:和之前的预期表达式:

oua*_*uah 9

这不是有效的C11.

您只能使用不带表达式的初始化列表初始化数组.

int why[2] = { ... };  // initializer-list {}
Run Code Online (Sandbox Code Playgroud)

而且,1 == 1 ? {1,2} : {3,4}它不是有效的C表达式,因为{1, 2}它不是C表达式.

只是为了使用复合文字的信息,您可以使用指针对象获得您想要的东西:

int *why = (1 == 1) ? (int[2]) {1,2} : (int[2]) {3,4};
Run Code Online (Sandbox Code Playgroud)