[СИ] Объявление и определение переменных.
Язык СИ
ОС UNIX
Иногда в СИ-программах встречается такое:
typedef struct node node;
typedef char type;
typedef node *tree;
struct node {
int w;
type val;
node *left;
node *right;
};
И это компилится и работает.
Я не понимаю таких строк. Я бы написал так:
typedef char type;
struct node {
int w;
type val;
node *left;
node *right;
};
typedef struct node node;
typedef node *tree;
то что он должен думать? Ведь node описан ниже по тексту.
Для сравнения два определения функций:
int get_matr_1(int w, int h, char matr[][w]) {...}
int get_matr_2(char matr[][w], int w, int h) {...}
Первая компилится и работает. Вторая не компилится. Видимо потому,
что w после matr[][w].
Про незавершенные структуры читал в учебнике и даже сам пользовался.
Но тут-то другое.
Какое тут правило?