我们可以宣布,定义和为变量赋值并在另一个文件中使用这些变量?

时间:2013-04-01 17:24:58

标签: c header-files preprocessor-directive multiple-definition-error

我是C编程的初学者,我正在尝试不同的方法并尝试小程序。

我有四个文件。两个头文件和两个源文件。我想:

  1. 声明一个变量(实际上是两个变量和一个char)和一个 函数(来自第二个源文件)在一个头文件中。
  2. 定义这些变量并在第二个标题中为它们赋值 file(第1点的变量)。
  3. 编写包含这两个头文件的函数并使用 来自这些文件的值(第2点)在一个源文件中(没有主要文件) 只是使用变量的函数定义。)
  4. 有一个主源文件从第二个调用该函数 源文件(来自第3点。)
  5. 我怎么来这个?我在两个.c文件中都包含了两个头文件。但是当我尝试编译并链接它(在Linux中使用GCC)时,我得到了一个  所有变量都有multiple definition ... first defined here错误。

    我查看了这些答案FirstSecond 我不太明白Second中的答案,因为我无法弄清楚如何使用标题保护。 我无法弄清楚如何检查所有方框(第1点到第4点)。

    那么header1.h

    extern int i,j; extern char c;
    void ad_d();
    

    header2.h

    int j=6;int i=7;
    char c='x';
    

    fnfile.c

    #include "header1.h"
    #include "header2.h"
    #include<stdio.h>
    
    void ad_d()
    {
    
        i+=j;
    
        printf("\n %d \t %c \n", i,c);
    }
    

    filemain.c

    #include<stdio.h>
    #include "header1.h"
    #include "header2.h"
    
    
    
    void main()
    {
    
        ad_d();
    }
    

2 个答案:

答案 0 :(得分:2)

您只能定义一次变量,即在存储器中存储值的所有空间。然后,您可以在每个文件中声明变量(或者更好地在公共头文件中),这将告诉编译器将在其中一个编译文件中定义该名称和类型的变量,并且可以在稍后阶段找到

在要定义变量的文件中使用:

int my_global = 0; /* always good practice to initalize */

在其他文件(或公共标题)中使用:

extern int my_global;

现在,您可以从声明它的任何文件中读取或写入my_global。

标题保护程序是尝试将定义和声明移动到同一语句中,在您的级别上,最好在尝试玩这样的游戏之前获得声明与定义的处理。

答案 1 :(得分:0)

int j=6;int i=7;
char c='x';

您不希望这些在头文件中,因为它们是定义。将它们放在C文件中,只需在两个文件中包含相同的标题(使用变量的extern声明)。

目前,您的两个源文件都在尝试定义这些变量,这就是您收到错误的原因。