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
你不能有一个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就是这样工作的,每个人都对此感到满意。您将必须学习接受此“限制”。