如果我们将静态变量定义为全局变量,那么它的作用域应该在该文件中,但这里是I';我得到了不同的结果 //FILE1.c #包括 #包括 #包括“FILE2.c” main() { printf(“%d”,i); getch(); } //文件2.c 静态积分i=5;
这里我得到了输出如果我们将静态变量定义为全局变量,那么它的作用域应该在该文件中,但这里是I';我得到了不同的结果 //FILE1.c #包括 #包括 #包括“FILE2.c” main() { printf(“%d”,i); getch(); } //文件2.c 静态积分i=5;,c,C,这里我得到了输出5。为什么会这样?这应该是个错误,不是吗?因为您包含了源文件“FILE2.c”(不推荐使用)。预处理器只需将行#include“FILE2.c”替换为“FILE2.c” 因此,在您已知的文件FILE2.c中有一个变量i,但在文件FILE1.c中还有另一个变量i。他们的范围在他们自己的文件中(确切地说,是他们自己的翻译单位) 您应该只在C中包含头文件。Then但行的含义是“如果我们将任何静态变量定义为全局变量,则该变量的范围将仅在其定义的wch中位于该文件内”…plz clear…
5
。为什么会这样?这应该是个错误,不是吗?因为您包含了源文件“FILE2.c”
(不推荐使用)。预处理器只需将行#include“FILE2.c”
替换为“FILE2.c”
因此,在您已知的文件FILE2.c
中有一个变量i
,但在文件FILE1.c
中还有另一个变量i
。他们的范围在他们自己的文件中(确切地说,是他们自己的翻译单位)
您应该只在C中包含头文件。Then但行的含义是“如果我们将任何静态变量定义为全局变量,则该变量的范围将仅在其定义的wch中位于该文件内”…plz clear…@user2487315,因为预处理后,变量
i
实际上是在File1.c
和File2.c
中定义的,您需要了解预处理器对#include
行做了什么。那么我如何检查这一行的使用“如果我们将任何静态变量定义为全局变量,那么该变量的作用域将仅在wch中其定义的文件中”请给出适当的示例…@user2487315删除行#include“FILE2.c“
,您将看到错误。也许应该补充一点,这里定义了两个不同的变量,名为i
,每个编译单元(.o
文件)中各有一个。这不是C,用int main(void)
替换main()
不再是合法的C。你可能想要一本更新的C语言书。
//FILE1.c
#include<stdio.h>
#include<conio.h>
#include "FILE2.c"
main()
{
printf("%d",i);
getch();
}
//FILE2.c
static int i=5;