Linux __stringify && __stringify_1
2017-03-08 10:54
169 查看
Linux中有个stringify的头文件,里面主要的内容如下:
里面有两个define,依照注释看的不太明白。为什么中间要通过__stringify_1转换一下呢?直接使用#define __stringify(x...) #x岂不是更加简洁?
编程测试一下:
运行的结果如下:
stringify(AAA): BBB
stringify_src(AAA): AAA
然后回过头来看注释,就一清二楚了。
不过注释里有这一句“Doing two levels allows the parameter to be a macro itself.”
该怎么理解呢?
如果在#define AAA BBB之前再定义一个#define BBB CCC,#define CCC DDD ......,这个程序运行的结果如何呢?
呵呵,大家可以尝试一下。
#ifndef __LINUX_STRINGIFY_H #define __LINUX_STRINGIFY_H /* Indirect stringification. Doing two levels allows the parameter to be a * macro itself. For example, compile with -DFOO=bar, __stringify(FOO) * converts to "bar". */ #define __stringify_1(x...) #x #define __stringify(x...) __stringify_1(x) #endif /* !__LINUX_STRINGIFY_H */
里面有两个define,依照注释看的不太明白。为什么中间要通过__stringify_1转换一下呢?直接使用#define __stringify(x...) #x岂不是更加简洁?
编程测试一下:
#include <stdio.h> #define AAA BBB #define __stringify_1(x...) #x #define __stringify(x...) __stringify_1(x) #define __stringify_src(x...) #x main() { printf("stringify(AAA): %s\n", __stringify(AAA)); printf("stringify_src(AAA): %s\n",__stringify_src(AAA)); }
运行的结果如下:
stringify(AAA): BBB
stringify_src(AAA): AAA
然后回过头来看注释,就一清二楚了。
不过注释里有这一句“Doing two levels allows the parameter to be a macro itself.”
该怎么理解呢?
如果在#define AAA BBB之前再定义一个#define BBB CCC,#define CCC DDD ......,这个程序运行的结果如何呢?
呵呵,大家可以尝试一下。
相关文章推荐
- JSON.stringify&JSON.parse、表单序列化
- JSON.parse&JSON.stringify
- linux系统中的“ __stringify() ”宏定义 详解
- Linux中关于函数__stringify(x)
- linux中关于函数__stringify(x)
- <Linux+Qt>char*,QString,String类型的相互转换
- JSON.stringify && JSON.parse
- linux内核源码分析——linux/stringify.h
- 【cocos2d-x 报错异常集】运行安卓虚拟机的时候出现了emulator: ERROR: Can't find 'Linux version ' string in kernel image fi
- linux 小问题&解决办法集锦
- 《Linux PowerPC详解》勘误3
- cpp如何快速安全地将文件读入字符串string或字符数组vector<string>的方法
- ARM&LINUX学习笔记(5)-----ADS建立工程
- Linux&VMware&vBox&虚拟化技术资料汇总
- Linux 笔记 #01# 搭建 Python 环境 & vim 代码高亮
- Linux 下录制和播放 声音, record & play audio in linux
- Linux线程的实现 & LinuxThread vs. NPTL & 用户级内核级线程 & 线程与信号处理
- 【Linux配置】:ruijie配置 & eclipse cdt 安装 & grub改变选择菜单等待时间
- JSON.stringify函数(JavaScript)
- Linux 判断32或64位的方法,适用于Ubuntu & Mac