c语言变量命名 外部,有人可以解释内部/外部变量名称吗?

O. Jones..

29

我说,抚摸着我的白胡子,用圣人和浮夸的声音说话:

在过去,当FORTRAN和COBOL统治计算世界时,新兴语言C必须适应现有的工具链.这些工具链包括链接编辑器(a/k/a连接器,a/k/a加载器)和仅处理短6个字符符号(变量和函数)的汇编器.

这些工具链的C编译器在写出要由链接编辑器使用的目标文件时必须假装变量和函数名称很短.这是坏消息.好消息是C程序中有很多符号不需要显示在目标文件中.

例如,函数的名称...例如"main"和"sqrt"......需要显示在对象模块中,因此来自其他对象模块的代码可以使用它们."extern"样式全局变量的名称也是如此.这些是外部名称.

但是C程序中的所有其他名称,例如函数范围中的变量名称,结构成员的名称等等,都不必将其放入对象模块中.这些被称为"内部名称".

因此,例如,您可以在函数中包含这些C变量

int myFavoriteItem;

int myFavoriteThing;

那没关系.但你可以将它们声明为外部变量,如下所示:

extern int myFavoriteItem;

extern int myFavoriteThing;

有些系统会将这些名称写入目标文件,就像它们长六个字母一样(因为目标文件不知道如何处理更长的名称).然后,他们将查看目标文件,就好像它们已经被声明为这样.

extern int myFavo;

extern int myFavo;

那些将是重复声明.C编译器需要捕获此类事件并抛出错误,而不是将重复声明写入目标文件.这对程序员来说是一个很大的帮助:生成的目标文件中的重复声明实际上隐藏了链接编辑器错误消息.

您引用的段落指定编译器必须至少识别内部名称的31个字符和外部名称的6个字符.现代编译器和工具链不再具有不同的名称长度限制.

+1回答,实际上有一个白胡子! (8认同)

+1:我记得在C语言中编码从Fortran调用的代码... 6个字符monocase.它使有意义的名称变得有点困难(特别是因为有命名空间规则,所以所有名称都以'g'开头,内部函数必须启动'gk',然后接下来的两个为'设备驱动程序'保留(所以' gk0p','gk1t'等,留下总共两个字母或数字可用于给出有意义的助记符!). (3认同)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值