c - extern全局变量示例-错误

标签 c compiler-errors global-variables extern

我想了解以下示例中的哪个错误。有三个文件:main.c,libreria_mia.c和libreria_mia.h。

// main.c
#include <stdio.h>
#include "libreria_mia.h"

int x = 5;

int main()
{
    int y = quadrato();
    printf("%d\n", y);
    return 0;
}


// libreria_mia.h
extern int x;
int quadrato(void);


// libreria_mia.c
int quadrato(void)
{
    x = x * x;
}

错误:
libreria_mia.c:5:2: error: ‘x’ undeclared (first use in this function)

感谢您的时间。

最佳答案

当您编译libreria_mia.c时,编译器不会自动知道libreria_mia.h或其中的声明。要在编译libreria_mia.c时提供x的声明,libreria_mia.c必须包括一个声明x的 header 或直接在libreria_mia.c中声明x的头。

此外,习惯上,名为file.h的 header 声明在file.c中定义的内容(不一定在file.c中定义的所有内容,而只是打算在其外部使用的那些内容)。但是,您在libreria_mia.h中声明了x,但在main.c中对其进行了定义。通常,可以在libreria_mia.c中定义x或在main.h中声明它,通常将前者作为main.c来使用程序中所有其他内容,而不是提供程序。

关于c - extern全局变量示例-错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62386636/

相关文章:

c - Quicksort C - 有点不同的版本

ios - 将 OpenCV 框架导入 Unity 项目 iOS 时出错

c++ - 编译错误会随着单行上的注释/调试/取消注释/调试而消失

java - 类的不同方法更改成员数据与全局变量有何不同

c - C 中全局变量的可见性/作用域是什么?

javascript全局变量在下一次事件调用时返回到以前的状态

c - 基于(堆栈/注册)的虚拟机如何处理不同的数据类型

Eclipse-Indigo 中的 C 错误解析无法正常运行

c - #define 应该在宏周围添加空格吗?

c++ - 在 ";"之前缺少 'namespace',在 ";"之前缺少 'using'