社区
C语言
帖子详情
问一个关于 # 和 ## 的问题
zhangyiheng
2008-09-23 11:27:56
#define RTP_NAME "rtp"
#define DEV_NAME(prefix, minor) \
(prefix # minor)
当我输入
int minor = 0;
char *rtp0 = DEV_NAME(RTP_NAME, minor)
printf("rtp 0 = %s\n", rtp0);
后结果变成 rtp 0 = rtpminor
我想要的结果是 rtp 0 = rtp0
请问应该怎么样做?
...全文
133
9
打赏
收藏
问一个关于 # 和 ## 的问题
#define RTP_NAME "rtp" #define DEV_NAME(prefix, minor) \ (prefix # minor) 当我输入 int minor = 0; char *rtp0 = DEV_NAME(RTP_NAME, minor) printf("rtp 0 = %s\n", rtp0); 后结果变成 rtp 0 = rtpminor 我想要的结果是 rtp 0 = rtp0 请问应该怎么样做?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
devil_zuiai
2008-09-24
打赏
举报
回复
好像用宏定义达不到楼主想要的要求啊。
bayuan0414
2008-09-24
打赏
举报
回复
至于#arg这种结构被预处理器翻译成"arg"。
如:
#define PRINT(FORMAT,VALUE) \
printf("The value of " #VALUE \
" is " FORMAT "\n",VALUE)
使用这个宏,如
PRINT("%d",x+3);
则输出
The value of x+3 is 25
bayuan0414
2008-09-24
打赏
举报
回复
应该这样表述
##把位于它两边的符号连接成一个符号。但这种连接必须产生一个合法的标识符
bayuan0414
2008-09-24
打赏
举报
回复
##是连接左右两边的字符串成为一个字符串
once_and_again
2008-09-24
打赏
举报
回复
# 是拼接吗?
catamout
2008-09-24
打赏
举报
回复
不会啊 我用VC++ 可以得到你想要的结果啊
#include <stdio.h>
#define RTP_NAME "rtp"
#define DEV_NAME(prefix,minor) prefix#minor
void main()
{
// char minor = "0";
int minor = 0;
char *rtp0 = DEV_NAME(RTP_NAME,0);
printf("rtp0 = %s\n",rtp0);
}
不过第一次我也是得到 rtp0 = rtpminor;
但是后来有可以了 你在试试
我有个例子是从书上看到的 可能对你有用
#define stringer(n) printf(#n"\n")
则 stringer(text) <==> printf("text""\n") <==>printf("text\n")
”#“字符化或数字标记操作符,在宏定义中,把宏参数转化成字符常数,这个操作符只能用在有特定参数或者、参数列表的宏中
zhangyiheng
2008-09-23
打赏
举报
回复
写个函数返回字符串更麻烦, 如果在栈上分配么, 就会出现访问越界; 如果在堆上分配么, 就会有内存泄露。写驱动程序又不能用C++来做
青葱岁月不可追
2008-09-23
打赏
举报
回复
[Quote=引用 1 楼 lbh2001 的回复:]
宏在预处理阶段执行,不能取得编译时变量的值
不知你这样做的意图
要实现的话,写个函数实现吧
[/Quote]
up
lbh2001
2008-09-23
打赏
举报
回复
宏在预处理阶段执行,不能取得编译时变量的值
不知你这样做的意图
要实现的话,写个函数实现吧
#和##的用法
简介 C语言中经常用到 # 和 ##, 很多初学者不知道他们什么什么意思, 这儿我简单科普一下. #的用法 当做 replacement-text令牌, 转换为引号引起来的字符串 ... #define TO_STR(x) #x int main() { int value = 123; printf("TO_STR(value) = %s\n", TO_STR(value)); printf("TO_STR(123) = %s\n", TO_STR(value)); }
C++中#(
一个
#号)和##(两个#号)的用法和作用
1 C++中#(
一个
#号)和##(两个#号)的用法和作用 1 关于
一个
#号: 在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作, 简单说就是对他所引用的宏变量通过替换后再其左右各加上
一个
双引用。 例子: # define WARNIF(EXP) \ do{ \ if (EXP) \ { \ fprintf(stderr, "warning:" #EXP "\n"); \ } \ }while(0) 在实际使用中会出现下...
宏#和##
#和##这两个宏在项目中见到,所以特意记录一些笔记下来,方便以后查看! 宏# #是把其左边的参数字符串化,其实就是为其加上了"",例如: #define _STR(x) #x //为x加上"" std::cout<<_STR(abc); 当我们打印后,输出:abc 如果传入的是字符串: std::cout<<_STR("abc"); 那么输出的是带...
C++中的#,##,和"
本文主页链接:C++中的#,##,和" 想要灵活应用宏,离不开#和##。 " 在学习#和##之前,先来看
一个
关于"的例子: [cpp] view plain copy #include #include int main() { const char* p1 = "Hell
C++ 中 # 和 ## 的使用
# 和 ## 在宏定义(define)中经常可以看到,是预编译过程中的常用语句,本文记录了本人探索 # 和 ## 区别以及使用的内容 先简单的将这两个符号进行标签化,然后再记录具体实验。 # -- 转换, 完成代码到字符串的转换 ## -- 连接, 完成代码的连接 示例: 1. # 转换代码为字符串 ```cpp #define CONVERT(name) #name int ...
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章