外部全局变量示例 - 错误

Example of extern global variable - Error

我想了解我在以下示例中犯了哪个错误。共有三个文件: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 或直接在 x 中声明 x libreria_mia.c.

此外,header 命名为 file.h 的惯例是声明在 file.c 中定义的内容(不一定是 file.c 中定义的所有东西,只是那些打算在它之外使用的东西)。但是您在 libreria_mia.h 中声明了 x,但在 main.c 中进行了定义。通常,人们要么在 libreria_mia.c 中定义 x,要么在 main.h 中声明它,通常前者是因为 main.c 更常见于程序中所有其他事物的用户,而不是比提供商。