1.开发前预备知识

主要使用的编辑器为GCC编辑器(广泛使用与支持多平台 开源与自由软件 强大功能高效优化 标准化与一致性 工具链集成),下载地址为Releases · niXman/mingw-builds-binaries

1.1gcc编译流程

预处理:预处理器(如cpp)会处理源代码中的宏定义、文件包含(#include)、条件编译等指令,将它们展开,并生成一个纯粹的C语言代码.i文件。

编译:编译器将经过预处理的源代码转换成汇编语言代码为.s文件。这个阶段主要是语法分析、语义分析和生成汇编代码。此时,编译器会检查语法错误、类型错误等,但它通常不会检查是否有未定义的函数。只要函数已被声明或者其定义可以在某个地方找到,编译器就会继续生成目标代码。

汇编:汇编器将汇编代码转换为机器代码,也就是目标文件(.o或者.obj)文件。

链接:链接器将目标文件和库文件连接,生成最终的可执行.exe文件。链接阶段是发生未定义函数错误的阶段。如果存在函数的调用,但是没有对应的函数定义(或者在链接的文件中找不到定义),链接器会报告一个“未定义引用”错误。这时,编译器才能检测出是否有未定义的函数。

C语言并不完全依赖于平台,主要是因为它具有良好的可移植性。可移植性指的是,C语言编写的程序可以在不同的平台上编译并运行,只需要进行一些小的调整或重新编译,而不需要对整个程序做出大的修改。C语言支持结构化编程,强调程序逻辑的清晰、模块化和易维护。它不强制使用面向对象编程(OOP),而是通过函数和控制结构来组织代码。C语言的类型系统是强类型的,要求在变量使用之前必须明确声明类型,保证程序的类型安全。C语言是高效的,确定的,且能直接对内存进行访问。

2.IDE (Integrated Development Environment)是用于程序开发的软件,一般包括代码编辑器、编

译器、调试器和图形用户界面工具。IDE为用户使用C、Java、ASP、PHP等编程语言提供了方便。

3.main()函数

每个C语言程序不管有多少行代码,都是从main()函数开始执行的,main()函数是程
序的入口,main 函数也被叫做主函数。
●main()函数是程序的入口
●main()函数有且仅有一个

在C语言中,main()函数的返回值int通常用于表示程序的执行状态。返回值为0表示程序成功执行,返回其他值通常表示程序发生错误。main()函数的返回值会传递给操作系统,作为程序退出的状态码。
在 C99 标准中,只有以下两种定义方式是正确的:
int main( void ) /* 无参数形式 */
{
...
return 0;
}
int main( int argc, char argv[] ) / 带参数形式 */
{
...
return 0;
}

5.头文件

头文件通常包含函数声明、宏定义、结构体定义等,避免代码重复,并提供对标准库函数的访问。它不会直接提高程序的执行效率。源代码文件通过 #include 指令来包含头文件。在使用 #include 时,也可以指定头文件的路径。头文件可以包含变量声明,但应谨慎使用。

.c文件:

名称:源文件(Source file)。

作用:.c文件包含程序的主要实现代码,是程序的源代码文件。

.h文件:

名称:头文件(Header file)。

作用:.h文件通常包含函数的声明(即函数原型)、宏定义、结构体定义、全局变量声明以及其

他需要在多个源文件中共享的内容。

为什么需要头文件 硬件和计算资源限制 操作系统工具链设计特点 模块化开发和增量编译

代码重用 避免重复定义 提供抽象和封装

同时使用#ifdef和#endif可以避免多次包含同一头文件。常见的做法是在头文件的开头加上条件编译指令。

如果自己定义的头文件,例如使用#include "header.h"时,预处理器会从当前源文件所在的目录开始查找头文件。如果文件存在且没有问题,头文件的内容会被插入到源代码中。这不会导致头文件被忽略。因此,这个选项不会导致头文件被忽略。在C语言中,虽然头文件通常使用.h扩展名,但头文件的扩展名并不直接影响编译器是否能处理它。只要文件内容符合头文件规范(如包含声明、宏等),编译器可以处理该文件。使用其他扩展名(如.hpp、.inc等)不会导致头文件被忽略。

6.多文件编译

1. 编译并链接所有 .c 文件到一个可执行文件

如果你有多个 .c 文件,比如 file1.c 和 file2.c,你可以使用以下命令编译并链接它们到一个可执行文件 program.exe:

gcc file1.c file2.c -o program.exe

这里,gcc 会自动将所有列出的 .c 文件编译成目标文件(.o 文件),然后将这些目标文件链接成一个可执行文件 program。

2. 单独编译成目标文件,然后链接

你也可以先编译每个 .c 文件生成目标文件(.o 文件),然后再将这些目标文件链接成一个可执行文件。这样做可以更方便地

在多个文件间进行增量编译。

首先编译每个 .c 文件:

gcc -c file1.c -o file1.o

gcc -c file2.c -o file2.o

然后将所有目标文件链接成一个可执行文件:

gcc file1.o file2.o -o program.exe

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐