强化C【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语言笔记】——位运算

位运算符C语言提供了六种位运算符 - &:按位与 - !:按位或 - ^:异或 - ~:取反 - <<:左移 - \>>:右移 按位与运算 **其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0** 按位与运算通常用来对某些位清0 按位或运算 **其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就...

c

C语言中规中矩的大树

**没事干,写个树玩玩,真正的“撸树”** 在Ubuntu终端、VScode终端显示 代码 ``` #include "stdio.h" int main(){ int high = 5; //层高 int count = 5; //层数 int start; //每层开始*数 int...

c