我想知道我在下面的例子中犯了什么错误。有三个文件: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或其中的声明。要提供一个声明给 x
在编译libreria_mia.c时,libreria_mia.c必须包含一个声明了 x
或有声明的 x
直接放在libreria_mia.c中。
此外,常规的做法是在头文件中使用名为 档案.h中定义的东西进行声明。档案.c(不一定是所有定义在 档案.c,只是那些打算在它之外使用的)。) 但你有 x
在libreria_mia.h中声明,但在main.c中定义。通常情况下,我们会在libreria_mia.h中定义 x
中或在main.h中声明,通常前者,因为main.c更常见的是程序中所有其他东西的用户,而不是提供者。