C是不正确的。A是定义struct aa,同时以typedef 定义结构体aa的别名AA,然后用AA定义变量B是定义了一个宏,带入后,就是struct aa{}tdl; 这个是很常见的定义结构体同时定义变量的做法。D是定义了一个无名结构,同时定义变量。只有C, 按照C的写法,是定义了一个无名结构,同时定义变量aa,但是下面定义tdl的时候,又把aa当做结构体名了,这个就不对了。