用三元算子初始化结构

Giu*_*Pes 4 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;
Run Code Online (Sandbox Code Playgroud)

}

编译器错误:

/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
Run Code Online (Sandbox Code Playgroud)

小智 11

当然,使用C99复合文字:

pair = odd ? (struct pair_str){ 1, 3 } : (struct pair_str){ 2, 4 };
Run Code Online (Sandbox Code Playgroud)

  • @ H2CO3; 我的意思是说*复合文字*但从现在起CL将代表*共同逻辑*:D (4认同)
  • @PHIfounder我们都需要一个CL的镜头,有很多帖子缺少它!:d (2认同)