前向声明是在实际定义之前的声明,被用作一个实体在定义之前前但是被实际使用。 当然,并不是所有的事情都可以使用声明的未定义结构来完成,但是在某些情况下可以使用它。 这种类型称为不完整类型,其使用受到许多限制。 例如:

    1. struct X; // forward declaration
    2. void f(struct X*) { } // usage of the declared, undefined structure
    3. // void f(struct X) { } // ILLEGAL
    4. // struct X x; // ILLEGAL
    5. // int n =sizeof(struct X); // ILLEGAL
    6. // later, or somewhere else altogether
    7. struct X { /* ... */ };

    这可能是有用的,例如 打破循环依赖关系或减少编译时间,因为定义通常要大得多,因此需要更多资源来解析它。