Немного о программировании на языке 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 срабатывает и для структуры, которая еще не определена!