c语言中的宏函数 c语言宏的作用

什么是c语言里面的宏几点说明:
1.连接多行宏用 \
例如:
#define sum(a,b) \
a b
2.宏在debug下显示不出来(对于VC6.0)
3.由于宏只是原样替换,所以请多使用括号 , 变量最好都用括号括起来
以下摘自:
宏定义
宏定义是C提供的三种预处理功能的其中一种,这三种预处理包括:宏定义、文件包含、条件编译
1.不带参数的宏定义:
宏定义又称为宏代换、宏替换,简称“宏” 。
格式:#define 标识符 字符串
其中的标识符就是所谓的符号常量,也称为“宏名” 。
预处理(预编译)工作也叫做宏展开:将宏名替换为字符串 。
掌握"宏"概念的关键是“换” 。一切以换为前提、做任何事情之前先要换 , 准确理解之前就要“换” 。
即在对相关命令或语句的含义和功能作具体分析之前就要换:
例:#define PI 3.1415926把程序中出现的PI全部换成3.1415926
说明:
(1)宏名一般用大写
(2)使用宏可提高程序的通用性和易读性 , 减少不一致性,减少输入错误和便于修改 。例如:数组大小常用宏定义
(3)预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查 。
(4)宏定义末尾不加分号;
(5)宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头 。
(6)可以用#undef命令终止宏定义的作用域
(7)宏定义可以嵌套
(8)字符串" "中永远不包含宏
(9)宏定义不分配内存,变量定义分配内存 。
2.带参数的宏定义:
除了一般的字符串替换 , 还要做参数代换
格式:#define 宏名(参数表) 字符串
例如:#define S(a,b) a*barea=S(3,2);
第一步被换为area=a*b; ,
第二步被换为area=3*2;
类似于函数调用,有一个哑实结合的过程:
(1)实参如果是表达式容易出问题
#define S(r) r*r
area=S(a b);
第一步换为area=r*r;,
第二步被换为area=a b*a b;
正确的宏定义是#define S(r) (r)*(r)
(2)宏名和参数的括号间不能有空格
(3)宏替换只作替换,不做计算 , 不做表达式求解
(4)函数调用在编译后程序运行时进行,并且分配内存 。宏替换在编译前进行,不分配内存
(5)宏的哑实结合不存在类型,也没有类型转换 。
(6)函数只有一个返回值,利用宏则可以设法得到多个值
(7)宏展开使源程序变长,函数调用不会
(8)宏展开不占运行时间,只占编译时间 , 函数调用占运行时间(分配内存、保留现场、值传递、返回值)
在C语言中"宏"是什么意思?定义的意思,在C语言中的宏定义就是定义外部变量,内部函数使用exiterm来调用
如:exiterm char c1,c2;
C语言中的宏定义的字是:defineC语言中的define宏定义有带参数的和不带参数两中形式,不带参格式是:#define 宏名 , 字符串带参格式是:#define 宏名(参数1,参数2 , ...) 字符串在C语言里宏定义只用来做的宏名替换,而不做语法检查的,因而它不是C语句,所以在宏定义的时候不需要在后面加";"宏也在C里也叫预处理命令,因为宏是在程序编译前先进行字符替换的,所以叫预处理.在C里还有其它的预处理命令如:
#define
#undef
#ifdef等 。
c语言中的“宏”是指什么?宏定义是C语言提供的三种预处理功能的其中一种c语言中的宏函数,这三种预处理包括:宏定义、文件包含、条件编译 。宏定义和操作符的区别是:宏定义是替换 , 不做计算,也不做表达式求解 。
1. 不带参数的宏定义c语言中的宏函数:
宏定义又称为宏代换、宏替换,简称“宏” 。
格式: #define 标识符 字符串
其中的标识符就是所谓的符号常量,也称为“宏名” 。
预处理(预编译)工作也叫做宏展开:将宏名替换为字符串 。
掌握"宏"概念的关键是“换” 。一切以换为前提、做任何事情之前先要换,准确理解之前就要“换” 。
(1)宏名一般用大写
(2)使用宏可提高程序的通用性和易读性 , 减少不一致性,减少输入错误和便于修改 。例如:数组大小常用宏定义
(3)预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查 。
(4)宏定义末尾不加分号;
(5)宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头 。
(6)可以用#undef命令终止宏定义的作用域
(7)宏定义可以嵌套
(8)字符串" "中永远不包含宏
(9)宏定义不分配内存,变量定义分配内存 。
2. 带参数的宏定义:
除了一般的字符串替换,还要做参数代换 。
C语言中宏函数跟自定义的函数有什么区别?可以把宏理解成拼字游戏c语言中的宏函数,它功能很强大,但是强大到使用不好就会有副作用 。C有很多语言设施用来完全特定功能的宏,如const,inline,template , 就是为了让大家少用宏 。给你举个宏和函数不同的例子代码:
#define max(x,y) ((x)(y)?(x):(y))
template class T
inline T max(T x,T y){return xy?x:y;}
看起来似乎是相同的功能,可是函数调用,毕竟会求完每一个实参的值,再传递给被调函数 , 即使声明了inline,在调用点展开而不发生实际的调用开销 。
但是你试试用这个调用宏,结果就会有问题:
int i=4,j=5;
int k=max(i,j);
如果是函数调用,i==5,j==6,k==5 。如果是宏的话,结果是:
int k=((i)(j)?(i):(j));
【c语言中的宏函数 c语言宏的作用】你觉得会一样吗c语言中的宏函数?所以,慎用宏 。
MFC中有很多功能是宏完成的,它太强大了,很多情况下有宏很高效,但是不容易控制 。
在C语言中“宏是什么意思”定义的意思
在C语言中的宏定义就是定义外部变量 内部函数使用exiterm来调用
如:exiterm char c1,c2;
C语言中的宏定义的字是:define
C语言中的define宏定义有带参数的和不带参数两中形式
不带参格式是:#define 宏名 字符串
带参格式是:#define 宏名(参数1,参数2,...)字符串
在C语言里宏定义只用来做的宏名替换,而不做语法检查的,因而它不是C语句,所以在宏定义的时候不需要在后面加";"
宏也在C里也叫预处理命令,因为宏是在程序编译前先进行字符替换的,所以叫预处理.在C里还有其它的预处理命令如:
#define
#undef
#ifdef
等等
C语言中的宏定义怎么用?C语言中的宏定义用法分为两种 。
1、不带参数的宏定义比较简单,就是用一个指定的标识符来代表一个字符串 。它的一般形式为“#define 标识符 字符串”,例如#define E 2.718281828459 。这种方法使用户能以一个简单的名字代替一个长的字符串 。
2、带参数的宏定义不是仅仅进行简单的字符串替换 , 还要进行参数替换 。其定义的一般形式为;“#define 标识符(宏名)(参数表) 字符串”,字符串中包含在括号中所指定的参数 。例如#define S(a,b) a*b area=S(3. 2) 。
扩展资料:
宏定义只占编译时间,函数调用则占用运行时间(分配单元,保存现?。?值传递,返回) , 每次执行都要载入,所以执行相对宏定义会较慢 。
使用宏定义次数多时,宏定义展开后源程序很长,因为每展开一次都使程序增长,但是执行起来比较快一点(这也不是绝对的,当有很多宏定义展开,目标文件很大,执行的时候运行时系统换页频繁,效率就会低下) 。而函数调用不使源程序变长 。
c语言中的宏函数的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于c语言宏的作用、c语言中的宏函数的信息别忘了在本站进行查找喔 。

    推荐阅读