define宏定义
#define 命令是 C 语言中的一个宏定义命令 ,它用来将一个标识符定义为一个字符串 , 该标识符被称为宏名, 被定义的字符串称为被替换文本。
该命令有两种格式:一种是简单的宏定义, 另一种是带参数的宏定义
无参宏定义
无参宏定义的一般形式为:#define 宏名 字符串
其中的“#”表示这是一条预处理命令。凡是以“#”开头的均为预处理命令。“define”为宏定义命令。“标识符”为所定义的宏名。“字符串”可以是常数、表达式、格式串等
例如: #define M (a+b) 它的作用是指定标识符M来代替表达式(a+b)。
在编写源程序时,所有的(a+b)都可由M代替,而对源程序作编译时,将先由预处理程序进行宏代换,即用(a+b)表达式去置换所有的宏名M,然后再进行编译
例如:
#include<stdio.h> #define M (a+b) int main(void) { int s, a=2, b=5; s = M * M; printf("s=%d\n", s); }
宏定义还要说明以下几点:
1.宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单的代换,字符串中可以含任何字符,可以是常数,也可以是表达式,预处理程序对它不作任何检查。如有错误,只能在编译已被宏展开后的源程序时发现。
2.宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起置换。
3.宏定义其作用域为宏定义命令起到源程序结束。如要终止其作用域可使用#undef命令
带参宏定义
对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参
带参宏定义的一般形式为: #define 宏名(形参表) 字符串
在字符串中含有各个形参。 带参宏调用的一般形式为: 宏名(形参表)
例如
#include<stdio.h> #define M(a,b) (a*a+b) int main(int argc, char* argv[]) { int x=2, y=3, m; m = M(x, y); printf("m=%d\n", m); return 0; }
#和##的应用
#include<stdio.h> #define M(a) a #define K(a) #a // #a指把a当成字符串 #define G(a,b) a##b //##把两个连接成新字符串 int main(int argc, char* argv[]) { char str[20] = "liming zansa\n"; puts(M(str)); //输出liming zansa puts(K(str)); //输出str int aaabb = 2345; printf("%d\n",G(aaa,bb)); //G(aaa,bb)=aaabb return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通