C++标识符名称长度是否存在最大限制?g++编译器下变量名字符数上限是多少
C标识符长度限制及g编译器规则
C++标准层面的规定
C++标准没有强制限定标识符(包含变量名、函数名、类型名等)的最大字符长度,仅对编译器的最低支持能力作出了规范:
- 内部标识符(无外部链接的局部变量、函数内定义的类型名等):编译器至少需要保证前1024个字符有效
- 外部标识符(带外部链接的全局变量、导出函数名等):编译器至少需要保证前255个字符有效
早期C语言标准对外部标识符的最低要求仅为前6个字符有效,该限制在所有现代C++编译器实现中都已被废弃。
g++编译器的实现规则
g++没有对标识符长度设置固定上限,唯一的限制来自编译时的可用内存:
- 常规开发场景下,哪怕是几千甚至上万字符长度的标识符,g++都可以正常识别,不会出现字符截断的问题
- 经过名称修饰(Name Mangling)后的导出符号同样没有长度限制,不会因为标识符过长出现符号匹配错误
你可以通过如下代码验证g++对长标识符的支持能力:
// 长度远超标准最低要求的测试标识符 int test_identifier_with_extremely_long_length_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx = 42; int main() { return test_identifier_with_extremely_long_length_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; }
使用g++编译上述代码不会抛出任何语法错误。
内容的提问来源于stack exchange,提问作者Abishek
相关产品推荐
相关产品推荐

