《C语言的预备知识》
·
一、编译的过程
编译流程:-o 给生成的文件取别名,默认名字叫a.exe/a.out
预处理:gcc -E
1、展开头文件
2、删除注释
3、替换宏
4、宏分支
# 预处理符
编译:gcc -S
将C语言代码变成汇编语言(检查语法) .s
汇编:gcc -c
将汇编语言转化为机器码(二进制 .obj)
链接:gcc
1、将多个二进制文件打包成一个可执行文件
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.exe:gcc 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、代码风格避免魔法数字: 使用常量定义代替硬编码的数字,以提高代码的可维护性#define MAX_SIZE 100int array[MAX_SIZE];8、内存管理释放内存: 动态分配的内存需要在不再使用时释放,以防止内存泄漏;int *ptr = (int *)malloc(10 * sizeof(int));// 使用 ptrfree(ptr);10. 避免未初始化的变量初始化变量: 在使用变量之前,确保它们被初始化;
六、注释
1、单行注释
单行注释用于对单行代码进行简短的注释,开始于 // 符号。// 后面的所有内容直到行末都被视为注释;int x = 5;//这是一个整数变量
2、多行注释
多行注释用于注释多行代码,开始于 /*,结束于 */。多行注释可以跨越多行,适用于较长的说明或暂时禁用大块代码。/*这是一个多行注释它可以跨越多行用于提供详细的解释或文档*/
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)