尝试在struct中使用typedef:为什么会出现错误,并且一开始是个好主意?

Aim*_*man 0 c struct typedef storage-class-specifier

当尝试从头文件中的结构中通过'typedef'声明别名时出现此错误:

错误:“ typedef”之前的预期specifier-qualifier-list

我最初的目的是测试typedef的范围是否包含在结构中。这样可以避免如果此标头要包含在另一个源文件中,则可以避免不必要地使用此别名。如果我将违规行(以'typedef'开头的行)移到结构外部并在其之前,则将编译代码。

但是,我不明白为什么不能在结构中调用typedef以及为什么会收到上述错误。

此外,我不确定这种做法是否确实必要。限制别名(如果有)的优点是什么?

#ifndef STUDENT_H
#define STUDENT_H

typedef struct{

    typedef char* string;
    string name;
    int id;

} Student;

#endif
Run Code Online (Sandbox Code Playgroud)

我希望代码可以编译,但是却收到错误消息:

错误:“ typedef”之前的预期specifier-qualifier-list

vir*_*ino 5

你不能有一个typedef内部typedef

你可以有:

typedef char* string;
Run Code Online (Sandbox Code Playgroud)

然后使用它:

typedef struct{
    string name;
    int id;
} Student;
Run Code Online (Sandbox Code Playgroud)

请注意,这string只是一个指针,在使用它之前(尤其是在写入之前),它必须“指向”已分配的内存。


但是,我不明白为什么我不能从结构中调用typedef

从那时起,C就是这样工作的,每个人都对此感到满意。您将必须学习接受此“限制”。