c - 使用三元运算符初始化结构

标签 c struct initialization ternary-operator

为什么三目运算符不能用来初始化结构类型,而可以用来初始化像int这样的基类型?

示例代码:

#include <stdio.h>
#define ODD 1

int main(int argc, const char *argv[])
{
  static struct pair_str {
    int first; 
    int second; 
  } pair = ( ODD ) ?  {1,3} : {2,4}; // ERROR

  printf("pair %d %d\n", pair.first, pair.second); 

  int number = (ODD) ? 1 :2;  // FINE

  return 0;

编译器错误:

/home/giuseppe/struct.c: In function ‘main’:
/home/giuseppe/struct.c:12:23: error: expected expression before ‘{’ token
/home/giuseppe/struct.c:12:29: error: expected expression before ‘:’ token

最佳答案

当然,使用 C99 复合文字:

pair = odd ? (struct pair_str){ 1, 3 } : (struct pair_str){ 2, 4 };

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

相关文章:

c - 如何为gcc编写自己的代码生成器后端?

c - 二进制形式的文件

c - 指向字符串字符的指针数组

c - 先进先出 (FIFO) 问题

C - 如何在 calloc 中使用自己的值(而不是 0)

c - 由于内存耗尽而从 NULL == malloc() 恢复的策略

c++ - 使用指向彼此的指针初始化 const struct 实例

c - 我们如何在具有两个不同指针的同一结构中进行类型定义? _t 这个词是做什么的?

python - 创建空数据框并向其中添加行

c++ - 读取不确定值是未定义的行为吗?