Кто-нибудь знает, почему это успешно компилируется? - PullRequest
2 голосов
/ 18 июля 2011
int main()
{
   // forward declaration
   struct myStruct_st *mS; // Note that this will expand as "struct struct myStruct_st *mS which does not make any sense to me"

   return 0;
}

// definition of myStruct_s
typedef struct myStruct_s
{
   int x;
   int y;
} myStruct_st;

Я понимаю, что myStruct_s - это структура, которую необходимо объявить впередУ меня была эта опечатка в моем коде, который, казалось, компилировался.Интересно, как, хотя.Кто-нибудь знает?

Ответы [ 2 ]

4 голосов
/ 18 июля 2011

Локальная структура не имеет ничего общего с со структурой, определенной вне main(). В main() вы (forward-) объявляете структуру, определяете указатель на эту структуру и никогда не определяете структуру. Это совершенно нормально. Так получилось, что вы определили структуру с тем же именем за пределами main().

0 голосов
/ 18 июля 2011

Я думаю, вы неправильно понимаете, как работает typedef - это не подстановка макросов.

В частности, использование struct myStruct_s после typedef означает , а не так же, как«struct struct myStruct_s» - это просто struct myStruct_s, как написано на лице.В typedef вводится токен, который можно использовать вместо struct ..., но он не расширяется как макрос и не «стирает» объявление struct ..., которое все еще можно использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...