您的位置:首页 > 编程语言 > C语言/C++

C语言基础之宏定义(附代码)

2017-10-30 13:30 459 查看

C语言基础之宏定义

宏定义:是C语言提供的三种预处理功能的其中一种,这三种预处理包括:宏定义、文件包含、条件编译。宏定义和操作符的区别是:宏定义是替换,不做计算,也不做表达式求解。#define预处理指令可以用来定义宏。

宏定义的形式,分为带参数和不带参数的宏定义:

1. 不含参数的宏定义:

#define  标识符  字符串


例如: #define PI 3.14

这里的标识符是宏的名称,字符串可以是常数、表达式、格式串。

这里需要注意以下几点:

1)宏名称通常全由大写英文字母构成,里面不能有空格,用宏替换数字的时候不要使用赋值操作符,编译器会把程序中所有宏名称替换成它所代表的数字;

2)宏定义是用宏名来表示一个字符串,在宏展开时,又以该字符串取代宏名,这只是一种简单的代换,字符串中可以是任何字符、常数、表达式,预处理程序不对它作任何检查。如有错误,只能在编译已被宏展开后的的源程序时发现;

3)宏定义不是说明或语句,在行末不需加分号,若加了分号则连分号一起置换。;

4)宏定义必须写在函数之外,其作用域为宏定义命令起到源程序结束。如要终止其作用域可使用#undef命令;

带有参数的宏定义:

#define  宏名(参数表) 字符串


例如: #define M(y) y*y+3

它的作用是指定标识符M(y) 来代替表达式y*y+3。在编写源程序时,所有的y*y+3都可以由M(y) 代替。而对源程序作编译时,将先由预处理程序进行宏代换,即用 y*y+3表达式去置换所有的宏名M(y),然后再进行编译。

这里需要注意以下几点:

1)宏的参数不一定代表数字,所以宏参数没有类型,宏可以有多个参数,这个时候需要用逗号把不同参数分隔开, 编译器采用二次替换的方式处理带参数的宏;

2)宏不能使用自己的存储区实现和函数之间的数据传递,宏没有返回值;

3)因为宏没有返回值,所以不能保证优先计算宏内部的操作符,所有能当作数字使用的宏必须写在一对小括号里;

测试代码:



测试结果为:



另外,可以在编译命令中使用 -D 选项指定宏名称代表的数字。

测试代码如下:



测试结果为:



小知识:

#是一个宏操作符,它可以把一个宏的参数转换成字符串字面值;##也是一个宏操作符,它可以把一个代表标识符的宏参数和其他内容连接,得到一个新的标识符。

以下是我的个人公众号,主要作为C/C++语言技术分享使用,欢迎添加交流:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言