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

标签 c ternary-operator

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

下面的声明会在编译时出错:

int why[2] =  1 == 1 ? {1,2} : {3,4}; 

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

最佳答案

这不是有效的 C11。

您只能使用初始化列表而不是表达式来初始化数组。

int why[2] = { ... };  // initializer-list {}

此外,1 == 1 ? {1,2} : {3,4} 不是有效的 C 表达式,因为 {1, 2} 不是 C 表达式。

仅对于使用复合文字的信息,您可以使用指针对象获得接近您想要的东西:

int *why = (1 == 1) ? (int[2]) {1,2} : (int[2]) {3,4};

关于c - 使用三元运算符进行数组初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15877560/

相关文章:

opengl - GLSL 扩展支持 ? : ternary operator?

ios - 在 Swift 三元运算符中使用 OR 操作数

java - Java 1.4 中三元条件运算符的意外副作用

两个字符串中不重复的相似字符的计数

c - 关于 c struct (gcc) 问题的原子加载/保存

c++ - Linux IPC实现猜测

Python - 在条件下调用函数

python - 应用于三元运算符参数的一元运算符的用法(例如应用于字符串的 * 运算符参数)

c++ - sqlite 通过 c++,打开多个 sqlite 文件

c - 了解某个应用程序/命令在 Linux 上是否可用?