extern
#include <string.h>#include <stdio.h>
int main()
{
{
extern int a;
a = 1;
}
printf("%d",a);
}
为什么这里报错,extern 不是把a 声明为全局变量吗,那为什么 printf("%d",a);还会报错 在这个程序中,extern关键字确实将变量a声明为全局变量,但是在程序中并没有定义a的存储位置。因此,编译器在编译时无法确定a的存储位置,因此会报错。如果要使用extern声明的全局变量,必须在程序中定义它的存储位置。例如:
#include <string.h>
#include <stdio.h>
extern int a; // 声明a为全局变量
int main()
{
a = 1; // 定义a的存储位置并赋值为1
printf("%d",a);
return 0;
}
在这个程序中,我们在main函数之外定义了a的存储位置,这样就可以正常使用a了。 这段代码中报错的原因是因为使用了一个尚未定义的全局变量a,extern int a;只是对a进行了说明和声明,在没有定义a之前,访问它的值会出现错误。
要解决这个问题,需要在程序的其他位置定义a的值。具体来说,可以在另一个文件中定义并初始化a,然后在本文件中使用extern关键字进行引用,实现跨文件的数据共享。
在这里提供一组修改后的代码作为示例:
// 在另一个文件中定义并初始化变量a
// file2.c
int a = 1;
// 在本文件中使用extern关键字引用变量a
// file1.c
#include <stdio.h>
extern int a;
int main() {
printf("%d",a);
return 0;
}
这里将变量a定义在了另一个文件file2.c中,并初始化为1。然后在本文件file1.c中使用extern关键字进行引用。这样,在编译时,两个文件都会被编译并链接在一起,从而实现对变量a的访问。
需要注意的是,在使用extern进行引用时,不要重复定义变量,否则会出现重复定义的错误。
请注意,本回答来自GPT-3.5
如果问题已经解决,请设置最佳答案 这段代码存在问题,导致报错的原因是变量 a 被 extern 关键字声明为外部变量,但没有进行实际的定义和初始化。
在 C/C++ 中,extern 关键字用于声明一个全局变量,表示该变量在其他地方已经定义。因此,在使用 extern 声明变量之前,需要确保该变量已经在其他地方进行了定义。
在代码中,虽然使用了 extern int a; 声明了变量 a,但并没有在任何地方进行定义。因此,在 printf("%d", a); 这一行中,编译器无法找到变量 a 的定义,进而报错。
为了解决这个问题,你需要在代码中添加变量 a 的定义和初始化,例如:
#include <stdio.h>
int a; // 定义变量 a
int main() {
a = 1; // 初始化变量 a
printf("%d", a);
return 0;
}
通过在代码中添加变量 a 的定义,即 int a;,就可以消除编译错误,并正确输出变量 a 的值。
希望以上解释对你有所帮助,如果还有其他问题,请随时提问。
球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:} 本帖最后由 鱼儿游游 于 2023-10-13 18:47 编辑
1、extern关键字可以用于声明:对全局变量的引用,但不是声明全局变量。
2、只有当这个被声明的变量是一个全局变量时,extern 声明的变量才会起作用。
详见以下示例:
#include <stdio.h>
/*
总结:
1、extern关键字可以用于声明:对全局变量的引用,但不是声明全局变量。
2、只有当这个被声明的变量是一个全局变量时,extern 声明的变量才会起作用。
*/
int a; // 定义全局变量a
int main() {
{
extern int a;// 注意:extern 只是对全局变量 a 作“引用声明”,不是声明全局变量。
a = 1;
}
printf("%d", a); // 打印输出:1
return 0;
}
页:
[1]