Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 不同文件中具有相同名称的静态变量_C_Variables_Static - Fatal编程技术网

C 不同文件中具有相同名称的静态变量

C 不同文件中具有相同名称的静态变量,c,variables,static,C,Variables,Static,我尝试运行和编译代码,在两个不同的源文件中定义了同名的静态变量。代码已成功编译并正在运行 现在我的问题是,这两个静态变量都位于内存中的。data/BSS部分。据我所知,两个不同的内存位置必须有一个单独的唯一名称标识符。为什么在这种情况下这不是一个问题 “据我所知,两个不同的内存位置必须有一个单独的唯一名称标识符。”-在这种情况下,不清楚“内存位置”是什么意思。内存位置有地址,而不是名称。如果“内存位置”是指“单个变量”,则上述语句仅适用于具有外部链接的变量。具有外部链接的变量需要外部可见的名称。

我尝试运行和编译代码,在两个不同的源文件中定义了同名的
静态变量。代码已成功编译并正在运行

现在我的问题是,这两个静态变量都位于内存中的。
data/BSS
部分。据我所知,两个不同的内存位置必须有一个单独的唯一名称标识符。为什么在这种情况下这不是一个问题

“据我所知,两个不同的内存位置必须有一个单独的唯一名称标识符。”-在这种情况下,不清楚“内存位置”是什么意思。内存位置有地址,而不是名称。如果“内存位置”是指“单个变量”,则上述语句仅适用于具有外部链接的变量。具有外部链接的变量需要外部可见的名称。具有内部链接的变量(静态变量)不会

在典型的实现中,编译器在编译阶段内部解析所有静态符号。它们不会在对象文件中生成外部名称。也就是说,它们根本不暴露于链接器。在最简单的情况下,链接器将来自同一转换单元的所有静态变量视为单个数据块

当不同的翻译单元聚集在一起进行链接时,不再需要所有静态变量的名称。到那时,他们早已被遗忘。这就是为什么命名冲突不会发生的原因

在C++语言中,P.S.P.S.允许外部链接的内联函数定义静态变量。为了提供适当的功能,编译器通常为这些静态变量指定外部名称。同样支持内联函数的C语言决定以不同的方式处理此问题:在C语言中,内联函数定义仅被禁止包含静态变量定义。

“据我所知,两个不同的内存位置必须有一个单独的唯一名称标识符。”-不清楚您的意思在本例中为“内存位置”。内存位置有地址,而不是名称。如果“内存位置”指的是“单个变量”,则上述语句仅适用于具有外部链接的变量。具有外部链接的变量需要外部可见的名称。具有内部链接的变量(静态变量)不需要

在典型的实现中,编译器在编译阶段对所有静态符号进行内部解析。它们不会在对象文件中生成外部名称。也就是说,它们根本不会向链接器公开。在最简单的情况下,链接器将来自同一翻译单元的所有静态变量视为一个数据块

当不同的翻译单元聚集在一起进行链接时,静态变量的所有名称都不再是必需的。到那时,它们早已被遗忘。这就是为什么命名冲突不会发生的原因

在C++语言中,外部链接允许内联函数定义静态变量。为了提供适当的功能,编译器通常为这些静态变量分配外部名称。C语言也支持内联函数,决定用不同的方式处理这个问题:C语言内联函数定义。仅禁止包含静态变量定义。

“据我所知,两个不同的内存位置必须有一个单独的唯一名称标识符。”-在这种情况下,不清楚“内存位置”是什么意思。内存位置有地址,而不是名称。如果“内存位置”是指“单个变量”,则上述语句仅适用于具有外部链接的变量。具有外部链接的变量需要外部可见的名称。具有内部链接的变量(静态变量)不会

在典型的实现中,编译器在编译阶段内部解析所有静态符号。它们不会在对象文件中生成外部名称。也就是说,它们根本不暴露于链接器。在最简单的情况下,链接器将来自同一转换单元的所有静态变量视为单个数据块

当不同的翻译单元聚集在一起进行链接时,不再需要所有静态变量的名称。到那时,他们早已被遗忘。这就是为什么命名冲突不会发生的原因

在C++语言中,P.S.P.S.允许外部链接的内联函数定义静态变量。为了提供适当的功能,编译器通常为这些静态变量指定外部名称。同样支持内联函数的C语言决定以不同的方式处理此问题:在C语言中,内联函数定义仅被禁止包含静态变量定义。

“据我所知,两个不同的内存位置必须有一个单独的唯一名称标识符。”-不清楚您的意思在本例中为“内存位置”。内存位置有地址,而不是名称。如果“内存位置”指的是“单个变量”,则上述语句仅适用于具有外部链接的变量。具有外部链接的变量需要外部可见的名称。具有内部链接的变量(静态变量)不需要

在典型的实现中,编译器在编译阶段对所有静态符号进行内部解析。它们不会在对象文件中生成外部名称。也就是说,它们根本不会向链接器公开。在最简单的情况下,链接器将来自同一翻译单元的所有静态变量视为一个数据块

当不同的翻译单元聚集在一起进行链接时,静态变量的所有名称都不再是必需的。到那时,它们早已被遗忘。这就是为什么命名冲突不会发生的原因

C++局域网中的P>