00:00
各位同学,我们来看一下下面的。红定义。宏定义是怎么样的呢?宏定义它也是属于预处理命令的一种,对吧,前面我们已经讲过了,宏定义还有文件包含,包括前面我们讲的什么这个这个啊,就是if if end等等这些呢,都是我们的预处理。那么这个宏定义指的是什么意思呢?就是一个井号,一个DB,我们称之为宏定义命令,它也是C语言预处理命令的一种。所以宏定义就是用什么呢?用一个标识符注意体,这句话用一个标识符来表示一个字符串,如果在后面的代码中出现了这个标识符呢?那么就用就就全部替换成指定的字符串,所以说宏定义就是一个简单的替换,这句话我搂出来。什么意思呢?所谓宏定义,就是用一个标识符来表示一个字符串,那后面的代码中出现了这个标识符,就替换成指定的字符串,它是这么一个作用。
01:03
红定义大家应该记得我们在前面讲常量的时候,我们讲过,这里呢,我们再简单的回顾一下,同学们看这里我有一段代码,这有一个D方,N等于100,然后这方有个20加N,各位同学当预处理过后,当预处理过后,我们这句话就变成了int some。等于20加多少呢?加十,因为因为这个N,各位同学这个N呢,就会在预处理的时候,把这个N呢,替换成这个十了,注意这个替换成十的这个工作是在预处理阶段。完成的。那这里呢,我对预处理做一个小结,就对这个题做个小结,大家看这里,这里被替换成。呃,100了,怎么是100哈,不是十,刚才我看错了,少看了一个零。对,100。那么同学们看这一句话就是你们看到def DeFine n 100,这个就是宏定义,那么怎么理解这个东西呢?N就是我们的宏名,100呢,就是这个宏的内容及它表示的一个轴串。在预处理阶段,对程序中所有出现红名的预处理器都会用宏定义中的字符串去替代。
02:20
这个我们称之为红替换。红替换,有些宿舍呢,把它叫做红展开都可以。也就是说用用这个宏定义里面这一个N对应的这个字符字符串去替代这个红名,这个我们称之为红替换,或者叫红展开。还有一点呢,需要各位同学知道的是,宏定义是由原是由原程序中的宏定义命令完成的。处理这个过程是预处理命令来完成,就替换这个工作呢,是由预处理程序来做的,还是想到刚才那句话就是源代码,源代码之前呢,先进行一个预处理。
03:01
以前我们。也做个预处理,预处理完了过后,再对这个预处理的过后呢,代码进行一个编译。能理解啊,编译完了过后呢,再是连接就是连接。链接链接链接完了过后呢,OK,再试我们的运行,所以它是经过预处理编译连接,然后这边运行它是这样一个流程。对,所以说预处理呢,是在最先前发生的明白,而刚才我们所说的这个预处理。也有一个专门的程序叫预处理程序来完成。对。好,同学们,那关于宏定义的一个快速回顾我们就说到这儿了,那下面呢,我们继续往下走。红定义的形式是刚才我们已经讲过了,是这样子的,前面有一个井号DeFine,这个呢我们称之为红名,后面是一个字符串,根据你的需要,你自己写对应的字符串就行了,对前面这个讲了哈,讲了。
04:00
嗯,那么我们要强调的是陈复中,呃,就是这点刚才已经说过了,红名是一个标识符的一种命名规则,和变量名是一样的,就说这个宏的名字呢,咱们和变量。名那个命令规则一样,字符串就后面这个字符串可以是数字表达式,If,语句函数,甚至它是一个函数的可以。这里所说的字符串是一般意义上的字符串,不要和C语言里面的这个寸替换了,说了诶,这段写不是这个string,不是的,就是你自己爱写什么就写什么,当然根据你的需要来写。好,这个下面我们就这句话不说了,最后呢,我们再举一个例子,大家看,再举一个相对复杂的案例,我写到这里,大家看这个结果是什么。我们再举一个宏定义的案例。走起来,那么我们来写一段代码啊,叫地。DeFine。然后我把这个后缀名改一下喽,改成C。
05:01
OK,重新来。好,这边呢,我们也把它改成C,那这个好像也改成C了。好,这个已已经改成C了哈。各位同学,那么现在我们把刚才这个段表拿过来,我们看看这样子会得到什么,我们一起来分析一下好不好?同学看现在呢,这有一个宏定义。这是一个宏定义。那么这个红定义呢?红名为M对吧,红名。红明。是什么呢?是大写的M。它对应的对应的字符串是哪一个呢?就是后面这一节,注意小括号也是其中的一部分。那么它下面代码会怎么,他预处理会做一个什么工作呢?他先去扫描这个代码,只要是A的地方,它全部替换成这个走串,注意只是一个简单替换,也就是说红展开过后呢,其实它是这个样子的。
06:02
我给他写到这里来,他展开过后,其实就是很简单的把这个做一个整体。给你替换掉了。就这个意思。就这个意思,那么我这里特别要强调是这个小括号可千万不要省略。如果说你这个小括号省略了,你个小会,假设你这个小括号写成省略了,写成这样子,我告诉大家,那么它宏替换过后,这一个上午等于什么呢?就等于这样子的,这两个结果可是完全不一样的啊,就是说如果有小括号,它展开是这样子的。如果没有小括号呢,它展开的。就这样子的。看到没有,所以说很多书上都讲过,如果进行宏替换,小心你的意图是什么?显然这样的,你这样的一个运算的结果和刚才有小括号的运算结果完全是两回事。完全是两回事,所以说在很多书上都提过一句话。
07:03
提过怎样一句话呢?哎,就什么意思,就是说这个小括号在,如果是有这个小括号和没有小括号含义是完全不一样的。我这里特别说明一下。注意。注意。如果这个红。宏对应的字符串有小括号。那么,那么。那么就。不不能不能省略,不能省略就你不要说,诶人人家写小括号,你以为你以为这个没有必要,你就把它去掉了,那就完蛋了,整个结果就是错的。明白这个意思吧,好,这个呢,我们可以来试一下,这个结果到底是多少,我们运行一下。嗯呃,我们看一下这个结果是多少,假如待会呢,我们输这个N,假如我们输入的N等于,注意啊,假如N等于我输的是一个三,我们看结果,各位们想的是不是一样,我们来算一算,如果是三的话呢,它展开就变成这个样子了,是不是,那就是三乘以多少呢?这边是三乘以三。
08:10
那就九呗,九加上一个。九到18。对不对,再加上是。乘以18再加上五乘以18,就这个结果。那这样子算下来呢,这个就应该是等于54。加上多少呢?这边是嗯,四八三十二。是,那就72。这边是多少呀,这边是不是90啊,同学们90,那这个这两个加起来是126。再加一个90等于多少呢?等于216。看看是不是216运行一下同学们。来运行,我输一个三进去。好的,我输一个三,我们看是不是216,果然是216是正确的,那你如果把这个小和去掉,那肯定就不是216,所以说同学们一定要注意我们这要强调的细节哈,就是说呃,它就是一个简单的替换,这点一定要非常清晰的明白。
09:19
一定要非常清晰的明白。好同学们,我们这个。呃,把前面讲的内容我们梳理一下。这块我们讲的是什么内容呢?讲的是预处理,那这个预宏定义本身也是预处理一种,我们就直接写个预处理命令就可以了。来我们梳理一下前面讲解的内容,走起来。走起来,我们先,我们插入一个分页符,这叫预处理命令,诶,这个地方应该第十章了。那么预处理命令我们怎么讲的呢?首先我们先对预处理命令做了一个基本的介绍,是不是同学们?我们做了一个基本介绍。那这个基本介绍里边呢,我们总结了这么几句话,对预处理做做了几点说明。
10:06
我给他来一个。标题。好,这就说了这么几点说明。那这个说明完了过后,我们紧接着就给同学们来了一个快速入门,回忆了一下它是怎么使用的,还有印象吧,对,这是预处理命令的快速入门。那么月处理命令入门呢?我们实际上是举了一个案例,就是我们希望写一段代码,能够在Windows和Linux上面都停留五秒再输出哈上硅谷我们是怎么做的呢?来看一下。首先我们提出了要求,在给出了提示,最后我们给出了代码。这边是一个提示代码,我写到这里来。对代码实现。代码实现。那代码在哪里写的呢?各位朋友跟上我的思路,实际上呢,就是在这写的。预处理命令的案例。我把它。
11:01
给同学们放到笔记里面去,便于同学们今后的复习。是不是这段代码呀,重点就是要看。看哪里呢?重点就是要看这里。诶,重点就是要看这这这一节。就这一节都是我们的预处理命令的一个体现。是不是同学们,诶,老师也讲了哈,那这个预处理这块,呃,案例说完了之后,为了加深印象,呃,这个就是刚才讲的哈,然后呢,我们是不是又对。这个C语言的宏定义做了一个简单的回顾和说明,我看一下,那么C语言的宏定义我们说了什么呢?首先我们仍然是做了一个基本的介绍。是不是首先我们解释了一下什么是宏定义,宏定义具体的语法是什么呢?一句话就可以说,就是这个DeFine就叫宏定义命令。对,它也是C语言预处理命令一种。这点大家要有印象,然后呢,我们在这里是不是做了一个快速的一个回顾。
12:06
这是我们以前学这个宏定义的时候,其实提到这个就是一个快速回顾。快速,快速。回顾。那么这个回顾呢?这个小案例,我把这个案例给同学们把说到这里来。并且对这个回顾我们做了一个说明。对吧,这里有些说明,我把这个说明呢,也给大家拿过来说明。说明就是在老师的这个幻灯片里边写的内容。这是对他的一个说明。好,那说明完了过后,是不是我们又紧接着又讲了一个关于宏定义的形式的说明,以及一个宏定义的相对综合一点的一个案例,就是说。写了后面这个串呢,长一些了,不是一个简单的数字,我也不是一个简单的变量,是一个字符串了,对不对,好这块呢,我们也把它拿过来。
13:02
这是宏定义的。红定义的形式,我们也梳理到这儿。那么红第一的形式呢?我们在这里。有这么几点说明。是不是?这里一共整理了四点,那这么为是四点呢?应该是两点,这这块不算,这是它的一个定义形式。那这个说完了,是我们又举了一个关于红定义的。应用案例。来体,来体会什么叫做红展开。好,这个地方我们来个标题三吧,好,这边呢,我们。体验体验了一下,体验了。一个红,展开的展开。展开的案例。那具体来说这个案例呢,就是老师在VS。VS这个2010年这样写的,这边有分析的代码。把这个案例呢给同学们板书到这里。
14:00
对,这边尤其要强调,如果你这个红是这样子的。就是你的红是这样子呢,展开过后它其实是这个样的。对,你如果没有小括号,你如果没有给小括号,对不起,那我这儿也就没有小括号,那结果就完全不一样了,因此我在这提了一个注意事项,引起同学们的注意,就是说什么呢?就是。就是如果红对应的字符上有小括号,那么这个小括号是不能处理的。好,同学们。那关于。我们这个宏定义,还有前面讲的预预处理命令呢,一个简单的说明,我们先说到这儿,待会儿我们接着继续讲解。
我来说两句