c语言宏定义放的位置,C语言宏定义技巧
出处:http://blog.chinaunix.net/uid-14022540-id-2849095.html
1.宏中"#"和"##"的用法
一、一般用法
我们使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起.
#include
#define CONS(a,b) ((int)(a##e##b))
#define STR(s) #s
intmain()
{
printf("%s",STR(ABC));
printf("%d",CONS(2,3));return 0;
}/*root@oucaijun:/work/dcc# gcc *.c; ./a.out
ABC
2000*/
二、当宏参数是另一个宏时: 需要注意的是凡宏定义里有用'#'或'##'的地方宏参数是不会再展开.
1,非'#'和'##'的情况,自然展开:
#define TOW (2)
#define MUL(a,b) (a*b)
printf("%d*%d=%d
", TOW, TOW, MUL(TOW,TOW));
这行的宏会被展开为:
printf("%d*%d=%d
", (2), (2), ((2)*(2)));
MUL里的参数TOW会被展开为(2).
2,当有'#'或'##'的时候,用'#'或'##'的地方宏参数不会再展开:
#define A
c语言宏定义放的位置,C语言宏定义技巧相关推荐
- c语言文件操作获取文件位置,C语言文件操作:获取文件内容
在 C Premier Plus 中看到一个文本处理程序,写的非常精妙,分析一下: #include #include // 要求在命令行中运行程序,并附带文件名作为参数 int main(int a ...
- 定义变量和常量的规范 c语言,C语言编程规范教材及练习(标识符命名与定义 变量 宏、常量 表的达式).pptx...
C语言编程规范教材及练习(标识符命名与定义 变量 宏.常量 表的达式) C语言编程规范教材C语言编程规范工作组 201104目录标识符命名与定义 变量宏.常量表达式标识符的命名要清晰原则3.1 标识符 ...
- [C语言] 在单片机的嵌入式开发中使用宏定义一键开关日志输出/打log调试
前言 在编写项目时,我们通常需要日志输出来帮助我们追踪程序执行的内容,以便在出现BUG时较为方便的复现,并在调试完成后快速的关闭过于详细的LOG输出,避免干扰使用中的体验,在函数中一个一个的增加pri ...
- c语言里宏定义算变量嘛,C语言宏定义的一些总结
较大的C语言项目都会用大量的宏定义来组织代码,比较经典的代码就是Linux Kernel的头文件中用的宏定义.看起来宏展开就是做个替换而已,其实里面有比较复杂的规则,有关宏展开的语法规则此小结力图整理 ...
- c语言 define宏名称if(参数),iOS深思篇 | 宏定义
一. 简介 宏是一种批量处理的称谓,简单来说就是根据定义好的规则替换一定的文本.替换过程在程序编译期,也因此大量使用宏会造成编译时间变长:而且替换过程不进行类型安全检查;还需要注意"边缘效应 ...
- 【C语言】宏定义(不带参数的宏定义和带参数的宏定义)
目录 一.不带参数的宏定义 1.定义 2.#undef 指令取消宏定义 二.带参数的宏定义 1.定义 2.宏定义参数替换的注意事项 三.带参数的宏定义和带参函数的区别 一.不带参数的宏定义 1.定义 ...
- c语言一维数组字符串数组初始化,一维数组的定义、初始化和引用
一维数组的定义.初始化和引用 一维数组的定义.初始化和引用 1.一维数组的定义方式为: 类型说明符 数组名[常量表达式] (1)数组名的命名方法与变量名相同,遵循标识符命名规则; (2)数组是用方括号 ...
- 汇编语言定义变量c,汇编c语言变量
广告 Apple iPad,AirPods Pro,Bose耳机,机械键盘,健身环等着您 由于c ++支持重载,因此可以使用相同的函数名称但不同的参数类型定义函数. 在编译期间,编译器根据函数的参数类 ...
- python定义字符串数组初始化_字符数组及其定义和初始化,C语言字符数组详解...
字符数组及其定义和初始化,C语言字符数组详解 字符串的存储方式有字符数组和字符指针,我们先来看看字符数组. 因为字符串是由多个字符组成的序列,所以要想存储一个字符串,可以先把它拆成一个个字符,然后分别 ...
最新文章
- 关于卷积神经网络的思考:将CNN视作泛函拟合
- 聊一聊:你都用什么方式回忆青春呢?
- session实现登录
- OpenGL中的上下文 理解整理
- mysql 5.5 重新编译_源码编译mysql5.5过程记录
- c#获取pdf文件页数
- [php]php设计模式 Facade(外观模式)
- 【HISI系列】之SDK编码器开发
- vnc服务器拼虚拟机,vnc连接虚拟机,7个步骤vnc连接虚拟机
- 数据结构与算法python—7.链表题目leetcode总结
- day3-python之函数初识(二)
- WebLogic简单的备份和恢复
- PyInstaller:编译exe与反编译
- 酷派android sdk,酷派彩客易SDK配置说明
- 携程四君子:中国最美创业故事
- 笔记本 关闭/开启 自带键盘
- 家用无线路由器服务器,家用无线路由器DHCP服务器配置方法
- pycharm显示全部数据_【数据可视化】BI工程师岗位分析
- 计算机 手机原理是什么,什么是手机投屏,手机投屏到电脑上的原理
- vs2017开发ActiveX(主讲OCX)(十一)、类向导中MFC ActiveX添加方法、添加函数、添加变量、添加事件、添加属性、添加方法的区别
热门文章
- W11或W10系统如何进行休眠?
- win10升级东芝NVME XG6 1T固态SSD,如何迁移系统(win10)-更换 m.2 NVME 系统迁移恢复
- .com和.cn域名的区别所在,各个域名后缀含义
- python实现火车票查询_Python脚本实现12306火车票查询系统
- 文件系统缓存,filesystem cache
- PCB layout有DRC为什么还要用CAM和DFM检查?
- 隔离系列 宽电压输入 正负高电压稳压输出 高压稳压电源模块
- 创新工场汪华:我的眼中AI的本质是自动化
- TBar:重新访问基于模板的自动程序修复
- matplotlib绘图函数简介