c语言,a.c中,int a=5;b.c中extern int a;a=9,那此时a.c中的a等于多少?
时间: 2024-03-29 11:40:29 浏览: 10
在 C 语言中,每个源文件是独立编译的,因此 a.c 和 b.c 是两个独立的编译单元。在 a.c 中定义了变量 a 并初始化为 5,此时编译器会分配内存空间来存储变量 a,并将其初始化为 5。在 b.c 中,使用 extern 关键字声明了变量 a,而不是定义变量 a。这告诉编译器变量 a 是在其他编译单元中定义的。在运行时,由于 a.c 和 b.c 是独立编译的,它们分别有自己的内存空间。所以,当在 b.c 中修改变量 a 的值为 9 时,只有 b.c 中的变量 a 被修改了。而 a.c 中的变量 a 仍然是 5。
相关问题
c语言,a.c中,int a=5;b.c中extern int a;a=9,如果一起编译的话 那此时a.c中的a等于多少?
如果 a.c 和 b.c 一起编译为可执行文件,那么此时 a.c 中的变量 a 的值也会被修改为 9。这是因为在编译器链接时,会将所有的目标文件合并为一个可执行文件。在链接时,编译器会将 a.c 和 b.c 中的变量 a 合并为同一个变量,因此 b.c 中的赋值语句会改变 a.c 中的变量 a 的值。虽然 a.c 和 b.c 中的变量 a 最初是在不同的编译单元中定义的,但在链接时它们被合并为同一个变量,因此在运行时它们共享同一个内存地址。
如果c语言sa.c和sb.c文件中同时使用extern int a,并且同时包含对方的.h文件,那到底谁
会定义变量a呢?
在这种情况下,a的定义将取决于链接器的工作方式。如果链接器将sa.o和sb.o文件链接在一起,它将在链接时发现两个对a的定义,并报告重复定义错误。如果链接器将这两个文件分别链接到不同的可执行文件中,则每个可执行文件将具有自己的a变量的定义。
为了避免这种情况,通常建议将extern声明放在头文件中,将变量定义放在一个C文件中,并在其他C文件中包含该头文件。这样,每个C文件中只有一个变量定义,链接器就不会报重复定义错误了。