2015-10-08 28 views
1

我有以下程序C編譯器如何解釋這個程序?

struct test 
{ 
int length; 
union 
{ 
    struct 
    { 
     int pid_test; 
     int age; 
    }_testing1; 

    struct 
    { 
     int pid_test; 
     int age; 
    }_testing2; 
}_un; 
}; 

#define pid_test _un._testing1.pid_test 
int main() 
{ 
{ 
    struct test *pOBJ = (struct test *)malloc(sizeof(struct test)); 
    pOBJ->_un._testing2.pid_test = 1; 
    free(pOBJ); 
} 
} 

當我運行它,它給了我下面的錯誤

error: ‘struct <anonymous>’ has no member named ‘_un’ 

當我以下列方式改變了代碼,它工作正常。

pOBJ->pid_test = 1; 

我不知道編譯器如何解釋上述代碼。 任何幫助將高度讚賞

+1

令牌令牌和語法規則使用語法規則。請更具體地說明你的意思。 – Olaf

+2

一個強制性的_「請不要將'malloc'和朋友的回報放在C中_」_評論(PS:有一個原因,爲什麼大多數人使用大寫的大寫字母,而不是結構成員) –

回答

4

當你有pid_test宏定義,

pOBJ->_un._testing2.pid_test 

擴展到

pOBJ->_un._testing2._un._testing1.pid_test 

我相信你一定能發現問題。

+0

好吧,我知道了。謝謝.... – Ansari

+0

@安莎瑞,你知道了,也許將反應標記爲選定的答案會很好,所以molbdnilo可以在你的成功上獲得一些聲望。 –