“第三十五天” define

本文介绍了C语言中的#define宏定义及其使用规则,包括宏参数、替换过程,以及条件编译的#ifdef/#ifndef和多分支控制。强调了宏在效率和类型无关性方面的优势,并提到了编程习惯。最后提到作者将开始学习数据结构。
摘要由CSDN通过智能技术生成

        #define

定义标识符:
#define name stuff

        #define 定义宏;

#define机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏或者定义宏;

#define name(parament-list) stuff
//其中的parament-list是一个由逗号隔开的符号表,它们可能出现在stuff中。
//注意:参数列表的左括号必须与name紧邻;
//如果两者之间有任何空白存在,参数列表就会解释为stuff的一部分。

        #define替换规则

在程序中扩展 #define 定义符号和宏时,需要涉及几个步骤。

1、在调用宏时,首先对参数进行检查,看看是否包含任何#define定义的符号,如果是,它们首先被替换。

2、替换文本随后被插入到程序中原来文本的位置,对于宏,参数名被它们的值所替换。

3、最后,再次对结果文件进行扫面,看看它是否包含任何由#define定义的符号,如果是,就重复上诉处理过程。

4、宏参数和#define定义中可以出现其他#define定义的符号,但是对于宏,不能出现递归。

        #的作用

        ##的作用

##可以把位于它两边的符号合成一个符号。

它允许宏定义从分离的文本片段创建标识符。

这样的连接必须产生一个合法的标识符,否则其结构就是未定义的。

在有些情况下宏是很方便的
比如在两个数中找到较大的一个。
#define MAX(a,b) ((a)>(b)?(a):(b))
//理由
1、用于调用函数和从函数返回的代码可能比实际执行这个小型计算工作所需要的时间更多。
所以宏比函数在程序的规模和速度方面更胜一筹。
2、更为重要的是函数的参数必须声明为特定的类型。
所以函数只能在类型合适的表达式上使用,反之这个宏可以适用于整型,长整型,浮点型,

        宏是和类型无关的。

编程习惯:把宏名都大写,函数名不要全部都大写。

        条件编译

   #ifdef   ,   #if    和   #endif

1、

#if  常量表达式
  //......
#endif
//常量表达式由预处理求值。

eg:
#define _DEBUG_ 1
#if _DEBUG_
    //.....
#endif


2、多分支的条件编译
#if 常量表达式
    //.....
#elif  常量表达式
    //....
#else   
    //....
#endif
  
3、判断是否被定义
#if defined(symbol)
#ifdef symbol

#if !defined(symbol)
#ifdef symbol


4、嵌套指令
#if defined(os-unix)
    #ifdef option1
        //....
    #endif
    #ifdef option2
        //...
    #endif
#elif defined(os-msdos)
    #ifdef option2
     //....
    #endif
#endif

到这里,看的那个C语言视频也差不多结束了,国庆假期看完,只不过到今天才差不多输入完毕。

后面就要多做练习,也已经开始学习数据结构了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值