Forward declaration

Jun 07, 2010 21:22


Немного о программировании на языке C.

Сегодня меня переклинило: я не смог сообразить, как перебороть следующий кусок кода:

1 typedef double (*Fun3D)(double, double, double, const AS_Data*); 2 3 typedef struct AS_Data_s 4 { 5 Fun3D fun_u; /* Analytical solution */ 6 Fun3D fun_f; /* Analytical rhs */ 7 8 /* ... */ 9 } AS_Data;
Аргументом функции типа Fun3D должен быть указатель на структуру AS_Data, а указатель на такую функцию должен быть элементом структуры. (Конечно, в C++ легко обойтись без такого "извращения".)

При этом структура должна обязательно иметь имя AS_Data_s, и еще с помощью typedef вводится для краткости тип AS_Data.

Что же делать? А вот что!

1 typedef struct AS_Data_s AS_Data; 2 3 typedef double (*Fun3D)(double, double, double, const AS_Data*); 4 5 struct AS_Data_s 6 { 7 Fun3D fun_u; /* Analytical solution */ 8 Fun3D fun_f; /* Analytical rhs */ 9 10 /* ... */ 11 };
Оказывается, typedef срабатывает и для структуры, которая еще не определена!

программирование

Previous post Next post
Up