1.宏替换的格式

#define 名字 替换文本

后续所有出现名字的地方都将被替换为替换文本。

替换文本可以是任意的,例如

#define forever for(;;)    //无限循环

该语句为无限循环定义了一个新名字。

2.带参数的宏定义

宏定义可以带参数,这样可以对不同的宏调用使用不同的替换文本。例如,下列宏定义了一个宏max:

#define max(A,B) (A>B?A:B)

再例如,下列宏定义了一个可交换两个变量值的宏swap(参数t为数据类型):

#define swap(t,x,y)  {t z=x;x=y;y=z;}

代码示例:

#include<stdio.h>#define swap(t,x,y)   {t z=x;x=y;y=z;}int main(){int a=6,b=8;printf("%d %d\n",a,b);swap(int,a,b);printf("%d %d",a,b);return 0;
}

运行结果:

3.预处理运算法##

预处理运算法##为宏扩展提供了一种连接实际参数的手段。如果替换文本中的参数与##相邻,则该参数将被实际参数替换,##与前后的空白符将被删除。例如,下面定义的宏paste用于连接两个参数:

#define paste(front,back) front##back

调用paste(name,1)的结果为name1

4.取消宏定义

可以通过#undef指令取消名字的宏定义,例如:

#undef max

参考

《C程序设计语言》P76-77

C语言宏定义、宏替换相关推荐

  1. c语言中定义宏的利与弊

    在编写c文件时,我们都喜欢用宏来定义一些常量或者函数,这样增加了程序的可读性!但是我们有没有想过使用宏定义时可能出现问题呢?下面就简单举几例来说明宏定义的弊端! 例1: #define jia(m,n ...

  2. c语言 宏定义 宏用法

    目录 #define  标识符  常量 1.#if系列用法 2.#ifdef用法 3.#ifndef用法 4.#error用法 #define  标识符  常量 C语言中,可以用 #define 定义 ...

  3. java中宏定义,宏定义的使用

    C中的宏分为两类,对象宏(object-like macro)和函数宏(function-like macro). 预定义宏: 1.预定义宏的行为是由编译器指定的. 2.前后双下杠的一般都是预定义. ...

  4. C语言中宏定义宏编译的使用#if,#ifdef,#ifndef,#elif,#else,#endif,defined使用详解,可以实现和if else一样的效果

    #define            定义一个预处理宏 #undef            取消宏的定义 #if                   编译预处理中的条件命令,相当于C语法中的if语句 ...

  5. java define 宏_宏定义宏函数(日志输出)define

    最常见的就是 #indef __cplusplus 这表示支持C++语法 再如可以定义常量 #define MAX 100 这跟JAVA全局变量有什么区别呢? JAVA的变量是有类型的,这没有类型,这 ...

  6. 宏定义宏函数 if else语句报错:error: ‘else’ without a previous ‘if’(看似解决实际上没解决)

    代码 #include <stdio.h> #include <stdlib.h>#define ALOGE(...) { printf(__VA_ARGS__); print ...

  7. c语言宏定义替换字符串,C语言中,宏替换的替换规则

    匿名用户 1级 2011-10-25 回答 简单来说:宏定义又称为宏代换.宏替换,简称"宏".是C提供的三种预处理功能的其中一种. 复杂的请看下面,讲的很全.下面的带参宏定义,多行 ...

  8. 【C语言进阶深度学习记录】十七 宏定义的使用与分析

    文章目录 1 C语言中的宏定义 1.1 定义宏常量 1.2 宏定义表达式 1.3 宏表达式与函数的对比 1.4 宏表达式的作用域 2 C语言中的内置宏 3 宏定义的代码综合示例 4 总结 1 C语言中 ...

  9. C语言开发必会 宏定义、宏函数

    文章目录 宏定义 宏函数 宏定义之闰年判断 宏定义 宏定义是C中三种预处理方式(宏定义.文件包含.条件编译)的一种,只做替换.不求解. 宏定义分为有参宏定义和无参宏定义两种.应特别注意有参宏定义的括号 ...

最新文章

  1. Remove PyPhantomJS. · f6c29b1 · ariya/phantomjs
  2. java 页面错误转发提示页面 errorPage转跳报HTTP500内部服务器错误
  3. php 文件扫描去重,PHP中的去重方法详解和文件下载
  4. PHP正则贪婪/懒惰匹配模式
  5. Angular Shadow Root DOM的一些API
  6. 动态切换数据库连接配置简单示例
  7. C#正则表达式——网游角色起名仅允许汉字、字母、数字、底划线
  8. Gradle 命令之 --stacktrace , --info , --debug 用法
  9. Android影院选座
  10. 单声道,立体声 ,功放驱动喇叭的功率选择,功放的适配(A类,B类。。),怎样测量音量信号--怎样不烧坏喇叭。
  11. 什么是PBR?pbr入门基础干货
  12. 随机手机号码_微信绑定了手机号码怎么解绑
  13. (转)iOS 上的相机捕捉
  14. 软件测试工作怎样修改本机IP,如何在命令行下更改IP地址
  15. shell几个基础问题(基础进阶)
  16. 代码文档生成工具Doxygen教程及实例
  17. Transaction silently rolled back because it has been marked as rollback-only Spring事务嵌套问题
  18. 我的第一篇博文——写下我的规划
  19. 阿里云sql task1 学习笔记
  20. 猎杀对决与服务器连接中断,猎杀对决游戏常见问题汇总_猎杀对决游戏常见问题解决办法...

热门文章

  1. PHPExcel常用方法汇总
  2. 基于模板引擎的代码生成器Smart Code预览
  3. 【学习笔记】python - pyecharts
  4. 销售抬头文本配置方法
  5. 【转】物料与客户主数据的税分类
  6. SmartForms 小技巧
  7. Function ALV可编辑列修改数据后与与内表数据同步问题
  8. 如何配note,打补丁
  9. 存款人在哪些情况下应向开户银行提出撤销银行结算账户的申请?
  10. POPUP_TO_DECIDE_WITH_MESSAGE