C语言宏定义参数的问题

宏定义是C语言提供的三种预处理功能的其中一种,这三种预处理包括:宏定义、文件包含、条件编译。今天小编给大家有关不带参数宏和带参数宏的一些。

不带参数宏

  • 01

    不带参数宏定义又称为宏代换,简称“宏”。 格式为:#define 标识符 字符串 宏名一般用大写,宏定义末尾不加分号。

  • 02

    如果程序中有大量相同变量数据要重新赋值,使用宏就不用一个一个地去修改。 替换过程是在编译前,只是单纯的做字符替换,所以不占存储空间。

带参数宏

  • 01

    宏也可以带参数,格式是#define宏名(参数表) 字符串 例如:#define add(x)  x+x

  • 02

    不过实参如果是表达式容易出问题,比如上面的宏定义:#define add(x)  x+x 主函数中m=1,n=2,k=3; add(m+n)*k结果是怎么样呢? 其实做的只是替换,编译前,add(m+n)替换成m+n+m+n, 结果就是m+n+m+n*k,等于10.

  • 03

    而add(n+m)*k结果则是n+m+n+m*k,等于8. 不要错误地认为add(m+n)*k和add(n+m)*k的结果都是(n+m+n+m)*k=18,因为宏替换只是单纯的字符替换,是不会做运算的,运算时编译以后的事情。

  • 04

    带参数宏替换不要和函数调用弄混了,宏替换只占编译时间,不占运行时间。 函数调用占运行时间(分配内存、保留现场、值传递、返回值)。 宏替换使源程序变长,而函数调用则不会。

(0)

相关推荐

  • C语言带参数宏定义【编程必备】

    C语言允许宏带有参数.在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数. #defineM(y)y*y+3*y/*宏定义*/ /* -- */ k=M(5);/*宏调用*/ 在宏调用时,用实 ...

  • Ansys如何定义参数变量导入数据文件?

    软件中可以定义数组或表格参数,并通过导入文件导入外部数据.当有一系列数据需要导入软件进行有限元仿真分析时,需要首先创建Array Parameters(参数变量),然后以加载文件形式,将文件中一系列数 ...

  • C语言如何定义字符串变量

    现在我们来看看,C语言如何定义字符串变量. 操作方法 01 首先,我们定义一个字符数组变量,可以这么写. 02 然后我们输入字符的长度. 03 接下来我们就可以直接赋值字符串. 04 我们也可以定义多 ...

  • C语言如何定义一个数组

    现在我们来看看,C语言如何定义一个数组. 操作方法 01 首先,我们编写头文件以及main函数主框架. 02 然后我们编写如图语句,int可更改为任意其他类型. 03 接下来我们可以for语句给他赋值 ...

  • C语言如何定义字符串

    现在,我们来看看,C语言如何定义字符串. 操作方法 01 首先,我们写入字符关键字. 02 然后哦我们输入一个数组变量. 03 然后我们可以对他进行复制. 04 但是记得输入其结束标志. 05 我们还 ...

  • c语言如何定义变量

    c语言是一种计算机编程语言,是目前较为流行的语言.而对c语言变量定义则是要做c程序的第一步 操作方法 01 声明变量必须要了接计算机的内存,计算机所有数据都是存放在一个叫ram存储器里面,而声明变量就 ...

  • C语言怎么定义变量

    有很多初学C语言的人定义变量可能会有点,不太明白定义变量就是为以后的使用,那么怎么定义呢?下面小编给大家分享下定义的方法 操作方法 01 首先我们打开我们的编译器,在main函数中写 02 然后我们声 ...

  • 零基础学习C语言

    零基础学习C语言:本人在网上找了很久关于如何学习C语言,本人也是新手不知该如何开始学习,无意中发现这本书慢慢的我找到了学习的头绪!推荐给大家学习 操作方法 01 目录 前言 第一篇 C语言基础 第1章 ...

  • c语言中如何表示真和假

    c语音的真假表示是一个比较基本知识,对于真假的表示有很多,本给出了以宏定义为基础的表示方法,并且以实验的方式给出. 准备 01 打开编译器: 如图,所示打开的编译器主界面,也可以采用其它的编译器的: ...