printf中#号的意思

<div id="blogContent" class="text-article">
<p>#进行宏字符串连接,<span style="color: #ff0000;">在宏中</span>
把参数解释为字符串,不可以在语句中直接使用。</p>
<p>在宏定义中</p>
<p>printf("%s;/n", #S) 会被解释为</p>
<p>printf("%s;/n", "S")</p>
<p>例如下面的代码</p>
<p> <span style="color: #ff0000;">code start</span>
</p>
<p>#define TRACE(S) (printf("%s;/n", #S), S) /*注意用逗号而不是分号*/</p>
<p> <br>
#include <stdio.h></p>
<p>#include <stdlib.h></p>
<p>#include <string.h></p>
<p> <br>
int main(){</p>
<p> int a=5;</p>
<p> int b=TRACE(a);</p>
<p> const char *str="hello";</p>
<p> char des[50];</p>
<p> strcpy(des,TRACE(str));</p>
<p> puts(des);</p>
<p> system("pause");</p>
<p> return 0;</p>
<p>}</p>
<p> <span style="color: #ff0000;">code end</span>
</p>
<p>输出结果为:</p>
<p>a;</p>
<p>str;</p>
<p>hello</p>
<p>同时宏定义又是一个<a href="http://blog.renren.com/blog/222277385/727594788" target="_blank">逗号表达式</a>
,所以拷贝到des里面的值为后面S也就是str的值。</p>
<p></p>
<p>又比如下面的解释:</p>
<p> <span>3</span>
<span>.宏的单行定义(少见用法) </span>
</p>
<p> <span></span>
<span>#define</span>
<span> A(x) T_##x</span>
<span> </span>
</p>
<p> <span>#define</span>
<span> B(x) #@x</span>
<span> </span>
</p>
<p> <span>#define</span>
<span> C(x) #x</span>
<span> </span>
</p>
<p> <span>我们假设:x</span>
<span>=</span>
<span>1</span>
<span>,则有: </span>
</p>
<p> <span> A(</span>
<span>1</span>
<span>)</span>
<span>------</span>
<span>〉T_1 </span>
</p>
<p> <span> B(</span>
<span>1</span>
<span>)</span>
<span>------</span>
<span>〉</span>
<span>'</span>
<span>1</span>
<span>'</span>
<span> </span>
</p>
<p> <span>C(</span>
<span>1</span>
<span>)</span>
<span>------</span>
<span>〉</span>
<span>"</span>
<span>1</span>
<span>"</span>
</p>
</div>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值