这里学习一下 #include#include 是 C 语言预处理命令的一种。#include 的处理过程很简单,就是将头文件的内容插入到该命令所在的位置,从而把头文件和当前源文件连接成一个源文件,这与复制粘贴的效果相同。

通常我们都非常熟悉通过 #include "*.h" 引入头文件,但其实,#include 也可以有别的用法,比如下面的用法: 在 main.c 源文件中,增加 #include "print.c",等同于将 print.c 中的代码复制到 main.c 的指定位置中。

/* 
 *#include study examples 
 * main.c
 */
#include<stdio.h>

#include "print.c"  

int main() {
    print("test #include");

    return 0;
}

print.c 源代码如下:

/* print.c */
void print(const char *str) {
    printf("%s \n", str);
}

我们通过 gcc -E main.c 只进行预处理看一下处理后的结果:

# 1 "main.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "main.c"

# 1 "/usr/include/stdio.h" 1 3 4
# 27 "/usr/include/stdio.h" 3 4
# 1 "/usr/include/features.h" 1 3 4
# 375 "/usr/include/features.h" 3 4
# 1 "/usr/include/sys/cdefs.h" 1 3 4
# 392 "/usr/include/sys/cdefs.h" 3 4
# 1 "/usr/include/bits/wordsize.h" 1 3 4
# 393 "/usr/include/sys/cdefs.h" 2 3 4
# 376 "/usr/include/features.h" 2 3 4
# 399 "/usr/include/features.h" 3 4
# 1 "/usr/include/gnu/stubs.h" 1 3 4
# 10 "/usr/include/gnu/stubs.h" 3 4
# 1 "/usr/include/gnu/stubs-64.h" 1 3 4
# 11 "/usr/include/gnu/stubs.h" 2 3 4
# 400 "/usr/include/features.h" 2 3 4
# 28 "/usr/include/stdio.h" 2 3 4

// 中间代码太多了,忽略掉,只保留关键部分。

# 943 "/usr/include/stdio.h" 3 4

# 3 "main.c" 2

# 1 "print.c" 1

// 可以看到被#include的文件内容复制到了#include "print.c"的位置。
void print(const char *str) {
    printf("%s \n", str);
}
# 5 "main.c" 2

int main() {
    print("test #include");

    return 0;
}