《C语言的预备知识》
一、编译的过程编译流程-o 给生成的文件取别名默认名字叫a.exe/a.out预处理gcc -E1、展开头文件2、删除注释3、替换宏4、宏分支# 预处理符编译gcc -S将C语言代码变成汇编语言检查语法 .s汇编gcc -c将汇编语言转化为机器码二进制 .obj链接gcc1、将多个二进制文件打包成一个可执行文件2、链接库、链接函数※可以直接一步完成以上四个步骤gcc code.c -o code二、main函数1、概念每个C语言程序不管有多少行代码都是从main()函数开始执行的main()函数是程序的入口main 函数也被叫做主函数。①main()函数是程序的入口②main()函数有且仅有一个2、main()的两种形式①无参数形式 int main(void) /* 无参数形式 */ { ... return 0; } ②有参数形式 int main(int argc, char *argv[]) /* 带参数形式 */ { ... return 0; }三、头文件.c文件名称源文件Source file作用.c文件包含程序的主要实现代码是程序的源代码文件。.h文件名称头文件Header file作用.h文件通常包含函数的声明即函数原型、宏定义、结构体定义、全局变量 声明以及其他需要在多个源文件中共享的内容。1、头文件的类型①#include stdio.h // 包含标准输入输出库②#include stdlib.h // 包含标准库函数③#include cdemo.h // 包含项目自定义的头文件2、为什么需要头文件1、硬件和计算资源限制2、操作系统工具链设计特点3、模块化开发和增量编译4、代码重用5、避免重复定义6、提供抽象和封装3、标准库C语言的标准库Standard Library提供了一组广泛使用的函数涵盖输入输出处理、字符串操作、数学运算、内存管理等功能。这些库在编写C程序时非常实用。以下是一些常用的C标准库及其功能1. stdio.h - Standard Input and Output功能提供输入输出函数如读写文件、控制台输入输出等。常用函数printf()格式化输出到控制台。scanf()格式化输入从标准输入读取数据。fopen()打开文件。fclose()关闭文件。fread()从文件中读取数据。fwrite()将数据写入文件。fprintf()格式化输出到文件。fscanf()格式化输入从文件读取数据。fseek()移动文件指针。ftell()获取文件指针的位置2. stdlib.h - Standard Library功能提供通用的工具函数包括内存管理、随机数生成、程序退出控制等。常用函数malloc()分配内存free()释放内存。realloc()重新分配内存。calloc()分配并清零内存。exit()终止程序执行。atoi()将字符串转换为整数。atof()将字符串转换为浮点数。rand()生成随机数。srand()设置随机数种子3. string.h - String Handling功能提供字符串操作函数如字符串复制、拼接、比较等。常用函数strcpy()复制字符串。strncpy()复制指定长度的字符串。strcat()拼接字符串。strncat()拼接指定长度的字符串。strlen()计算字符串长度。strcmp()比较两个字符串。strncmp()比较指定长度的字符串。strchr()查找字符在字符串中的第一次出现。strstr()查找子串在字符串中的第一次出现。memcpy()复制内存块。memset()设置内存块4. math.h - Mathematics Library功能提供数学运算函数如三角函数、指数函数、对数函数等。常用函数sin()计算正弦值。cos()计算余弦值。tan()计算正切值。exp()计算指数值。log()计算自然对数。log10()计算以10为底的对数。sqrt()计算平方根。pow()计算幂值。fabs()计算绝对值。ceil()向上取整。floor()向下取整。四、多文件编译1、 编译并链接所有 .c 文件到一个可执行文件如果你有多个 .c 文件比如 file1.c 和 file2.c你可以使用以下命令编译并链接它们到一个可执行文件 program.exegcc file1.c file2.c -o program.exe这里gcc 会自动将所有列出的 .c 文件编译成目标文件.o 文件然后将这些目标文件链接成一个可执行文件 program。2.、单独编译成目标文件然后链接你也可以先编译每个 .c 文件生成目标文件.o 文件然后再将这些目标文件链接成一个可执行文件这样做可以更方便地在多个文件间进行增量编译。首先编译每个 .c 文件gcc -c file1.c -o file1.ogcc -c file2.c -o file2.o然后将所有目标文件链接成一个可执行文件gcc file1.o file2.o -o program.exe五、代码格式在编写 C 语言程序时遵循一定的代码格式和规范可以提高代码的可读性、可维护性和可移植性。1、代码缩进一致性: 使用一致的缩进风格通常是 4 个空格或 1 个制表符。保持缩进的一致性有助于提高代码的可读性。块结构: 在代码块的开头和结尾使用大括号 {}并将大括号放在相应的行上或者与条件语句同一行。2、 命名规范变量名: 选择具有描述性的变量名使用小写字母和下划线分隔词例如 max_value。函数名: 使用动词加名词的形式例如 calculate_sum并保持一致性。常量名: 使用全大写字母和下划线分隔词例如 MAX_SIZE。3、注释文档注释: 在函数定义之前添加简要的文档注释描述函数的功能、参数和返回值。行内注释: 用于解释复杂的代码或算法但应尽量避免过多注释保持代码自解释性。4、代码结构函数: 每个函数应尽量保持简洁执行单一的功能。函数的定义应该清晰地表达其功能。文件分隔: 将相关的函数和数据组织在一起并将它们分隔到不同的源文件.c 文件和头 文件.h文件中。头文件保护:使用宏定义来防止头文件被多次包含5、函数原型声明: 在 .h 文件中声明函数原型在 .c 文件中定义函数6、错误处理返回值检查: 对函数调用的返回值进行检查确保程序的健壮性#include stdio.h #include stdlib.h int main(void) { int result some_function(); if (result 0) { perror(some_function failde); // 打印错误原因 exit(EXIT_FAILURE); // 直接退出程序 } return 0; }7、代码风格避免魔法数字: 使用常量定义代替硬编码的数字以提高代码的可维护性#defineMAX_SIZE100intarray[MAX_SIZE];8、内存管理释放内存: 动态分配的内存需要在不再使用时释放以防止内存泄漏int*ptr (int*)malloc(10 *sizeof(int));//使用ptrfree(ptr);10. 避免未初始化的变量初始化变量: 在使用变量之前确保它们被初始化六、注释1、单行注释单行注释用于对单行代码进行简短的注释开始于 // 符号。// 后面的所有内容直到行末都被视为注释intx 5//这是一个整数变量2、多行注释多行注释用于注释多行代码开始于 /*结束于 */。多行注释可以跨越多行适用于较长的说明或暂时禁用大块代码。/*这是一个多行注释它可以跨越多行用于提供详细的解释或文档*/