c语言,宏定义,与函数的差别 我觉得宏定义和函数没什么差别啊, 是否可以用宏定义代替函数

例如;
int a(b,c)
{
...
}

#define a(b,c) {(b)+(c)}
两个是否一样

不同。
虽然功能近似,但函数会产生独立代码,每次调用执行的是同一个位置的代码,无论调用多少次。
宏定义是简单的文本替换,产生的代码是替换后程序产生的代码,简单说就是程序里每次使用宏替换后的地方都要产生类似的代码,而这些替换后产生的代码存在于程序的不同位置。

宏定义不检查参数类型,仅仅是简单的文本替换
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-10-29
#define a(x,y) x>y?x*y:x+y

int a(x,y)
{
return(x+y);
}
a(x+y,x*y)这个表达式对于以上两种定义的得到的结果是不一样的
而且,宏有宏的有点,函数有函数的优点
函数的优点就是占用存储空间少,缺点是每次调用函数都要调用中断程序,影响运行效率
宏的优点就是直接宏展开,每次调用都要展开,所以比较占存储空间,但是相应的就不用调用中断程序了,运行效率自然就高了
第2个回答  2011-10-29
首先宏定义和函数是有差别的
宏定义是在编译之前处理的,不做语法检查。 这个很危险

另外我要说
#define a(b,c) {(b)+(c)}

表示bc之合,在结果上和函数确实一样
第3个回答  2011-10-29
但是当函数复杂的情况下,你就没法代替了哦!

c语言宏定义问题 宏定义不是可以实现和函数相同功能 那为什么还要分函数...
现在的教科书啊, c语言的标准定义,是不包括宏的。宏是编译器的一部分,我们通常写代码,为了代码高可用等,一般离不开使用宏。宏定义是编译器的预处理器处理的,真正编译的时候,才是解析具体的语言语法,具体宏定义的使用,还得看编译器的支持了。宏只有一个特征:就是字符串替换。预处理器处理宏...

怎么用宏定义代替一个带参数的函数
记住,括号很重要,宏函数不好,有缺陷,比如你写sqr(a++)就惨了

C语言中宏函数跟自定义的函数有什么区别?
可以把宏理解成拼字游戏,它功能很强大,但是强大到使用不好就会有副作用。C++有很多语言设施用来完全特定功能的宏,如const,inline,template,就是为了让大家少用宏。给你举个宏和函数不同的例子代码:define max(x,y) ((x)>(y)?(x):(y))template <class T> inline T max(T x,T y){re...

C语言中宏定义结束(新手问题)
宏定义是就完全替换,加不加分号看你自己喜欢,比如一个宏定义 define WRCMD a = 1 这里加了分号,那在用时就不用加直接写WRCMD然后换行就行,如果这时没加,那就在用时是这个样子的 WRCMD;

Linux内核中的C语言宏:常见用法和最佳实践
深入探索Linux内核中的C语言宏艺术:定义、对比与实践 在Linux内核开发中,C语言宏是一种强大的工具,它们作为预处理指令,通过文本替换提升代码复用和可维护性。让我们一起探索它们的常见用法和最佳实践。宏与函数的差异 宏在预编译阶段展开,无需函数调用的开销,不返回值,编译时进行错误检查。相反,...

C语言在函数内定义宏有什么坏处吗?
宏定义写在函数内部主要是为了方便,宏定义是预处理的,并没什么坏处

c语言宏定义如何用?用宏定义有什么优点?
c语言宏定义详解及优点C语言中的宏定义是一种强大的预处理功能,它允许程序员定义符号常量或函数式替换,提高代码的通用性、易读性和减少错误。首先,不带参数的宏定义,如#define PI 3.1415926,是将标识符(如PI)替换为预定义的字符串。在编译前,所有出现的宏名都会被替换为相应的值,如将PI替换...

C语言的宏定义问题
#define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能理解该命令的本质,总是在此处产生一些困惑,在编程时误用该命令,使得程序的运行与预期的目的不一致,或者在读别人写的程序时,把运行结果理解错误,这对 C语言的学习很不利...

急(C语言)比较带参的宏与带参的函数之间的区别
区别:1、宏会在编译器在对源代码进行编译的时候进行简单替换,不会进行任何逻辑检测,即简单代码复制而已。2、宏进行定义时不会考虑参数的类型。3、参数宏的使用会使具有同一作用的代码块在目标文件中存在多个副本,即会增长目标文件的大小。4、参数宏的运行速度会比函数快,因为不需要参数压栈\/出栈操作...

...使用宏定义实现和自定义函数实现有什么区别?与要实现的计算的复杂度...
你只要记住宏是替换 而函数那就是代码的一部分 宏你怎么写也会换到你代码中的在预处理时会换成你用的宏例如 define AAAA 10*10*10*10 int x=AAAA;等价于 int x=10*10*10*10;预处理时会改成这样;要是写个函数的话那就真的调用这个函数 ...

相似回答