一.宏定义(2) --# 、#@ 和## 操作等

2        # 、#@ 和##  操作

# :将宏参数字串化(只在有参数的时候用到)

如:

 

#define PRINTF_OP(x)   printf(#x"is %d\n", (x) );

Code:

       int i=10;

       int j=2;  

       PRINTF_OP(20);

       PRINTF_OP(i/j);

那么将输出:

 

## :将## 前后的连接两个字串(可以不是参数)定义为一个标识符,可用于简化一些操作,比如防止命名冲突之类的。

 

#define PRINTF_OP2(k,n)   printf("PRINTF_OP2"#k#n" is %d\n", k##n);

#define PRINTF_OP3()   printf("PRINTF_OP3k1 is %d\n", k##1 );

Code:

       intk1=20;

       intk2=40;    

       PRINTF_OP2(k,1);

       PRINTF_OP2(k,2);

       PRINTF_OP3();

输出:

 


#@:将宏参数字符(只在有参数的时候用到)

#definePRINTF_OP4(x)   printf("PRINTF_OP4 is  %d  %c\n",x ,#@x );

 

PRINTF_OP4(3);

 

输出:

              PRINTF_OP4  is  3  3


3        老生常谈#define 和typedef

宏替换只作替换,不做计算,不做表达式求解 , 而typedef不是简单替换 ,而是采用如同定义变量的方法那样来声明为一种类型。

 

#defineint_ptr int *

int_ptra, b; //相当于int * a, b;只是简单的宏替换

 

你或许会高高兴兴的认为a , b 都是指针,但是事实只是a是指针,而b只是一个int类型的数据。

typedefint* int_ptr;

int_ptra, b; //a, b 都为指向int的指针,typedef为int* 引入了一个新的助记符

这个才真正的达到了你想要的结果。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值