博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
将C语言宏定义转换成字符串!
阅读量:4222 次
发布时间:2019-05-26

本文共 1038 字,大约阅读时间需要 3 分钟。

适用场景举例

流媒体处理系统中,采样率是个很重要的参数,很多地方都要用,如果用来分配内存,则

#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

--------------------- 

作者:六个九十度 
来源:CSDN 
原文:https://blog.csdn.net/happen23/article/details/50602667 
版权声明:本文为博主原创文章,转载请附上博文链接!

 

你可能感兴趣的文章
建模论文写作
查看>>
双向链表实现队列的 入队、出队、查找元素
查看>>
牛客网错题总结
查看>>
编译过程的五个阶段
查看>>
Linux系统中的fork()函数详解
查看>>
TCP/IP总结
查看>>
WireShark使用教程
查看>>
UDP总结
查看>>
在C++中,为了让某个类只能通过new来创建实例(即如果直接创建对象,编译器将报错),怎样做?
查看>>
C++常见面试题30道
查看>>
为什么不能建立引用数组?
查看>>
Union的一个知识点
查看>>
基类析构函数为虚函数的研究
查看>>
函数入栈出栈以及栈帧
查看>>
从RTTI谈C++的向下转型
查看>>
面试心得(BAT)
查看>>
变量初始化规则以及声明和定义
查看>>
深入C++中构造函数、拷贝构造函数、赋值操作符、析构函数的调用过程总结
查看>>
C++中复制构造函数和重载赋值操作符总结
查看>>
C++中对象的赋值与复制操作详细解析
查看>>