前向声明是在实际定义之前的声明,被用作一个实体在定义之前前但是被实际使用。 当然,并不是所有的事情都可以使用声明的未定义结构来完成,但是在某些情况下可以使用它。 这种类型称为不完整类型,其使用受到许多限制。 例如:
struct X; // forward declaration
void f(struct X*) { } // usage of the declared, undefined structure
// void f(struct X) { } // ILLEGAL
// struct X x; // ILLEGAL
// int n =sizeof(struct X); // ILLEGAL
// later, or somewhere else altogether
struct X { /* ... */ };
这可能是有用的,例如 打破循环依赖关系或减少编译时间,因为定义通常要大得多,因此需要更多资源来解析它。