2015-10-08 2 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 »_ comment (PS: есть причина, почему большинство людей используют верхний регистр для макросов, а не для членов структуры) –

ответ

4

Если у вас есть что pid_test макрос определен,

pOBJ->_un._testing2.pid_test 

расширяется

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

Я уверен, что вы можете обнаружить проблему.

+0

OK Я получил его , Спасибо .... – Ansari

+0

@ Ансари, как вы поняли, возможно, было бы неплохо отметить ответ как выбранный, поэтому molbdnilo может получить определенную репутацию в вашем успехе. –

Смежные вопросы