鱼C论坛

 找回密码
 立即注册
查看: 1251|回复: 4

extern

[复制链接]
发表于 2023-10-13 12:59:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <string.h>
#include <stdio.h>
int main()
{
    {
         extern int a;
         a = 1;
    }

    printf("%d",a);


}

为什么这里报错,extern 不是把a 声明为全局变量吗,那为什么 printf("%d",a);还会报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-13 13:00:06 | 显示全部楼层
在这个程序中,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了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-13 13:00:31 | 显示全部楼层
这段代码中报错的原因是因为使用了一个尚未定义的全局变量aextern 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
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-13 13:01:24 | 显示全部楼层
这段代码存在问题,导致报错的原因是变量 aextern 关键字声明为外部变量,但没有进行实际的定义和初始化。

在 C/C++ 中,extern 关键字用于声明一个全局变量,表示该变量在其他地方已经定义。因此,在使用 extern 声明变量之前,需要确保该变量已经在其他地方进行了定义。

在代码中,虽然使用了 extern int a; 声明了变量 a,但并没有在任何地方进行定义。因此,在 printf("%d", a); 这一行中,编译器无法找到变量 a 的定义,进而报错。

为了解决这个问题,你需要在代码中添加变量 a 的定义和初始化,例如:
#include <stdio.h>int a; // 定义变量 aint main() {    a = 1; // 初始化变量 a    printf("%d", a);    return 0;}
通过在代码中添加变量 a 的定义,即 int a;,就可以消除编译错误,并正确输出变量 a 的值。

希望以上解释对你有所帮助,如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-13 17:25:22 | 显示全部楼层
本帖最后由 鱼儿游游 于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 19:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表