我想了解我在以下示例中犯了哪个错误。有三个文件: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("%dn", 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
的标头,或者直接在 libreria_mia.c 中声明x
。
此外,名为file.h的标头通常声明在 file.c 中定义的内容(不一定是 file.c 中定义的所有内容,只是那些打算在 file.c外部使用的内容(。但是你x
在 libreria_mia.h 中声明,但在 main.c 中定义。通常,人们要么在 libreria_mia.c 中定义x
,要么在 main.h 中声明它,通常前者作为 main.c 更常见的是程序中所有其他事物的用户,而不是提供者。