将C语言宏定义数值转换成字符串!
将C语言宏定义转换成字符串!
摘自:https://blog.csdn.net/happen23/article/details/50602667
适用场景举例
流媒体处理系统中,采样率是个很重要的参数,很多地方都要用,如果用来分配内存,则
#define SAMPLE_RATE 16000
如果用来配置第三方库,则
#define SAMPLE_RATE "16000"
这样每次改采样率都要改两处地方,容易遗漏
网上搜到第一篇文章,匆忙试了试,并未达到我想要的效果,然后在GNU的官网找到了第二篇文章,看懂了,原来第一篇文章的技巧(也是翻译第二篇文章的)仅适用于宏函数的场景
还好天无绝人之路,第二篇文章末尾3段,讲述了实现我想要效果的方法,就是二级stringfication
- #include <stdio.h>
- #define SAMPLE_RATE 16000
- #define STR1(R) #R
- #define STR2(R) STR1(R)
- int main()
- {
- printf("sample rate = " STR2(SAMPLE_RATE) "\n");
- return 0;
- }
运行输出
sample rate = 16000
注意:
二级stringfication会将宏定义原样输出,即,如果16000加上括弧(有经验的程序员都懂),则STR2输出的也是带括弧的字符串,这通常不是你想要的
可以这样绕过:
给SAMPLE_RATE定义一个别名,并给别名加上括弧,在需要整型时用别名,在需要字符串时用原名
- #include <stdio.h>
- #define SAMPLE_RATE_CONFIG 16000
- #define SAMPLE_RATE (SAMPLE_RATE_CONFIG)
- #define STR1(R) #R
- #define STR2(R) STR1(R)
- int main()
- {
- printf("sample rate = %d\n", SAMPLE_RATE);
- printf("sample rate config = %s\n", STR2(SAMPLE_RATE_CONFIG));
- return 0;
- }
运行输出
sample rate = 16000
sample rate config = 16000
将C语言宏定义数值转换成字符串!的更多相关文章
- 特现C语言编程特点的小代码,itoa,数值转换成字符串
#define BASE_MAX (26 + 10) char const* itostr(int x, int base) { /* map 居中, 支技负余数 */ static char con ...
- c语言宏定义
一. #define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能理解该命令的本质,总是在此处产生一些困惑,在编程时 ...
- C语言宏定义#define用法
#define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能 理解该命令的本质,总是在此处产生一些困惑,在编程时误用 ...
- c语言宏定义详解
1,防止一个头文件被重复包含 #ifndef COMDEF_H #define COMDEF_H //头文件内容 #endif 2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数 ...
- C 语言宏定义
C 语言宏定义1.例子如下: #define PRINT_STR(s) printf("%s",s.c_str()) string str = "abcd"; ...
- C# 数字转换成汉字大写 数值转换成汉字大写
1.数字转换成汉字大写 public string NumToChinese(string x) { //数字转换为中文后的数组 //转载请注明来自 http://www.shang11.com st ...
- 2407: C语言习题 整数转换成字符串
2407: C语言习题 整数转换成字符串 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 917 Solved: 416[Submit][Status] ...
- C语言 宏定义之可变参数
可变参数宏定义 C99编译器标准允许你可以定义可变参数宏(variadic macros),这样你就可以使用拥有可以变化的参数表的宏.可变参数宏就像下面这个样子: #define dbgprint(. ...
- 将文件大小数值转换成B、KB、MB、GB
//delphi 将文件大小数值转换成B/KB/MB/GB function FormatByteSize(const bytes: Longint): string; const B = 1; // ...
随机推荐
- CSS层叠样式
为了让网页元素的样式更加丰富,也为了让网页的内容和样式能拆分开,CSS由此思想而诞生,CSS是 Cascading Style Sheets 的首字母缩写,意思是层叠样式表.有了CSS,html中大部 ...
- mysql数据库的维护,备份和复制
在数据库运行时维护数据库 执行mysql数据库维护的方法之一就是连接mysql服务器,并告诉它做什么事, 如对myisam数据表进行检查或者修复, 可以使用check table tbname或rep ...
- CAShapeLayer 画直线
// from StackOverflow CAShapeLayer *layer = [CAShapeLayer layer]; UIBezierPath *linePath = [UIBezier ...
- 程序员教程-9章-C程序设计
目录结构: 9.1 C语言基础 9.1.1 数据类型 1 基本数据类型 2 数组.字符数组与字符串 3 枚举类型 4 结构体.共用体和typedef 9.1.2 运算符与表达式 9.1.3 输入/输出 ...
- oc NSLog输出格式大全
本文的内容是总结了一下iOS开发中NSLog输出格式大全,虽然比较基础,但有总结毕竟会各位正在学习iOS开发的朋友们一些小小的帮助. %@ 对象 %d, %i ...
- TEXT 15 A text a day...
TEXT 15 A text a day... Mar 24th 2006 From The Economist print edition The medical uses of mobile ph ...
- WAL 【转】
重做日志:每当有操作执行前,将数据真正更改时,先前相关操作写入重做日志.这样当断电,或者一些意外,导致后续任务无法完成时,系统恢复后,可以继续完成这些更改 撤消日志:当一些更改在执行一半时,发生意外, ...
- 复习:使用HTML编写简单程序
今天我试着用HTML编写了九九乘法表 代码如下 浏览器显示如下 2.输出静夜思 代码如下 2.浏览器显示
- VMware-克隆机,网卡修改
1.克隆 2.修改网卡eth1为eth0 -persistent-net.rules 3.配置ip vim /etc/sysconfig/network-scripts/ifcfg-etho 4.修改 ...
- CentOS6.5下安装ActiveMQ
1.下载ActiveMQ [root@localhost softwares]# wget http://archive.apache.org/dist/activemq/apache-activem ...