在C中包含头文件

时间:2015-04-08 19:39:15

标签: c header

我是C和C ++语言的新手,我对C中的头文件有疑问:

A.H

#define HELLO (1)
typedef struct
{
   int a;
   int b;
} hello;

b.h

#include "a.h"
#define NUMBER (3)

的main.c

#include "b.h"
main.c中的

struct中定义的macroa.h是否可用于main.c

4 个答案:

答案 0 :(得分:1)

当然可以在main.c中使用Struct和MACROS

您需要了解C编译过程,在编译或链接main.c之前,有预处理器步骤:

<强>预处理

  • 此阶段的输入是.c文件和.h文件
  • 预处理过程处理#define,#ifdef,#include等预处理器关键字,并在文本替换过程后生成新的.pre文件或.i文件。
  • 此阶段的输出是没有任何预处理程序关键字的C代码。

enter image description here

所以main.c实际上看起来像这样:

#define HELLO (1)
typedef struct
{
   int a;
   int b;
} hello;
#define NUMBER (3)

然后替换所有宏,这里你不使用HELLO或NUMBER,所以纯c主文件将是:

typedef struct
{
   int a;
   int b;
} hello;

答案 1 :(得分:0)

是的,它可以使用。这是#include头文件的唯一目的。

有关详细信息,您可以查看预处理的代码版本。使用

gcc -E <filename.c>  //main.c, in this case

在那里,您可以看到包含的头文件中存在struct和MACROS definde。

答案 2 :(得分:0)

是的,#include指令本身出现在包含文件中会产生正常影响,最高可达实施定义的包含级别数限制。 &#34;正常效果&#34;相当于文本插值 - 也就是说,所包含文件的内容没有单独的作用域 - 因此任何直接或间接包含的文件中出现的声明对于所有代码都可见。

答案 3 :(得分:0)

是的,#include语句可以将多个文件链接在一起。 #include从字面上将一个文件的内容复制并粘贴到另一个文件中,因此您可以将其视为一个接一个的效果。