出处: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语言宏定义技巧相关推荐

  1. c语言文件操作获取文件位置,C语言文件操作:获取文件内容

    在 C Premier Plus 中看到一个文本处理程序,写的非常精妙,分析一下: #include #include // 要求在命令行中运行程序,并附带文件名作为参数 int main(int a ...

  2. 定义变量和常量的规范 c语言,C语言编程规范教材及练习(标识符命名与定义 变量 宏、常量 表的达式).pptx...

    C语言编程规范教材及练习(标识符命名与定义 变量 宏.常量 表的达式) C语言编程规范教材C语言编程规范工作组 201104目录标识符命名与定义 变量宏.常量表达式标识符的命名要清晰原则3.1 标识符 ...

  3. [C语言] 在单片机的嵌入式开发中使用宏定义一键开关日志输出/打log调试

    前言 在编写项目时,我们通常需要日志输出来帮助我们追踪程序执行的内容,以便在出现BUG时较为方便的复现,并在调试完成后快速的关闭过于详细的LOG输出,避免干扰使用中的体验,在函数中一个一个的增加pri ...

  4. c语言里宏定义算变量嘛,C语言宏定义的一些总结

    较大的C语言项目都会用大量的宏定义来组织代码,比较经典的代码就是Linux Kernel的头文件中用的宏定义.看起来宏展开就是做个替换而已,其实里面有比较复杂的规则,有关宏展开的语法规则此小结力图整理 ...

  5. c语言 define宏名称if(参数),iOS深思篇 | 宏定义

    一. 简介 宏是一种批量处理的称谓,简单来说就是根据定义好的规则替换一定的文本.替换过程在程序编译期,也因此大量使用宏会造成编译时间变长:而且替换过程不进行类型安全检查;还需要注意"边缘效应 ...

  6. 【C语言】宏定义(不带参数的宏定义和带参数的宏定义)

    目录 一.不带参数的宏定义 1.定义 2.#undef 指令取消宏定义 二.带参数的宏定义 1.定义 2.宏定义参数替换的注意事项 三.带参数的宏定义和带参函数的区别 一.不带参数的宏定义 1.定义 ...

  7. c语言一维数组字符串数组初始化,一维数组的定义、初始化和引用

    一维数组的定义.初始化和引用 一维数组的定义.初始化和引用 1.一维数组的定义方式为: 类型说明符 数组名[常量表达式] (1)数组名的命名方法与变量名相同,遵循标识符命名规则; (2)数组是用方括号 ...

  8. 汇编语言定义变量c,汇编c语言变量

    广告 Apple iPad,AirPods Pro,Bose耳机,机械键盘,健身环等着您 由于c ++支持重载,因此可以使用相同的函数名称但不同的参数类型定义函数. 在编译期间,编译器根据函数的参数类 ...

  9. python定义字符串数组初始化_字符数组及其定义和初始化,C语言字符数组详解...

    字符数组及其定义和初始化,C语言字符数组详解 字符串的存储方式有字符数组和字符指针,我们先来看看字符数组. 因为字符串是由多个字符组成的序列,所以要想存储一个字符串,可以先把它拆成一个个字符,然后分别 ...

最新文章

  1. 关于卷积神经网络的思考:将CNN视作泛函拟合
  2. 聊一聊:你都用什么方式回忆青春呢?
  3. session实现登录
  4. OpenGL中的上下文 理解整理
  5. mysql 5.5 重新编译_源码编译mysql5.5过程记录
  6. c#获取pdf文件页数
  7. [php]php设计模式 Facade(外观模式)
  8. 【HISI系列】之SDK编码器开发
  9. vnc服务器拼虚拟机,vnc连接虚拟机,7个步骤vnc连接虚拟机
  10. 数据结构与算法python—7.链表题目leetcode总结
  11. day3-python之函数初识(二)
  12. WebLogic简单的备份和恢复
  13. PyInstaller:编译exe与反编译
  14. 酷派android sdk,酷派彩客易SDK配置说明
  15. 携程四君子:中国最美创业故事
  16. 笔记本 关闭/开启 自带键盘
  17. 家用无线路由器服务器,家用无线路由器DHCP服务器配置方法
  18. pycharm显示全部数据_【数据可视化】BI工程师岗位分析
  19. 计算机 手机原理是什么,什么是手机投屏,手机投屏到电脑上的原理
  20. vs2017开发ActiveX(主讲OCX)(十一)、类向导中MFC ActiveX添加方法、添加函数、添加变量、添加事件、添加属性、添加方法的区别

热门文章

  1. W11或W10系统如何进行休眠?
  2. win10升级东芝NVME XG6 1T固态SSD,如何迁移系统(win10)-更换 m.2 NVME 系统迁移恢复
  3. .com和.cn域名的区别所在,各个域名后缀含义
  4. python实现火车票查询_Python脚本实现12306火车票查询系统
  5. 文件系统缓存,filesystem cache
  6. PCB layout有DRC为什么还要用CAM和DFM检查?
  7. 隔离系列 宽电压输入 正负高电压稳压输出 高压稳压电源模块
  8. 创新工场汪华:我的眼中AI的本质是自动化
  9. TBar:重新访问基于模板的自动程序修复
  10. matplotlib绘图函数简介