笔记 - C/C++ 多文件编写


项目结构

对于一个标准的 C/C++ 项目来说,一定要做到不同属性的代码放到不同的文件:

xx.h:头文件,专门存放各种函数的声明,不应该写具体的实现,作用相当于函数文档。

xxx.c xxx.cpp:源文件,专门存放各种函数的实现,头文件声明了什么都应该在这里写声明。

虽然可以在头文件写函数实现,但通常不建议这样做,因为会出现比较棘手的问题。

预处理的事情

#include

最重要的就是 "#include" 语句,他是多文件编写的核心组成。

假设有这样一个程序:

#include <stdio.h>

int main(){
 printf("hello world\n");
 return 0;
}

编译器的预处理模块识别到 "#include" 语句,代表需要将系统的函数声明充填到相关语句的位置。

经过 #include 预处理后,他是这样的:

/* 假象的 stdio.h */
#ifndef STDIO_H
#define STDIO_H

// printf 函数的定义
void printf(const char *fmt);

#endif
/* stdio.h 结束 */

int main(){
  printf("hello world\n");
  return 0;
}

然后这个源程序就得到了 printf 函数的定义,就可以随时调用这个函数实现相关功能。

 

#ifndef

在多文件编写上,最大的坑就是容易出现重复定义的问题,但就如上面的程序头文件一样,在每个头文件头两行加上一个特殊的宏定义,在行尾 endif,就可以避免了。

#ifndef A_H
#define A_H

// 各种函数声明

#endif

只要这样做了,在多个源文件里 #include 相同的头文件时,编译器会忽略除第一次以外的包含预处理。

不应该做的

不要包含源文件

正常来说,你不应该 #include 源文件,源文件应该是作为参数传递给编译器,然后编译器将其转换为机器指令,最后再将所有库的机械码组成你的可执行程序。反正就是,除非你知道自己正在做什么,否则绝对不要包含源文件。

分组于: 编程

发布于: 2024年12月08日 02时47分

编辑于: 2024年12月08日 02时47分

C/C++
编程

用 Cookie 保存: 别名、Email