文章目录

c语言中的#和##

由 adtxl 发布

作者:guanjianhe
链接:https://www.jianshu.com/p/6e112f3911ec
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本文主要讲述c语言中#和##的用法

#的作用

  • 将右边的参数做整体的字符串替换。
  • 对于#的参数,即便是另一个宏,也不展开,仍然作为字符串字面信息输出。
#include<stdio.h>

#define dprint(expr) printf(#expr"=%d\n",expr);

int main()
{
    int a=20,b=10;
    dprint(a/b);
    return 0;
}

/*
   输出:a/b=2
 */

##的作用

  • 将左右两边的参数做整体的字符串拼接替换。
  • 同#,对于##的参数,即便是另一个宏,也不展开,仍然作为字符串字面信息输出。
  • 经过##替换后的内容必须能够作为一个合法的变量。
#define f(a,b) a##b
则
f(1,2) 替换拼接成12
f(i,1) 替换拼接称i1

以上f(i,1) 中,如果程序中没有i1的定义,则即便是通过了宏替换,也不能编译通过。

#include <stdio.h>

#define f(a,b) a##b
#define g(a)  #a
#define h(a) g(a)

int main()
{
    int a2=3;
    //printf("%s\n",f(a,2));错误,没有a2的字符串变量 
    printf("%d\n",f(a,2));//正确
    printf("%s\n", h(f(1,2)));
    printf("%s\n", g(f(1,2)));
    return 0;
}

/*输出
3
12
f(1,2)
*/

暂无评论

发表评论