davidmou 发表于 2023-10-13 12:59:50

extern

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

    printf("%d",a);


}

为什么这里报错,extern 不是把a 声明为全局变量吗,那为什么 printf("%d",a);还会报错

isdkz 发表于 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了。

陶远航 发表于 2023-10-13 13:00:31

这段代码中报错的原因是因为使用了一个尚未定义的全局变量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
如果问题已经解决,请设置最佳答案

Mike_python小 发表于 2023-10-13 13:01:24

这段代码存在问题,导致报错的原因是变量 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 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;
}
页: [1]
查看完整版本: extern