C语言标识符中使用下划线的相关规则有哪些?
C语言下划线开头标识符合规使用规则
C标准对下划线开头的标识符有明确的保留范围,只要避开保留范围的使用场景,都是合规的。
绝对禁止使用下划线开头的场景(属于标准/编译器实现保留范围)
- 任何场景下都不要使用双下划线开头的标识符,例如
__offset、__my_func,这类命名全量保留给C标准库、编译器内部实现使用,自定义使用大概率会出现符号冲突 - 任何场景下都不要使用单下划线开头+大写字母的标识符,例如
_X、_PrintStr,这类命名同样属于标准保留范围 - 不要在文件作用域(也就是全局变量、全局函数的命名)使用任何单下划线开头的标识符,例如不要在函数外定义
int _global_val;、void _print_info();,这类全局符号是标准库实现的保留命名空间
可以合规使用下划线开头的场景
只要避开上述禁止范围,以下场景使用单下划线开头+小写字母的标识符都是完全合规的:
- 函数内部、代码块局部作用域的变量命名,例如:
int calc_sum(int a, int b) { int _tmp = a + b; // 合规 return _tmp; }
- 结构体、联合体、枚举的成员命名,例如:
struct user { char* _name; // 合规 int _age; };
- 函数内部的静态变量命名,作用域仅限定在函数内部,不会和全局保留符号冲突
另外部分特定开发场景(比如操作系统内核、嵌入式裸机开发)有自定义的编码规范,允许单下划线开头的全局符号作为内部接口命名,只要符合对应场景的编码约定即可。
内容的提问来源于stack exchange,提问作者einpoklum
相关产品推荐
相关产品推荐

