我在C上写了一个非常简单的程序。它编译并且工作正常。但是,如果我在functions.h而不是functions.c中添加extern int x,我会收到此错误
functions.c:3:12: error: use of undeclared identifier 'x'
return x / 2;
^
1 error generated.
我认为extern的正确位置在头文件中。
variables.h
int x = 10;
functions.h
#include "variables.h"
int calculate_items(int d);
functions.c
extern int x;
int calculate_items(int d)
{
return x / 2;
}
的main.c
#include <stdio.h>
#include "functions.h"
int main() {
printf("%d", calculate_items(5));
}
答案 0 :(得分:2)
不,你在标题中没有初始值设定项。
一旦多个C文件包含相同的标题,它就不会起作用,会有多个声明。
你应该在一个C文件中使变量成为全局变量,例如在main.c
中,然后在需要访问它的文件中只有extern int x;
(或者在它们可以的标题中)当然#include
。
在这种情况下,由于变量最终属于&#34;属于&#34;在main.c
文件中,您应该添加main.h
标头,其中包含extern int x;
声明,#include
来自functions.c
以及其他需要变量的地方。
答案 1 :(得分:0)
如果您未将extern int x;
放入functions.c
且functions.c
没有#include
声明x
的任何内容,那该怎么知道x
是?
如果您期望functions.h
和functions.c
之间存在某种隐含关系,因为它们都有functions.*
这样的名称,那么您应该摆脱这种期望。
执行此操作的常规方法是将extern int x;
放入functions.h
,然后将int x=10;
放入.c
文件的一个中,引用#include "functions.h"
的所有.c
文件中的x
,包括functions.c
。