在C中包含头文件

include header files in C

我是 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中,在a.h中定义的structmacro是否可以在main.c中使用?

是的,可以用。这是 #includeing 头文件的唯一目的。

更多信息,您可以查看预处理版本的代码。使用

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

您可以在包含的头文件中看到 struct 和 MACROS 定义的存在。

是的,出现在包含文件中的 #include 指令本身具有正常效果,直到实现定义的包含级别数限制。 "normal effect" 等同于文本插值——也就是说,包含文件的内容没有单独的作用域——所以出现在任何直接或间接包含文件中的任何声明对于包含点之后的所有代码都是可见的.

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

当然可以在 main.c

中同时使用 Struct 和 MACROS

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

预处理器:

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

所以 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;