2013-07-27 34 views
4

爲什麼三元運算符不能用於初始化結構類型,但它可用於初始化基本類型,如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 

回答

10

當然,使用C99複合文字:

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

謝謝,這如果結構工作正常不是靜態的。爲什麼我不能使用靜態結構? –

+0

@GiuseppePes不客氣。 – 2013-07-27 10:43:07

+1

CL的另一種用途。 +1。 – haccks