C语言笔记——第9章 预处理指令

编程入门 行业动态 更新时间:2024-10-06 06:49:57

C语言笔记——第9章 预处理<a href=https://www.elefans.com/category/jswz/34/1769074.html style=指令"/>

C语言笔记——第9章 预处理指令

文章目录

    • 一、宏定义
    • 二、文件包含
    • 三、条件编译

🌿前言:在我看来,书应该越读越薄的,所以我的笔记尽量记录了每一个点,可供复习与查阅,但没有详细的解释。我的C语言的笔记是在谭浩强老师的C程序设计(第五版)的基础上总结归纳的,结合了一些我自己的见解。如果是有其他见解 ,也欢迎大家提出。

· 预处理指令是由c标准建议的 不是c语言本身的组成部分,不能用c编译系统直接编译。必须在编译前对这程序中的指令进行预处理。

· c提供的预处理功能常用的主要有宏定义,文件包含,条件编译,这些功能分别用宏定义指令 文件包含指令和条件编译指令来实现,为了与c语句区别,这些指令以“#”开头,指令后面没有分号。

一、宏定义

1.不带参数的宏定义

#define 标识符 字符串

· 使用户能以一个简单的名字代替一个长的字符串,因此把这个标识符称为宏名,在预处理时将宏名替换成字符串的过程称为宏展开。

· #define就是宏定义指令

· 宏名习惯用大写字母表示,以便与变量名相区别。

· 宏定义只是用宏名代替一个字符串,也就是只做简单的置换不做正确性检查,预处理时不做任何语法检查。

· 宏定义不是c语句,不必在行末加分号。宏名的有效范围为该指令行起到本源文件结束。

· 可以用#undef指令终止宏定义的作用域

define G 9int main(){       ···}#undef G  //G的有效范围到本句为止f1(){···}

· 在进行宏定义时,可以引用已定义的宏名,既可以层层置换。

· 用双撇号括起来的字符串内的字符,即使与宏名相同,也不进行置换。

2.带参数的宏定义

#define 宏名(参数表)字符串

如 #define s(a,b) a*b

· 宏只是进行字符替换。

· 函数调用是在程序运行时处理的,为形参分配临时的内存单元,而宏置换则是在预处理阶段进行的,在置换时并不分配内存单元,不进行值得传递处理,也没有返回值的概念。

· 对函数中的实参和形参都要定义类型,二者的类型要求一致,如不一致应进行类型转换。而宏不存在类型的问题,宏名无类型,它的参数也无类型,只是一个符号代表,置换时代入指定指定的字符串即可。

· 定义宏时,字符串可以是任何类型的数据。

· 调用函数只可得到一个返回值,而用宏可以得设法得到几个结果。

· 替换不占运行时间,只占预处理时间,而函数调用则占运行时间

二、文件包含

#include “文件名”

#include <文件名>

· 用尖括号形式时系统到存放c库函数头文件目录中寻找要包含的文件,称为标准方式。用双撇号形式时,系统现在用户当前目录中寻找要包含的文件,若找不到,再按标准方式查找。若该头文件没有放在用户当前目录中,则程序编写者因在双撇号内给出文件路径(如#include “C:\wang\file2.h”)

· 在预处理时是先将另一个文件包含到主文件中得到一个新的程序再编译的

· #include指令只能指定一个被包含文件,但是在一个被包含文件中又可以包含另一个被包含文件。

· 如果文件1需要包含文件2,但是文件2中又要用到文件3的内容,则可以用#include指令分别包含这两个文件,文件3要在文件2前。

三、条件编译

条件编译:对一部分内容指定编译条件,在满足条件时才进行编译

(1)

#ifdef 标识符

程序段1

#else

程序段2

#endif

· 若所指定的标识符已经被#define指令定义过,则在程序编译阶段对程序段1进行编译;否则编译程序段2。(其中#else部分可省)

· 程序段可以是语句组也可以是指令行

例:

#ifdef DEBUGprintf(“x=%d”,x);

(2)

#ifndef 标识符

程序段1

#else

程序段2

#endif

· 若所指定的标识符未被#define指令定义过,则在程序编译阶段对程序段1进行编译;否则编译程序段2。

(3)

#if 表达式

程序段1

#else

程序段2

#endif

· 当指定的表达式值为真(非零)时就编译程序段1;否则程序段2.

更多推荐

C语言笔记——第9章 预处理指令

本文发布于:2024-02-13 10:05:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1758377.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:指令   语言   笔记

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!