预处理器
编译一个c程序涉及很多步骤, 其中第一个步骤被称为预处理器阶段.c预处理器在源代码编译之前对其进行一些文本性质的操作,他的主要任务包括删除注释,插入被#include指令包含的文件的内容,定义和替换#define指令定义的符号以及确定代码的部分内容是否应该根据一些条件编译指令进行编译.
预定义符号
预处理指令
指令 | 描述 |
---|---|
#include | 包含一个源代码 |
#define | 定义宏 |
#undef | 取消已定义的宏 |
#ifdef | 如果宏已经定义,则返回真 |
#ifndef | 如果宏没有定义,则返回真 |
#if | 如果给定条件为真,则编译下面代码 |
#else | #if的替代方案 |
#elif | 如果前面的#if给定条件不为真,当前条件为真,则编译下面代码 |
#endif | 结束一个#if…#else 条件编译块 |
#error | 当遇到标准错误时, 输出错误消息 |
#pragma | 使用标准化方法, 向编译器发布特殊的命令道编译器中 |
typedef
c语言支持一种叫做typedef的机制, 它允许你为各种数据类型定义新名字.typedef声明的写法和普通的声明基本相同, 只是把typedef这个关键字出现在声明的前面 .
动态内存分配
当你声明数组时, 你必须用一个编译时常量指定数组的长度,但是,数组的长度常常在运行时才知道.这是由于他所需要的内存空间取决于输入数据.
c函数库提供了两个函数,malloc 和free 分别用于执行动态内存分配和释放,这些函数维护了一个可用内存池,当一个程序另外需要一些内存时,他就调用malloc函数,,malloc从内存中提取一块合适的内存,并向该程序返回一个指向这块内存的指针.这块内存此时并没有以任何方式进行初始化.如果对这块内存进行初始化非常重要,你要么自己动手对他进行初始化,要么使用calloc函数.当一块以前分配的内存不在使用时,程序调用free函数把它归还给内存池供以后之需.
python对象就是 c语言结构体在堆上申请的一块内存.
在 C 语言中,字符串实际上是使用 null 字符 ‘\0’ 终止的一维字符数组。因此,一个以 null 结尾的字符串,包含了组成字符串的字符。
c中大量操作字符串的函数
函数 | 目的 |
---|---|
strcpy | 复制字符串s2到字符串s1 |
strcat | 连接s2 到字符串s1的末尾 |
strlen | 返回字符串s1的长度 |
strcmp | 如果 s1 和 s2 是相同的,则返回 0;如果 s1 |
strchar | 返回一个指针,指向字符串s1中字符ch的第一次出现的位置 |
strstr | 返回一个指针,指向字符串s1中字符串s2的第一次出现的位置 |