关于C语言宏定义的技巧:'#'和'##'
程序员文章站
2022-03-25 16:30:06
关于C语言宏定义的技巧:' '和' ' ' '和' ' ' '和' '是两个预处理运算符,只能在预处理的过程中使用。在带参数的宏定义中, ' ' 运算符后面应该跟一个参数,预处理器会把这个参数转换为一个字符串。 ' ' 运算符被称为记号连接运算符,比如我们可以使用 连接两个参数。 可变参数 带参数的 ......
关于c语言宏定义的技巧:'#'和'##'
'#'和'##'
'#'和'##'是两个预处理运算符,只能在预处理的过程中使用。在带参数的宏定义中,
-
'#'运算符后面应该跟一个参数,预处理器会把这个参数转换为一个字符串。
-
'##'运算符被称为记号连接运算符,比如我们可以使用##连接两个参数。
可变参数
带参数的宏定义也是可以使用可变参数的;
#define showlist(...) printf(# __va_args__)
其中...
表示使用可变参数,__va_args__
在于处理中被实际的参数集所替换。
#可以这样用
#include<stdio.h> #define str(s) # s //str 就是定义的宏 ,# 运算符会将 s 变为字符串的形式 int main(void){ // printf("%s\n",str(this is my time.)); printf(str(hellow %s num = %d\n),str(this is my life.),520); //若传入的字符串中含有多个空格,输出时只会输出一个空格 return 0; }
##可以这样用:
#include<stdio.h> #define together(x,y) x ## y int main(void){ printf("%d\n",together(13,14)); printf("%d\n",together(5,20)); return 0; }
可变参数可以这样用:
#include<stdio.h> #define showlist(...) printf(# __va_args__) int main(void){ showlist(i love it,123456,3.14159,bdsakjhdfc\n); return 0; }
可变参数也可以是空参数:
#include<stdio.h> #define printf(format,...) printf(# format,## __va_args__) int main(void){ printf(num = %d\n,520); printf(hellow world!!!\n); return 0; }
上一篇: go 基础
推荐阅读
-
关于C语言中i++和++i的区别以及printf输出的一些问题。
-
c语言:sizeof的使用,其不是函数,是一个操作符关键字,定义一个数组arr,输出arr和&arr的区别
-
C语言: 输入一批正整数(以零或负数为结束标志),求其中的奇数和。要求定义和调用函数int even(int n)判断整数n的奇偶性,当为奇数时返回1,否则返回0。
-
C语言利用va_list、va_start、va_end、va_arg宏定义可变参数的函数
-
C语言——变量的定义和初始化
-
C语言-数组的定义、初始化和使用
-
关于C语言中 || 和 &&的用法实例
-
C++中关于宏定义的讲解
-
C语言结构体数组的定义和使用详解
-
C语言:写一个宏可以将一个数字的奇数位和偶数位交换