使用extern时编译错误

时间:2013-12-03 15:46:18

标签: c extern

我在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));
}

2 个答案:

答案 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.cfunctions.c没有#include声明x的任何内容,那该怎么知道x是?

如果您期望functions.hfunctions.c之间存在某种隐含关系,因为它们都有functions.*这样的名称,那么您应该摆脱这种期望。

执行此操作的常规方法是将extern int x;放入functions.h,然后将int x=10;放入.c文件的一个中,引用#include "functions.h"的所有.c文件中的x,包括functions.c