C语言基础学习——预处理

发布时间:2026/7/28 2:47:08
C语言基础学习——预处理 预处理1、预处理不是C语言的一部分2、区分编译和预处理编译程序 --- 笼统的编译 //实际上划分几个具体的阶段编译过程1.预处理将程序中预处理命令执行完毕 --- 本质做文本的替换转换为纯C语言代码2.编译将C语言代码转换为汇编代码3.汇编将汇编代码转换为机器代码二进制组合4.链接将写的代码和用到的代码拼凑成完整的可执行文件预处理阶段1.宏定义2.文件包含3.条件编译预处理命令都是以#开头的宏定义a不带参的宏#define 标识符 字符串 #define 宏名 宏值 eg#define N 10N代表了10这个文本信息预处理时凡是代码中出现的N都用10这个文本替换注意1.预处理命令 #define2.出现在字符串中的与宏名同名的标识符不会被替换printf(N %d\n,N) //第一个N不会被替换第二个N会被替换3.宏名 --- 标识符命名规则和变量名命名规则一致写法一般大写名字中所有字符都大写 //为了区别变量名4.宏值 后面不能有分号5.应用提高代码可读性 // 一改全改提高编程效率6.预处理作用域从定义处开始对后面代码都有效到文本结束如果想提前取消其作用可以用 #undef 取消 // #undef 宏名 --- #undef Nb带参宏#define 宏名(参数表) 字符串 #define 宏名(参数表) 宏值 eg#define MUL(a,b) a*b注意1.带参宏 --- 宏函数但是带参宏不是函数2.带参宏可以用来实现一些简单的函数功能3.宏的副作用#define MUL(a,b) a*b MUL(11,22) 11*22能用括号括起来的都括起来4.带参宏和函数区别带参宏做的是文本替换每写一次就意味着一份代码替换函数做的是函数的调用代码只有一份带参宏参数不用类型检查函数型参需要做类型检查5.如果存在宏的嵌套需要层层展开6.宏定义写到换行时候结束宏定义必须在同一行7.换行符 \ 放到一行文件包含#include 文件名 //默认到系统的相关路径下寻找包含的文件#include 文件名 //首先在当前路径下寻找要包含的文件找不到再到系统的相关路径下寻找注意用 //如果包含的是标准头文件 --- 系统提供用 //要用自己的头文件 --- 自己指定路径条件编译选择将哪些代码放到最终的代码中进行编译形式1#ifdef 标识符 程序段1 #else 程序段2 #endif语义如果标识符已经定义了为真将程序段1放到预处理完的代码中否则为假将程序段2放到预处理完的代码中形式2#ifndef 标识符 程序段1 #else 程序段2 #endif语义如果标识符没有定义为真将程序段1放到预处理完的代码中否则为假将程序段2放到预处理完的代码中形式3#if 表达式 程序段1 #else 程序段2 #endif语义#if 表达式为真程序段1否则程序段2用途多文件编程的头文件中根据工程需求拆出功能功能1func1.c ---实现对应功能的具体代码func1.h ---主要用来声明 func1.c 要用到的相关内容多次包含会导致重复定义的问题标准写法#ifndef 头文件名字 //前后下划线 字母大写 h前点也换成下划线 #define 头文件名字 头文件内容 #endif