c - 尝试在结构 : why do I get an error, 中使用 typedef,这首先是个好主意吗?

标签 c struct typedef storage-class-specifier

尝试通过头文件中的结构内的“typedef”声明别名时出现此错误:

错误:在‘typedef’之前需要说明符限定符列表

我最初的意图是测试 typedef 的范围是否包含在结构中。这样一来,如果此 header 要包含在另一个源文件中,我可以防止不必要地使用此别名。如果我将有问题的行(以“typedef”开头的行)移到结构之外和它之前,代码将编译。

但是,我不明白为什么我不能从结构中调用 typedef,而我却得到上述错误。

此外,我不确定这种做法是否真的有必要。如果有的话,限制别名有什么好处?

#ifndef STUDENT_H
#define STUDENT_H

typedef struct{

    typedef char* string;
    string name;
    int id;

} Student;

#endif

我希望代码能够编译,但我却收到错误消息:

error: expected specifier-qualifier-list before ‘typedef’

最佳答案

typedef 中不能有 typedef

你可以拥有:

typedef char* string;

然后使用它:

typedef struct{
    string name;
    int id;
} Student;

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


However, I don't understand why I couldn't call typedef from within the struct

从那时起,这就是 C 的工作方式,每个人都对它很好。你将不得不学会接受这种“限制”。

关于c - 尝试在结构 : why do I get an error, 中使用 typedef,这首先是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57005123/

相关文章:

c++ - C++静态多态性(CRTP)并使用派生类中的typedef

c - 单行注释 - 无法在 solaris 上编译

c++ - 如何删除 VS 警告 C4091 : 'typedef ' : ignored on left of 'SPREADSHEET' when no variable is declared

c - 在嵌入式 C 代码中使用 typedef 结构

json - Golang jsonable 指向 slice 中不同结构的指针

c - 当 union 位于 c 结构体内部时,sizeof() 将返回什么?

c - 在 typedef 声明中使用逗号?

c++ - 如何检查类型是否已定义?

c - POSIX 扩展可重入定义,涵盖线程安全

c - 错误 : IntelliSense: identifier "strlen" is undefined in C