2013-07-27 4 views
4

3 진 연산자를 사용하여 구조 유형을 초기화 할 수없는 이유는 과 같은 기본 유형을 초기화하는 데 사용할 수있는 이유는 무엇입니까?3 진 연산자로 구조 초기화

예제 코드 :

#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 

답변

10

물론, 사용 C99 복합 리터럴 : 구조하는 경우

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

덕분에,이 잘 작동 정적이 아닙니다. 정적 구조와 함께 사용할 수없는 이유는 무엇입니까? –

+0

@GiuseppePes 환영합니다. –

+1

CL의 또 다른 용도. +1. – haccks