c语言预处理指令之 ##
我们知道, #是预处理指令的第一个字符。但是##可以在预处理中作为粘合剂,可以将两个标识符沾合在一起,如果其中一个是宏操作数,“沾合”会在形式参数被相应的实际操作参数替换后发生。考虑下面的宏:
#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语言预处理指令之 ##相关推荐
- C语言预处理指令大全
C语言预处理指令 文章目录 C语言预处理指令 define 语法 Linux编译时指定宏的值及宏 删除已有的宏 C语言允许多参数的宏及宏函数 宏函数需要注意的事项 参数宏创建字符串 预处理粘合剂 li ...
- c语言编译预处理指令大全,C语言预处理指令
「今天是学习C语言第 32 天」 当你选择了一种语言,意味着你还选择了一组技术.一个社区.--Joshua Bloch # 预处理 C语言源程序先经过预处理器进行预处理,之后经过编译器编译成二进制可执 ...
- 学习笔记15-C语言-预处理指令、条件编译、头文件
预处理指令: 程序猿编写的代码不是标准C代码,并不能被真正的编译器索编译,需要一段程序把代码翻译一下. 翻译的过程叫做预处理,被翻译的代码叫做预处理指令,以#开头的都是预处理指令查看预处理的过程:gc ...
- C语言预处理指令#error
在FreeRTOS的FreeRTOS.h文件中看到一句代码 #ifndef configMINIMAL_STACK_SIZE#error Missing definition: configMIN ...
- C语言基础:预处理指令
本文基于一个简单的Simulink生成的代码,研究MBD中比较常见的一些预处理指令. 文章目录 1 C语言预处理指令 2 #include 3 #define 4 #ifndef...#endif 5 ...
- c语言预处理和连接区别,C语言预处理运算符
预处理还需要运算符?有没有搞错? ^_^, 没有搞错,预处理是有运算符,而且还不止一个: #(单井号) -- 字符串化运算符. ##(双井号 )-- 连接运算符 #@ ...
- 【C语言】07-预处理指令;-宏定义
预处理指令简介; 1,C在对源程序进行编译之前,会对一些特殊的预处理指令作解释,产生一个新的源程序,此过程叫做编译预处理.C在经过编译预处理之后才对新的源码进行通常的编译; 2,预处理以'#'开头,且 ...
- ios c语言头文件,iOS开发 -- C语言基础12(预处理指令)
iOS开发 -- C语言基础12(预处理指令) 宏定义 预处理指令简介 1.C语言在对源程序进行编译之前,会先对一些特殊的预处理指令作解释(比如之前使用的#include文件包含指令),产生一个新的源 ...
- c语言中预处理指令的作用,C语言中常用预处理指令
转载自 https://blog.csdn.net/farsight2009/article/details/58602886 姓名:张艳博 学号:17021223249 [嵌牛导读]: C语言中常用 ...
最新文章
- iPhone开发四剑客之《Objective-C基础教程》
- P3834 【模板】可持久化线段树 1(主席树)
- P1244 青蛙过河
- iOS开发 - App程序启动原理
- 【算法】Hash实现环形链表【LeetCode】
- hdoj2955 Robberies(01背包)
- 快捷笔记应用Side Notes Mac
- php disable-ipv6,強迫 PHP Curl 使用 IPv4 , 忽略 IPv6
- matlab重叠图像块拼接,在matlab中拼接图像时如何正确混合?
- Java项目:外卖订餐管理系统(java+SSM+JSP+jQuery+Ajax+mysql)
- 用Python实现一个简单的微信聊天机器人
- 《岛上书店》一本被高估的书
- html发送邮jmail,[分享]一个ASP写的JMAIL邮件发送测试程序,测试空间是否可以发送邮...
- BugKu CTF(杂项篇MISC)--Pokergame
- SEO引擎首页优化 - 2016百度搜索引擎算法
- 树莓派python摄像头文字识别_古德微树莓派摄像头文字识别
- 物联网智能家居系统解决方案
- Excel长串数字显示异常,如2E+13
- 计算机教室英语手抄报,关于教室的英语手抄报,英语手抄报简单又清楚?
- 数据结构笔记:选择排序
热门文章
- poj 2421 Constructing Roads
- (转)[EntLib]微软企业库5.0 学习之路——第十步、使用Unity解耦你的系统—PART2——了解Unity的使用方法(1)...
- 【数据结构与算法】之深入解析Base64编码的实现原理
- OpenGL ES之3D渲染旋转的贴图立方体
- Python数据类型判断常遇到的坑
- 《数据库原理与应用》(第三版) 第7章 索引和视图 基础 习题参考答案
- 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1095:数1的个数
- PaddlePaddle训练营——公开课——AI核心技术掌握——第1章迈入现代人工智能的大门——深度学习的基础算法——反向传播算法简介
- Java面向对象(三)Static
- 【Linux网络编程】TCP网络编程中connect()、listen()和accept()三者之间的关系