C语言宏定义、宏替换
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语言宏定义、宏替换相关推荐
- c语言中定义宏的利与弊
在编写c文件时,我们都喜欢用宏来定义一些常量或者函数,这样增加了程序的可读性!但是我们有没有想过使用宏定义时可能出现问题呢?下面就简单举几例来说明宏定义的弊端! 例1: #define jia(m,n ...
- c语言 宏定义 宏用法
目录 #define 标识符 常量 1.#if系列用法 2.#ifdef用法 3.#ifndef用法 4.#error用法 #define 标识符 常量 C语言中,可以用 #define 定义 ...
- java中宏定义,宏定义的使用
C中的宏分为两类,对象宏(object-like macro)和函数宏(function-like macro). 预定义宏: 1.预定义宏的行为是由编译器指定的. 2.前后双下杠的一般都是预定义. ...
- C语言中宏定义宏编译的使用#if,#ifdef,#ifndef,#elif,#else,#endif,defined使用详解,可以实现和if else一样的效果
#define 定义一个预处理宏 #undef 取消宏的定义 #if 编译预处理中的条件命令,相当于C语法中的if语句 ...
- java define 宏_宏定义宏函数(日志输出)define
最常见的就是 #indef __cplusplus 这表示支持C++语法 再如可以定义常量 #define MAX 100 这跟JAVA全局变量有什么区别呢? JAVA的变量是有类型的,这没有类型,这 ...
- 宏定义宏函数 if else语句报错:error: ‘else’ without a previous ‘if’(看似解决实际上没解决)
代码 #include <stdio.h> #include <stdlib.h>#define ALOGE(...) { printf(__VA_ARGS__); print ...
- c语言宏定义替换字符串,C语言中,宏替换的替换规则
匿名用户 1级 2011-10-25 回答 简单来说:宏定义又称为宏代换.宏替换,简称"宏".是C提供的三种预处理功能的其中一种. 复杂的请看下面,讲的很全.下面的带参宏定义,多行 ...
- 【C语言进阶深度学习记录】十七 宏定义的使用与分析
文章目录 1 C语言中的宏定义 1.1 定义宏常量 1.2 宏定义表达式 1.3 宏表达式与函数的对比 1.4 宏表达式的作用域 2 C语言中的内置宏 3 宏定义的代码综合示例 4 总结 1 C语言中 ...
- C语言开发必会 宏定义、宏函数
文章目录 宏定义 宏函数 宏定义之闰年判断 宏定义 宏定义是C中三种预处理方式(宏定义.文件包含.条件编译)的一种,只做替换.不求解. 宏定义分为有参宏定义和无参宏定义两种.应特别注意有参宏定义的括号 ...
最新文章
- Remove PyPhantomJS. · f6c29b1 · ariya/phantomjs
- java 页面错误转发提示页面 errorPage转跳报HTTP500内部服务器错误
- php 文件扫描去重,PHP中的去重方法详解和文件下载
- PHP正则贪婪/懒惰匹配模式
- Angular Shadow Root DOM的一些API
- 动态切换数据库连接配置简单示例
- C#正则表达式——网游角色起名仅允许汉字、字母、数字、底划线
- Gradle 命令之 --stacktrace , --info , --debug 用法
- Android影院选座
- 单声道,立体声 ,功放驱动喇叭的功率选择,功放的适配(A类,B类。。),怎样测量音量信号--怎样不烧坏喇叭。
- 什么是PBR?pbr入门基础干货
- 随机手机号码_微信绑定了手机号码怎么解绑
- (转)iOS 上的相机捕捉
- 软件测试工作怎样修改本机IP,如何在命令行下更改IP地址
- shell几个基础问题(基础进阶)
- 代码文档生成工具Doxygen教程及实例
- Transaction silently rolled back because it has been marked as rollback-only Spring事务嵌套问题
- 我的第一篇博文——写下我的规划
- 阿里云sql task1 学习笔记
- 猎杀对决与服务器连接中断,猎杀对决游戏常见问题汇总_猎杀对决游戏常见问题解决办法...