深入解析C语言中宏定义的两种格式及注意事项

1、概念

深入解析C语言中宏定义的两种格式及注意事项

# define命令是C语言里的宏定义命令。它能把一个标识符定义成一个字符串。这个标识符称作宏名。被定义的字符串叫做替换文本。

命令存在两种格式。一种格式为简单的宏定义。另一种格式是带参数的宏定义。

(1)简单的宏定义:

#define

其值为(a的大小)除以(a[0]的大小)

(2)带参数的宏定义#define ()

否则返回b

2、不能忽略宏定义中的空格

下面的宏定义中,f是否带了参数呢?

#define f (x) ((x)+1)

答案是否定的。在f与(x)之间存在一个空格。这使得变成了如下定义。

#define  f   (x)((x)+1)

预处理程序不会对它进行任何检查。要是有错误,只能在编译源程序时发现。此时源程序已经过宏展开。

3、宏不是函数

如果我们定义一个宏:

#define  MAX(a,b)  a>b?a:b

当我们执行一个语句:

3+MAX(1,3);

我们期望的正确答案应当是6。实际上,运行后的答案是1。和宏定义相关联的是优先级。算数运算符的优先级高于条件运算符。具体展开如下:

首先进行算符运算符的运算。这里是3 + 1 > 3? 1 : 3 ,运算后变为4 > 3? 1 : 3 。所以答案为1 。

请注意宏定义里的括号,这些括号能预防引发优先级相关问题。有些专家建议,在C语言中牢记两个优先级即可,乘除法优先级高于加减法。设计其他操作符时,都要加上括号

4、宏定义不是说明或语句,在行末不必加分号

比如,加上分号则连分号也一起置换。

5、宏不是类型定义

首先定义一个宏:

#define pChar char*

用pChar定义两个变量。接着用操作符sizeof读取变量所占用内存大小。若变量是指针类型,其占用4个字节。若变量是字符型,其占用1个字节。

结果占用的空间存在差异,变量类型因而不同,所以宏定义并非类型定义。那么,要是我改用typedef来定义类型会怎样呢?

宏定义是简单的字符串代换。它在预处理时完成。typedef在编译时处理。它不是简单代换。而是对类型说明符重新命名。被命名的标识符有类型定义说明。

6、与之相关的宏定义

下面来看一种常用的使用方式

#if defined(CREDIT)    credit();#elif defined(DEBIT)    debit();#else    printerror();#endif

7、总结

宏的本质是代码替换。

END

你可能想看:
« 上一篇
下一篇 »

相关推荐

FreeBasic:强大免费开源的64位basic编译器及应用优势

2025年05月10日

82阅读

脊柱侧弯矫正方法大盘点:运动康复、支具矫正等多种方式

2025年05月09日

88阅读

如何在winForm标题栏去掉标题文字且任务栏图标正常显示

2025年05月09日

86阅读

十一黄金周促销广告词大全,国庆购物狂欢等你来

2025年05月09日

78阅读

关闭快速编辑模式及插入模式,设置控制台指定文字颜色举例

2025年05月09日

63阅读

黄金搭档低糖高钙饮品包装及成分功效全解析,适合人群要知晓

2025年05月09日

91阅读