Я пытаюсь выяснить, как именно взаимодействуют предварительные объявления. При предварительном объявлении функции, которая принимает структуру typedef, есть ли способ просто заставить компилятор принять ранее объявленную (но фактически не определенную) структуру в качестве параметра?
Код, который у меня работает:
typedef struct{
int year;
char make[STR_SIZE];
char model[STR_SIZE];
char color[STR_SIZE];
float engineSize;
}automobileType;
void printCarDeets(automobileType *);
Что я хотел бы сделать:
struct automobileType;
void printCarDeets(automobileType *);
//Defining both the struct (with typedef) and the function later
Я чувствую, что либо упускаю что-то действительно основное, либо не понимаю, как компилятор работает с предварительными объявлениями структур.
struct automobileType { … };
в файле C. 09.10.2016typedef struct automobileType automobileType;
в заголовке вместе сvoid printCarDetails(automobileType *);
. Затем в коде C вы определяете структуру:struct automobileType { …your structure details… };
(и вы также включаете туда заголовок и место, где вы вызываете функцию). То, что в ответе, отлично работает, если вы компилируете с C99; то, что описано здесь, работает с C89 и C99, а также с C11 (и также работает с предварительным стандартом C, но это не должно быть проблемой). 09.10.2016struct
. Пусто означает, что поля не указаны. 09.10.2016