C 语言 关于 宏 中的 # 和 ## 基本知识

来源:互联网 发布:mysql update 日期 编辑:程序博客网 时间:2024/05/22 17:33
 
    今天看到一篇技术博文的时候,看到##和#,当时真的很无语阿又看到一个自己不知道的知识,呵呵呵~~
此处贴出来,顺便看看其用法:

第一:
     通俗来说:
     ##:就是连接两个参数
      :就是将参数转化为字符串
     
     话不多说,只看DEMO:
 
include<stdio>

#define  S1( s)      #s 
#define  S2( a, b)   int( a##e##b) 

int main() 

    printf(S1(12sd));               //!>输出字符串"12sd" 
    printf("%d\n ", S2( 1, 3));  //!>连接后的是2e3,但是输出:1000
    return 0;                            //!> 请注意:连接后的操作可以按照既定的方法处理,所以此处是1000
}

第二:
      当宏参数是另一个宏的时候需要注意的是凡宏定义里有用'#'或'##'的地方宏参数是不会再展开.
      看DEMO:
#include <stdio.h>
#define  NUM  2
#define  GO(a, b)   int( a##b )
int main()
{
       printf("%s\n", GO( NUM, NUM ));  //!> 由上面的法则可知此处的结果是NUMNUM,并不是22
}

需要增加一个中间处理转化:
#define  NUM   (2)
#define   _GO( a, b)   int ( a##b)     //!> 中间转化环节
#define   GO( a, b)   _GO( a, b )
       


原创粉丝点击