我们知道, #是预处理指令的第一个字符。但是##可以在预处理中作为粘合剂,可以将两个标识符沾合在一起,如果其中一个是宏操作数,“沾合”会在形式参数被相应的实际操作参数替换后发生。考虑下面的宏:

#define MK_ID(n) i##n

当MK_ID(比如MK_ID(1))被调用时,预处理器首先使用实际参数替换形式参数n。接着,预处理器把 i 和1合并为1个记号(标识符)i1下面的声明使用MK_ID创建了3个标识符:

int MK_ID(1),MK_ID(2),MK_ID(3)

预处理器把这一声明变为:

int i1,i2,i3;
#include <stdio.h>
/*下面是带参数的宏定义,参数是type,先执行参数替换,然后检测到有##执行沾合*/
#define GENERIC_MAX(type) \type type##_max(type x,type y) \{return x>y?x:y; }/*展开后为: float float_max(float x,float y){return  x > y ? x : y; }  */
GENERIC_MAX(float);
/*同上*/
GENERIC_MAX(int);
/*同上*/
GENERIC_MAX(unsigned);
/*同上*/
GENERIC_MAX(double);
/*同上*/
GENERIC_MAX(char);//上面的代码,相当于定义了5个函数,分别是
//float float_max(float ,float )
//......
int main()
{
printf("%lf",float_max(1,2));return 0;
}

c语言预处理指令之 ##相关推荐

  1. C语言预处理指令大全

    C语言预处理指令 文章目录 C语言预处理指令 define 语法 Linux编译时指定宏的值及宏 删除已有的宏 C语言允许多参数的宏及宏函数 宏函数需要注意的事项 参数宏创建字符串 预处理粘合剂 li ...

  2. c语言编译预处理指令大全,C语言预处理指令

    「今天是学习C语言第 32 天」 当你选择了一种语言,意味着你还选择了一组技术.一个社区.--Joshua Bloch # 预处理 C语言源程序先经过预处理器进行预处理,之后经过编译器编译成二进制可执 ...

  3. 学习笔记15-C语言-预处理指令、条件编译、头文件

    预处理指令: 程序猿编写的代码不是标准C代码,并不能被真正的编译器索编译,需要一段程序把代码翻译一下. 翻译的过程叫做预处理,被翻译的代码叫做预处理指令,以#开头的都是预处理指令查看预处理的过程:gc ...

  4. C语言预处理指令#error

      在FreeRTOS的FreeRTOS.h文件中看到一句代码 #ifndef configMINIMAL_STACK_SIZE#error Missing definition: configMIN ...

  5. C语言基础:预处理指令

    本文基于一个简单的Simulink生成的代码,研究MBD中比较常见的一些预处理指令. 文章目录 1 C语言预处理指令 2 #include 3 #define 4 #ifndef...#endif 5 ...

  6. c语言预处理和连接区别,C语言预处理运算符

    预处理还需要运算符?有没有搞错? ^_^, 没有搞错,预处理是有运算符,而且还不止一个: #(单井号)    -- 字符串化运算符. ##(双井号 )-- 连接运算符 #@               ...

  7. 【C语言】07-预处理指令;-宏定义

    预处理指令简介; 1,C在对源程序进行编译之前,会对一些特殊的预处理指令作解释,产生一个新的源程序,此过程叫做编译预处理.C在经过编译预处理之后才对新的源码进行通常的编译; 2,预处理以'#'开头,且 ...

  8. ios c语言头文件,iOS开发 -- C语言基础12(预处理指令)

    iOS开发 -- C语言基础12(预处理指令) 宏定义 预处理指令简介 1.C语言在对源程序进行编译之前,会先对一些特殊的预处理指令作解释(比如之前使用的#include文件包含指令),产生一个新的源 ...

  9. c语言中预处理指令的作用,C语言中常用预处理指令

    转载自 https://blog.csdn.net/farsight2009/article/details/58602886 姓名:张艳博 学号:17021223249 [嵌牛导读]: C语言中常用 ...

最新文章

  1. iPhone开发四剑客之《Objective-C基础教程》
  2. P3834 【模板】可持久化线段树 1(主席树)
  3. P1244 青蛙过河
  4. iOS开发 - App程序启动原理
  5. 【算法】Hash实现环形链表【LeetCode】
  6. hdoj2955 Robberies(01背包)
  7. 快捷笔记应用Side Notes Mac
  8. php disable-ipv6,強迫 PHP Curl 使用 IPv4 , 忽略 IPv6
  9. matlab重叠图像块拼接,在matlab中拼接图像时如何正确混合?
  10. Java项目:外卖订餐管理系统(java+SSM+JSP+jQuery+Ajax+mysql)
  11. 用Python实现一个简单的微信聊天机器人
  12. 《岛上书店》一本被高估的书
  13. html发送邮jmail,[分享]一个ASP写的JMAIL邮件发送测试程序,测试空间是否可以发送邮...
  14. BugKu CTF(杂项篇MISC)--Pokergame
  15. SEO引擎首页优化 - 2016百度搜索引擎算法
  16. 树莓派python摄像头文字识别_古德微树莓派摄像头文字识别
  17. 物联网智能家居系统解决方案
  18. Excel长串数字显示异常,如2E+13
  19. 计算机教室英语手抄报,关于教室的英语手抄报,英语手抄报简单又清楚?
  20. 数据结构笔记:选择排序

热门文章

  1. poj 2421 Constructing Roads
  2. (转)[EntLib]微软企业库5.0 学习之路——第十步、使用Unity解耦你的系统—PART2——了解Unity的使用方法(1)...
  3. 【数据结构与算法】之深入解析Base64编码的实现原理
  4. OpenGL ES之3D渲染旋转的贴图立方体
  5. Python数据类型判断常遇到的坑
  6. 《数据库原理与应用》(第三版) 第7章 索引和视图 基础 习题参考答案
  7. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1095:数1的个数
  8. PaddlePaddle训练营——公开课——AI核心技术掌握——第1章迈入现代人工智能的大门——深度学习的基础算法——反向传播算法简介
  9. Java面向对象(三)Static
  10. 【Linux网络编程】TCP网络编程中connect()、listen()和accept()三者之间的关系