1

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

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

  1. 在一个头文件中声明一个变量(实际上是两个变量和一个字符)和一个函数(来自第二个源文件)。
  2. 定义这些变量并在第二个头文件中为它们分配值(从第 1 点开始的变量)。
  3. 编写一个包含这两个头文件的函数,并在一个源文件中使用这些文件(第 2 点)中的值(没有 main- 仅使用变量的函数定义)。
  4. 有一个从第二个源文件调用函数的主源文件(从第 3 点开始。)

我怎么会这样?我在两个 .c 文件中都包含了两个头文件。但是当我尝试编译和链接它(在 Linux 中使用 GCC)时,我得到 multiple definition ... first defined here所有变量的错误。

我看过这些答案FirstSecond 我不太理解Second中的答案,因为我无法弄清楚如何使用 header 防护。我无法弄清楚如何检查所有框(第 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';

fn文件.c

#include "header1.h"
#include "header2.h"
#include<stdio.h>

void ad_d()
{

    i+=j;

    printf("\n %d \t %c \n", i,c);
}

文件main.c

#include<stdio.h>
#include "header1.h"
#include "header2.h"



void main()
{

    ad_d();
}
4

2 回答 2

2

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

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

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

在其他文件(或通用头文件)中使用:

extern int my_global;

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

标题保护的东西是试图将定义和声明移动到同一个语句中,在你的水平上,你最好在尝试玩这样的游戏之前掌握声明与定义的处理。

于 2013-04-01T17:40:31.877 回答
0
int j=6;int i=7;
char c='x';

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

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

于 2013-04-01T17:53:15.537 回答