强化C【C语言笔记】——预处理
预处理是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作
预处理是C语言的一个重要功能,它由预处理程序负责完成;当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分作处理,处理完毕自动进入对源程序的编译
C语言提供了多种预处理功能,如宏定义、文件包含、条件编译等
宏定义
无参宏定义
其定义的一般形式为:
#define 标识符 字符串
对源程序作编译时,将先由预处理程序进行宏代换,然后再进行编译
对于宏定义还要说明以下几点:
-
宏定义是用宏名来表示一个字符串
-
宏定义不是说明或语句,在行末不必加分号
-
宏定义必须写在函数之外,其作用域为宏定义命令起到源程序结束
-
宏名在源程序中若用引号括起来,则预处理程序不对其作宏代换
-
宏定义允许嵌套,在宏定义的字符串中可以使用已经定义的宏名
-
可用宏定义表示数据类型,使书写方便
带参宏定义
带参宏定义的一般形式为:
#define 宏名(形参表) 字符串
带参宏调用的一般形式为:
宏名(实参表);
带参的宏定义有以下问题需要说明
-
带参宏定义中,宏名和形参表之间不能有空格出现
-
形式参数不分配内存单元,因此不必作类型定义
-
在宏定义中的形参是标识符,而宏调用中的实参可以是表达式
-
在宏定义中,字符串内的形参通常要用括号括起来以避免出错
-
宏定义也可用来定义多个语句,在宏调用时,把这些语句又代换到源程序内
文件包含
文件包含命令行的一般形式为:
#include"文件名"
- 包含命令中的文件名可以用双引号括起来
使用尖括号表示在包含文件目录中去查找(包含目录是由用户在设置环境时设置的),而不在源文件目录去查找;
使用双引号则表示首先在当前的源文件目录中查找,若未找到才到包含目录中去查找。用户编程时可根据自己文件所在的目录来选择某一种命令形式
-
一个include命令只能指定一个被包含文件
-
文件包含允许嵌套、
条件编译
- 第一种形式
#ifdef 标识符
程序段1
#else
程序段2
#endif
- 第二种形式
#ifndef 标识符
程序段1
#else
程序段2
#endif
- 第三种方式
#if 常量表达式
程序段1
#else
程序段2
#endif
相关文章
【数据结构】——哈夫曼树
速通回忆 这里是完整的代码和运行结果,可以直接选择看下面代码的思路去快速回忆哈夫曼树,或从下面理论部分开始学习 ``` #include "stdio.h" #include "stdlib.h" /* 哈夫曼树结点的结构体 */ typedef struct { int weight; /* 权重 */ int parent; /* 父母结点下标 */ int l...
强化C【C语言笔记】——位运算
位运算符C语言提供了六种位运算符 - &:按位与 - !:按位或 - ^:异或 - ~:取反 - <<:左移 - \>>:右移 按位与运算 **其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0** 按位与运算通常用来对某些位清0 按位或运算 **其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就...
C语言中规中矩的大树
**没事干,写个树玩玩,真正的“撸树”** 在Ubuntu终端、VScode终端显示 代码 ``` #include "stdio.h" int main(){ int high = 5; //层高 int count = 5; //层数 int start; //每层开始*数 int...