点滴C学习之“#”和“##”使用

从今天开始,混子争取花少量时间都能够输出一个C语言小知识点,也是容易遗忘的知识点。卷起来吧,抓住碎片时间,日积月累!

今天分享的是常见的宏定义,最基础的用法都知道,就是两个字“替换”的作用,如
#define PI (3.1415) //后续程序使用3.1415926就直接使用PI替代......
下面介绍的是另外的用法

(#)的使用

代码例子:

#include"stdio.h"
#define USER_LEARN(str)  printf("The input string is : %s\n",#str)
void main()
{
    USER_LEARN( 那个混子 );
}

解释:
在这里是将宏定义中的传入参数名转换成用一对双引号括起来的参数名字符串。其只能用于有传入参数的宏,定义中,且必须置于宏定义体中的参数名前。
在上述代码中
USER_LEARN( 那个混子 );
相当于代码:printf("The input string is : %s\n","那个混子");

(##)的用法

#include"stdio.h"
#define ADD(str)  Date##str   //后面的str不能带括号
void main()
{
   int Date1 = 666;
   printf("The output is :%d\n0",ADD(1));

}

解释:##的使用就是拼接前后字符串
需要注释:

  • a. 当用##连接形参时,##前后的空格可有可无。
  • b. 连接后的实际参数名,必须为实际存在的参数名或是编译器已知的宏定义。
  • c.如果##后的参数本身也是一个宏的话,##会阻止这个宏的展开。
欢迎关注本人微信公众号:那个混子
记录自己学习的过程,分享乐趣、技术、想法、感悟、情感!

推荐阅读更多精彩内容