1. 宏定义
Posted 2bthebest1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1. 宏定义相关的知识,希望对你有一定的参考价值。
【1】C/C++ 中##(两个井号)和#(一个井号)
参考博客:https://www.cnblogs.com/devcjq/articles/2430700.html
## 连接符号由两个井号组成,其功能是在带参数的宏定义中将两个子串(token)联接起来,从而形成一个新的子串。但它不可以是第一个或者最后一个子串。
#符是把传递过来的参数当成字符串进行替代。
假设程序中已经定义了这样一个带参数的宏:
#define PRINT( n ) printf( "token" #n " = %d", token##n )
同时又定义了二个整形变量:
int token9 = 10;
现在在主程序中以下面的方式调用这个宏:
PRINT( 9 );
那么在编译时,上面的这句话被扩展为:
printf( "token" "9" " = %d", token9 );
最终输出为:token9 = 10
代码为:
#define PRINT(n) printf("variable"#n" is %d\\n",variable##n) int main() int variable1 = 4; PRINT(1); int variable2 = 6; PRINT(2); <<variable1 is 4 <<variable2 is 6
【2】可变输入参数个数
采用C语言编程的时候,函数中形式参数的数目通常是确定的,在调用时要依次给出与形式参数对应的所有实际参数。但在某些情况下希望函数的参数个数可以根据需要确定。典型的函数printf()、scanf()和系统调用execl()等
例子如下:
#include <stdarg.h> int demo(string msg, ...) va_list argp; int id = 0; int value; va_start(argp,msg);//获取msg后的参数,本质是一个指针而不是一个容器 while (true) value = va_arg(argp,int); if(value==0) break; printf("Parameter%d : %d\\n",id++,value); va_end(argp); return 0; int main() demo("TEST",5,4,3,2,1,0);//第一个参数只是一个标识,并不在参数表中。 getchar(); return 0;
以上是关于1. 宏定义的主要内容,如果未能解决你的问题,请参考以下文章