未声明结构的C typedef不会抛出任何编译错误

ras*_*hok 4 c struct typedef structure

我只是想知道typedef在使用未声明的结构时如何不抛出任何编译错误.下面的代码正在编译,没有任何警告和错误.我怀疑的是typedef,未申报的结构如何不会引发任何错误.在所有平台上都是一样的

#include <stdio.h>

typedef struct undeclared_struct_st UND_STRUCT_S;

int main()
{
    printf("\nhello world\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用gcc 4.3.4在Suse 11中执行这个程序.

oua*_*uah 8

typdef struct undeclared_struct_st UND_STRUCT_S;
Run Code Online (Sandbox Code Playgroud)

已验证.它声明struct undeclared_struct_st为一个incompele类型,然后声明UND_STRUCT_S为typedef struct undeclared_struct_st.您不能创建不完整类型的对象,但可以创建指向不完整类型的对象的指针.struct undeclared_struct_st然后可以在另一个翻译单元中声明.


小智 5

这被称为前瞻性声明,完全合法C.

  • 陈述某事物的名称并不能解释它是什么,它是如何运作的,或它的特征是什么. (2认同)