问一个关于 # 和 ## 的问题

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
请问应该怎么样做?
...全文
100 9 打赏 收藏 转发到动态 举报
写回复
用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++来做
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lbh2001 的回复:]
宏在预处理阶段执行,不能取得编译时变量的值
不知你这样做的意图
要实现的话,写个函数实现吧
[/Quote]
up
lbh2001 2008-09-23
  • 打赏
  • 举报
回复
宏在预处理阶段执行,不能取得编译时变量的值
不知你这样做的意图
要实现的话,写个函数实现吧

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧