gpt4 book ai didi

有人可以解释内部/外部变量名吗?

转载 作者:太空狗 更新时间:2023-10-29 16:25:57 27 4
gpt4 key购买 nike

在C书中,它说:

At least the first 31 characters of an internal name are significant. For function names and external variables, the number may be less than 31, because external names may be used by assemblers and loaders over which the language has no control. For external names, the standard guarantees uniqueness only for 6 characters and a single case. Keywords like if, else, int, float, etc., are reserved: you can't use them as variable names. They must be in lower case.

谁能解释一下什么是“内部名称”、“外部名称”、“外部变量”?如果能举例说明就更好了。

最佳答案

我抚着我的白 mustache ,用圣洁而自负的声音说:

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

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

例如,函数的名称......例如“main”和“sqrt”……需要出现在目标模块中,以便其他目标模块的代码可以使用它们。 “外部”风格的全局变量的名称也是如此。这些是外部名称。

但 C 程序中的所有其他名称,例如函数范围内的变量名称、结构成员的名称等,都不必放入目标模块中。这些被称为“内部名称”。

因此,例如,您可以在一个函数中使用这些 C 变量

 int myFavoriteItem;
int myFavoriteThing;

这样就好了。但是您可以将它们声明为外部变量,如下所示:

 extern int myFavoriteItem;
extern int myFavoriteThing;

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

 extern int myFavo;
extern int myFavo;

那些将是重复的声明。 C 编译器需要捕获此类事件并抛出错误,而不是将重复的声明写入目标文件。这对程序员有很大帮助:目标文件中的重复声明会生成非常模糊的链接编辑器错误消息。

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

关于有人可以解释内部/外部变量名吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12978781/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com