预处理命令

一、宏定义

         C语言标准允许在程序中用一个标识符来表示一个字符串,称为宏。标识符为宏名,在编译处理时,将程序中所有的宏名用相应的字符串来替换,这个过程称为宏替换,宏分为两种:无参数的宏和有参数的宏

  1.无参数宏

            无参数宏定义的一般形式为:

            #define   标识符字符串

          “#”代表本行是编译预处理命令。define是宏定义的关键词,标识符是宏名。字符串是宏所代替的内容,可以是常数、表达式等。 注意:宏定义和其他编译预处理命令不是以分号结尾的。

  例如:使用无参数宏的程序,输入半径,求圆的周长、面积和体积。


        如果没有使用宏,那么就要查找程序并修改所有的PI值。宏的作用范围是从宏定义开始到源程序文件结束为止。也可以使用#undef来提前终止作用范围。 例如:


注意:由于使用了#undef,使宏名MAX只在main函数中有效。

知识点终止宏定义命令的一般形式:    #undef  标识符

       undef是终止宏定义的特定字,其作用是从该命令开始,该标识符(宏名)不再代表相应字符序列,即该标识符的作用范围到此处结束。       宏定义允许嵌套。例如:

       #define MIN 10

       #define MAX  MIN*2

     定义MAX宏时使用了前面已经定义的MIN.
2.有参数宏
         有参数的宏类似于有参数的函数,其定义的一般形式为:
         #define  标识符(形参表)字符串
         如果有多个形参,像函数参数一样用逗号隔开。在程序中使用有参数宏的形式是:  标识符  (实参表)
 
知识点:              
                                                            宏定义与函数的区别
         通过前面的举例,读者可能会觉得:在定义宏时有形式参数,通过宏调用给出实际参数,这种形式与函数的使用十分相似。事实上,它们是有本质不同的。主要体现在以下几方面。
  • 宏定义只是对字符串进行简单替换,而函数调用则是按程序的含义来替换形式参数。
  • 宏定义只能用于简单的单行语句替换,而函数可用于复杂运算。
  • 宏定义只占用编译时间,不占用运行时间,执行速度快,而函数调用、参数的传递等,都要占用内存开销。
  • 宏定义在编译时展开,多次使用会让源程序增大,而函数调用不管多少次总占用相同的源程序空间。
  • 宏的作用范围从定义点开始,到程序文件的末尾或使用命令#undef取消定义之前。
  • 有参数的宏的形式参数不是变量,不分配内存空间,无需说明数据类型。而函数的形式参数变量,需要分配内存空间,而函数定义时要指明参数的数据类型。

二、文件包含

    文件包含是指把指定源文件的全部内容包括到当前源程序文件中。文件包含命令的一般形式为:

        #include "文件名"  

     或

       #include <文件名>  

1.文件包含命令中的文件名即可以用尖括号,也可以用双引号括起来,它们的区别在于查找指定文件的位置不同。

2.尖括号只在缺省目录里找到指定文件。双括号则先在源程序文件所在的当前目录里查找指定文件,如果没有找到再到缺省目录里找。

3.文件包含预处理命令#include的作用是使一个源文件可以将另一个源文件的全部内容包含进来,把指定的文件插入该命令行位置取代该命令行,从而指定的文件和当前的源程序文件练成一个源文件。

4.一个include命令只能指定一个被包含文件,若有多个文件要包含,则需用多个include命令。

5.文件包含允许嵌套,即在一个被包含的一个文件中又可以包含另一个文件。

三、条件编译

      条件编译是指在特定的条件下,对满足条件和不满足条件的情况分别进行处理----满足条件时编译某些语句,不满足条件时编译另一些语句。条件编译指令常用于程序的移植反面,与系统编译环境相关。在编译前先对系统环境进行判断,在进行相应的语句编译。 条件编译命令有以下几种模式:


其含义如下:

    模式一:如果没有定义标识符,则编译程序段1.这里的程序段1既可以是语句组,也可以命令行。使用事例:

     

   模式二:如果没有定义标识符,就编译程序段1,否侧就编译程序段2.

   模式三:如果定义了标识符,就编译程序段1,否侧就不编译程序段。使用事例:

     

   模式四:如果定义标识符,就编译程序段1,否侧编译程序段2.

   模式五如果表达式成立,则编译程序段1,否侧不编译该程序段.使用事例:

  

   模式六如果表达式成立,就编译程序段1,否侧编译程序段2.



   







       


 


 

       

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值