编译预处理(C语言笔记) 您所在的位置:网站首页 c语言带参数的宏 编译预处理(C语言笔记)

编译预处理(C语言笔记)

2023-06-05 16:35| 来源: 网络整理| 查看: 265

预处理行都以#开头,可以出现在程序中的任何位置; C语言提供的预处理功能有三种:宏定义,文件包含和条件编译;

目录: 一、 宏定义1. 不带参数的宏定义2. 带参数的宏定义 二、 文件包含三、条件编译1.几种形式• 形式1• 形式2• 形式3 例题:

一、 宏定义 1. 不带参数的宏定义 #define 宏名 宏体

注意: a) 不能在一行上写多条预处理命令; b) 宏参数无类型; c) 宏的名称中不能有空格,有分号会连分号一起替换; d) #define的有效范围:从定义处开始到包含它的源文件结束; e) 可以用#undef命令提前结束宏定义的作用域

eg:#define PI 3.1415926 int main() { } #undef PI viod f1() { }

f) 在进行宏定义时可以引用已定义的宏名,进行层层代换 g) 对程序中用双引号引起来的字符串内的字符,即使与宏名相同,也不进行替换

2. 带参数的宏定义 #define 宏名(参数表) 宏体

参数表中可以有一个或多个参数,多个参数用逗号分隔

注意: a) 带参数的宏定义的字符串应该写在一行上,如需写在多行,应使用续行符(\); b) 注意加圆括号

宏代换是在编译前进行的,在代换时并不分配内存单元,不进行值的传递,也没有返回值的概念; 宏代换不占运行时间,只占编译时间,而函数调用则占运行时间。

二、 文件包含

让编译预处理器把另一个源文件嵌入(包含)到当前源文件中的该指定处 文件包含命令格式如下:

#include

#include”文件名“

使用尖括号< >和双引号" "的区别在于头文件的搜索路径不同: • 使用尖括号< >,编译器会到系统路径下查找头文件; • 而使用双引号" ",编译器首先在当前目录下查找头文件,如果没有找到,再到系统路径下查找。

也就是说,使用双引号比使用尖括号多了一个查找路径,它的功能更为强大。

注: 1.“#include”的处理过程很简单,就是将头文件的内容插入到该命令所在的位置,从而把头文件和当前源文件连接成一个源文件,这与复制粘贴的效果相同。 2.不管是标准头文件,还是自定义头文件,都只能包含变量和函数的声明,不能包含定义,否则在多次引入时会引起重复定义错误。 3.一条文件包含命令只能包含一个文件。 4.文件包含命令可以嵌套使用。

三、条件编译 1.几种形式 • 形式1 #ifdef 标识符 程序段1 [#else 程序段2] //可以没有 #endif

当标识符已被定义过 (一般是用#define定义), 则编译程序段1

• 形式2 #ifndef 标识符(未定义) 程序段1 [#else 程序段2] //可以没有 #endif //意义与形式1相反 • 形式3 #if 表达式 /*或#if(表达式)*/ 程序段1 [#else 程序段2] #endif 例题:

在这里插入图片描述

#include #define LETTER 0 int main( ) { char str[30]="C Programming Language ",c; int i=0; while ((c=str[i])!='\0') { i++; #if LETTER if (c>='a'&& c='A'&&c


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有