参考这里Concatenation#include//宏定义#defineGET_NAME(x)#xvoidfun0(){;}intmain(){//获取name==...
The square of8is64 2. ##运算符可以用于宏函数的替换部分 ##就是个粘合剂,将前后两部分粘合起来,也就是有“组成变量名”的意思。特别要和#运算符的功能区分开来,#是连接字符串,而##是连接变量名。 但是“##”不能随意粘合任意字符,必须是合法的C语言标示符。在单一的宏定义中,最多可以出现一次“#”或...
仅仅为了获取函数名,就在函数体中嵌入硬编码的字符串,这种方法单调乏味还易导致错误,不如看一下怎样使用新的C99特性,在程序运行时获取函数名吧。 对象反射库、调试工具及代码分析器,经常会需要在运行时访问函数的名称,直到不久前,唯一能完成此项任务并且可移植的方法,是手工在函数体内嵌入一个带有该函数名的硬编码...
#include <stdio.h> #include <stdlib.h> // 在宏定义中,使用 # 将参数转为字符串,使用 ## 来连接两个参数作为一个整体标识符。 #define STRING(x) #x #define COMBINE(x, y) x##y int main(int argc, char **argv) { int x1 = 1; int x2 = 2; // STRING(x1) 将变成 "x1" // COM...
宏函数 CPP 一个强大的功能是可以使用参数化的宏来模拟函数,这里应用了 CPP 的 “字符串常量化运算符”,格式如下: #define <宏名>(<参数列表>) <宏体> 示例: // 函数 int square(int x) { return x * x; } // 带参数的宏定义 #define square(x) ((x) * (x)) 示例: ...
C语言的宏文本替换,是通过预处理指令define实现的,#define的使用场景主要有:1)直接使用标识符不定义具体常量的标识符用法 2)替换常量的对象式宏(Object-like macros)3)模拟函数功能的函数式宏(Function-like macros)4)替换文中支持可变的参数数量的可变参宏 5)#和##运算法的用法等。define 标识符 当用...
h>#define sum(b,c){int d=0;d=b+c;printf("两者的和:%d\n",d);}int main(){ int x=0,y=0; scanf("%d%d",&x,&y); sum (x,y); return 0;}拓展资料使用宏函数或者宏函数时,注意如下几点:1.宏函数的参数没有类型...
带参数的宏 : 像函数的宏,一般的定义形式 :带参宏定义的一般形式为:「#define 宏名」(形参表)字符串,也是没有结尾的分号,可以带多个参数 ,#define NB(a,b)((a)>(b)?(b):(a)), 也可以组合(嵌套)使用其他宏,注意 带参数宏的原则 一切都要有括号,参数出现的每个地方都要有括号。带参数的宏在大型的...
格式:#define <宏名/标识符> <字符串> eg:#define PI 3.1415926 说明: ①宏名一般用大写 ②宏定义末尾不加分好; ③可以用#undef命令终止宏定义的作用域 ④宏定义可以嵌套 ⑤字符串“”中永远不包含宏 ⑥宏替换在编译前进行,不分配内存,变量定义分配内存,函数调用在编译后程序运行时进行,并且分配内存 ...
简介:C --- 自定义一个宏打印当前文件名、函数名、行号 1. #include <stdio.h>2.3. #define DEBUG(format,...) printf("[File:%s, Line:%d] "format, __FILE__, __LINE__, ##__VA_ARGS__)4.5.6. int main(void)7. {8. DEBUG("hello world\n");9. return 0;10. }11....