当前位置:首页 » 编程语言 » c语言用宏定义一组函数
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言用宏定义一组函数

发布时间: 2022-04-15 15:15:08

‘壹’ c语言关于宏定义、函数

宏定义的基础知识。引用宏定义时,直接代入进行代换。
既然已经宏定义SUB(a) (a)-(a),而程序中出现的对应a的是a+b,那么就将a换为a+b代入表达式:
d=SUB(a+b)*c=(a+b)-(a+b)*c=(2+3)-(2+3)*5
直接用(a+b)-(a+b)代换SUB(a+b)。这一点和数学是不同的,不要强行往数学上靠。

‘贰’ 请问一下,c语言中若用define简单宏定义一个函数,如下,#define power(x) x*x,为何不用指出x的类型

这个问题要首先弄明白这段话在编译的时候编译器是怎么处理的。其实宏定义在编译时只是按照定义格式把使用宏的代码替换掉,就比如你上面那句:cout<<power(2)<<<endl;在编译时,编译器自动把这句替换为:cout<<2*2<<endl;也就是说这只是一种“文本”替换!!可以说参数类型与你传入的参数x的类型一致。
宏不像函数,虽然方便,但宏替换有较大的风险。比如第二句:cout<<power(1+1)<<endl;按理来说你可能想要计算的是(1+1)*(1+1)但事实上由于编译器只执行文本替换,结果第二句被替换为:1+1 * 1+1,结果迥然不同。当然你也可以注意括号应用或运算符优先级。
另外谈到宏不得不提C++的内联函数,一般函数调用时都是将其压栈待其返回值再继续运行,这个过程中需要保护断点、压栈、运算、恢复断点...(汇编会讲到)等等,一系列操作,而这些操作都需要消耗一定的时间,跟函数顺序执行相比消耗更多,因此在C++中引入了内联函数的概念。它很像宏,也是把所有调用内联函数的部分替换,但他不是简单的文本替换,他同普通函数一样要执行参数检查等等操作。

‘叁’ c语言宏定义如何用用宏定义有什么优点

用#define 来定义,如#define Max 100
优点:在以后的程序中 要修改Max的大小 不用跑到程序中找 直接修改
#define Max 的大小即可。很方便。

‘肆’ C语言中的宏定义怎么用

C语言中的宏定义用法分为两种。

1、不带参数的宏定义比较简单,就是用一个指定的标识符来代表一个字符串。它的一般形式为“#define 标识符 字符串”,例如#define E 2.718281828459。这种方法使用户能以一个简单的名字代替一个长的字符串。

2、带参数的宏定义不是仅仅进行简单的字符串替换,还要进行参数替换。其定义的一般形式为;“#define 标识符(宏名)(参数表) 字符串”,字符串中包含在括号中所指定的参数。例如#define S(a,b) a*b area=S(3. 2)。

(4)c语言用宏定义一组函数扩展阅读:

宏定义只占编译时间,函数调用则占用运行时间(分配单元,保存现场,值传递,返回),每次执行都要载入,所以执行相对宏定义会较慢。

使用宏定义次数多时,宏定义展开后源程序很长,因为每展开一次都使程序增长,但是执行起来比较快一点(这也不是绝对的,当有很多宏定义展开,目标文件很大,执行的时候运行时系统换页频繁,效率就会低下)。而函数调用不使源程序变长。

‘伍’ 宏定义一个函数有什么用,#define DEBUG_DELAY() C语言编程

的确是没有可被替换的东西,实际上替换的是“空”,也就是什么都没有。程序里面调用这个就没有任何作用。也许原本这个#define
DEBUG_DELAY()
后面还有一个函数,然后某个程序员不希望这个这个宏被调用的所有位置起作用,就删去了。所以这个宏就替换空。
这个函数宏后面为“空”或非“空”,语法都对。

‘陆’ c语言问题(宏定义作为函数)

不是你那样用的

#include<stdio.h>
#include<string.h>
#defineN(type,x,y)typetype##_max(typex,typey){return(x>y?x:y);}
N(int,x,y);//用宏产生一个int_max函数
voidmain()
{
inti=2,j=4;
printf("%d ",int_max(i,j));
}

‘柒’ C语言中的宏定义有什么用

您好!很高兴为您解答。

宏定义的用处主要体现在便于程序的调试上。

比如我要写一个计算圆相关信息(周长、面积等等)的程序,需要定义π(3.14):

#define PI 3.14

那么势必PI这个标识可以在程序中代替所有的3.14,如果我发现计算的精度不够,需要π的更多有效位时,则只需将宏定义修改为:

#define PI 3.1415926

那么程序中的所有PI都会变成3.1415926

可想而知,没有宏定义,我需要将代码中全部的3.14都手动改为3.1415926

即使是定义double PI=3.14;,你会发现当代码很长时,在乱军丛中找到一行“double PI=3.14;”是多么困难的事。

又比如数组,定义时是不能出现“int a[n];”这样的定义的,编译通不过,因为必须规定数组长度。

但如果是:

#define N 10
int a[N];
就可以,对宏定义编译器是不作检查的,应为宏定义只是简单的符号替换。所以一旦我还没有确定要定义多长的数组,但又想通过编译时,就可以提现宏定义的用处了。

如此看来,宏定义提升了程序编写的灵活性。

望采纳~如您还有不解,欢迎追问~