C语言中的结构体是一种用户自定义的数据类型,用于将不同类型的数据组合成一个整体,而结构体的命名需要遵循C语言的标识符命名规则,同时也有一些行业内通用的约定规范,合理的命名能提升代码的可读性和可维护性。

结构体命名的基础规则
结构体本身的命名属于C语言标识符的范畴,因此需要遵守C语言标识符的基础命名要求:
- 只能由字母、数字、下划线三种字符组成,不能包含其他特殊符号或者空格。
- 第一个字符必须是字母或者下划线,不能以数字开头。
- 不能和C语言的关键字重名,比如不能使用int、struct、return等作为结构体名称。
- C语言区分大小写,因此Student和student会被视为两个不同的结构体名称。
不同结构体声明方式下的命名说明
C语言中结构体的声明有多种形式,不同形式下的命名要求略有差异,下面通过代码示例说明。
带tag的结构体声明
这种声明方式会定义一个结构体标签(tag),标签名称就是结构体的标识,命名同样要遵守上述基础规则:
#include <stdio.h>
// 定义tag为Student的结构体,tag名称遵守标识符规则
struct Student {
char name[20];
int age;
float score;
};
int main() {
// 使用struct Student声明变量
struct Student stu1;
return 0;
}
使用typedef重命名的结构体
通过typedef关键字可以给结构体定义一个新的类型别名,此时别名也需要遵守标识符命名规则:
#include <stdio.h>
// 定义结构体同时用typedef取别名,别名StudentInfo也要遵守命名规则
typedef struct {
char name[20];
int id;
char class[10];
} StudentInfo;
int main() {
// 可以直接用别名声明变量,不需要加struct关键字
StudentInfo stu2;
return 0;
}
行业通用的命名建议
除了必须遵守的基础规则外,行业内也有一些通用的命名约定,能让代码更易读:
- 结构体名称(包括tag和typedef别名)建议使用有意义的英文单词,能直观体现结构体的用途,比如表示学生信息的结构体可以命名为Student,表示商品信息的可以命名为Product。
- 如果是使用typedef定义的别名,部分开发者会采用首字母大写的驼峰命名法,比如StudentInfo、OrderDetail,和结构体tag的命名风格保持一致即可。
- 避免使用单个字母或者无意义的字符组合作为结构体名称,比如不要用a、temp这类名称,除非是极短小的临时测试代码。
- 如果结构体是某个模块私有的,部分项目会在名称前加下划线或者模块前缀,比如_modStudent、net_Packet,避免和其他模块的结构体名称冲突。
常见命名错误示例
下面是一些不符合命名规则的写法,会导致编译错误:
| 错误写法 | 错误原因 |
|---|---|
| struct 2Student | 第一个字符是数字,违反标识符规则 |
| struct student-name | 包含连字符-,不属于允许的字符范围 |
| struct int | 使用了C语言关键字int作为名称 |
| struct student name | 包含空格,不符合标识符组成要求 |
只要遵守C语言标识符的基础命名规则,再结合项目约定的命名风格,就能正确完成结构体的命名,减少不必要的代码问题。