当前位置:  技术问答>linux和unix

这个#号干什么的?

    来源: 互联网  发布时间:2015-12-15

    本文导语:  我看《U N I X环境高级编程》第七章时看到这么条宏定义: #define doit(name) pr_limits(#name, name) 这里第二个#号是什么意思,请各位达人赐教 | 在标准C中,预处理语句,特别是宏定义中,常常...

我看《U N I X环境高级编程》第七章时看到这么条宏定义:
#define doit(name) pr_limits(#name, name)
这里第二个#号是什么意思,请各位达人赐教

|
在标准C中,预处理语句,特别是宏定义中,常常出现'#'和'##'符号 

'#'是`stringize'的意思。其后的变量将被用双引号包括的字符串替代。例:
#define display(x) show((long)(x), #x)
则display(abs(-5)); 将被替换为:show((long)(abs(-5)), "abs(-5)"); 注意有引号。


'##'是'token-paste'操作符。其后的变量将被与之前的字符串合并在一起形成一个新的token.例:
#define printvar(x) printf("%dn", variable##x)
则printvar(3);将被替换为printf("%dn", variable3); 
##仅仅合并字符串,而形成一个token,没有引号. 

给分是美德

|
看看这个简单的例子:
#include 

#define doit(name) test(#name, name)

#define TEST 1

int test(char* name, int val)
{
    printf("name = %sn", name);
    printf("value = %dn", val);
}

int main()
{
    doit(TEST);
}
[hua@localhost csdn]$ ./doit
name = TEST
value = 1

用cpp将doit.c预编译得到doit.i:
[hua@localhost csdn]$ cpp doit.c > doit.i
[hua@localhost csdn]$ cat doit.i
# 1 "doit.c"
# 1 ""
# 1 ""
# 1 "doit.c"




int test(char* name, int val)
{
    printf("name = %sn", name);
    printf("value = %dn", val);
}

int main()
{
    test("TEST", 1);
}

可以看到doit已经被函数替换, 并且一宏的名字作为test函数的参数。
在《U N I X环境高级编程》也这样一句话:
注意,在doit宏中使用了新的ANSI C字符串创建算符(#)

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 问题: 谁知道“报文摘要”是干什么用的?也就是说“DigestInputStream和DigestOutputStream”这两个流是干什么用的?
  • 菜鸟问题:./configure是干什么的?make install又是干什么的?
  • 请问各位mysql是什么,干什么用的?
  • 在fdisk分区命令使用中,活动分区是什么意思?活动分区是干什么用的?
  • applet class中的getAppletContext()和getAccessibleContext()都是干什么的?有什么用?
  • applet 除了学要jdk还学要什么。?jre干什么?
  • 通讯行业里的OSS(网管)系统是什么样系统啊?干什么用的?高分求解
  • anaconda-ks.cfg是什么文件,干什么用得?
  • 经常看见“驱动/文件系统在内核进行注册”,那么这个注册的动作是什么,干什么用呢?
  • 请问Float.NaN什么意思?拿来干什么用?麻烦举个例子说明
  • 问个问题: together6是用来干什么的?什么地方有下载?谁能详细说说?谢谢!
  • 为什么JBuilder写视窗程序的那个小窗口好像不怎么好用,他到底是干什么的?控件没有办法放上去,尺寸不对
  • usb驱动中的skel_draw_down干什么用的,还有anchor是什么东东
  • APUE初学者:请问dup,dup2函数可以用来干什么?有什么好处?
  • 请问编译器是干什么用的
  • Java中的虚拟方法virtual method是什么含义?拿来干什么用的?
  • 在邮件系统中LDAP是干什么用的? postfix是什么 ?那位能解释一下?
  • javaw.exe是干什么用的呀?
  • suse 系统的389端口是干什么用的
  • linux中unwind_init()是干什么的?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3