1、宏定义开关和debug printf

#define DEBUG_PRINT 1#ifdef DEBUG_PRINT
#define DEBUG(format, ...) printf("FILE: "__FILE__", LINE: %d: "format"\n", __LINE__, ##__VA_ARGS__)
#else
#define DEBUG(format, ...)
#endif

宏定义DEBUG(str) 只支持一个参数的替换

自C99规范以后,编译器就开始支持不定参数的宏定义
#define DEBUG(format, ...) printf("FILE: "__FILE__", LINE: %d: "format"\n", __LINE__, ##__VA_ARGS__)

注释1:##代表 如果可变参数被忽略或为空,将使得预处理器(perprocessor)会去掉它前面的那个逗号

注释2:ANSI C标准中有几个标准预定义宏,__FILE__ 文件名,__LINE___ 行号

2、宏定义使用异或交换两数

#define swap(a, b) do{ \(a) = (a) ^ (b); \(b) = (b) ^ (a); \(a) = (a) ^ (b); \}while(0);

注释1:异或,相同为0,不同为1;与0异或不变,与1异或相反;异或满足交换律

  1 #include <stdio.h>2 3 #define DEBUG_PRINT 14 5 #ifdef DEBUG_PRINT6 // 可变参数的宏定义替换7 // ##代表 如果可变参数为空,预处理器将去掉前面的逗号8 // 标准预定义宏 __FILE__文件名,__LINE__行号9 #define DEBUG(format, ...) printf("FILE: "__FILE__", LINE: %d: "format"\n", __LINE__, ##__VA_ARGS__)10 #else11 #define DEBUG(format, ...) 12 #endif13 14 #define swap(a, b) do{ \15         (a) = (a) ^ (b); \16         (b) = (b) ^ (a); \17         (a) = (a) ^ (b); \18         }while(0);19 20 void bubble_sort_min(int *a, int len);21 22 int main(int argc, char *argv[])23 {24         int array[] = {3,4,5,6,2,7,0};25         int len = sizeof(array) / sizeof(int);26         int i;27         DEBUG("before sort: ");28         for(i=0; i<len; i++)29                 DEBUG("%d ", array[i]);30         DEBUG("\n");31 32         bubble_sort_min(array, len);33 34         DEBUG("after sort: ");35         for(i=0; i<len; i++)36                 printf("%d ", array[i]);37         printf("\n");38         return 0;39 }40 41 void select_sort_min(int *a, int len)42 {43         int i, j;44 45         for(i=0; i<len-1; i++)46                 for(j=i+1; j<len; j++)47                 {48                         if(a[j] < a[i])49                                 swap(a[j], a[i]);50                 }51 52 }53 54 void bubble_sort_min(int *a, int len)55 {56         int i, j;57         for(i=0; i<len-1; i++)58                 for(j=0; j<len-1; j++)59                         if(a[j] > a[j+1])60                                 swap(a[j], a[j+1]);61 }

宏定义开关和debug printf,宏定义使用异或交换两数相关推荐

  1. C 预处理器 —— __DATE__ # __TIME__ # __FILE__ # __LINE__ # __STDC__ (预处理宏的使用 —— 打印debug信息:)

    预定义宏: ANSI C 定义了许多宏.在编程中您可以使用这些宏,但是不能直接修改这些预定义的宏. 宏    描述 __DATE__    当前日期,一个以 "MMM DD YYYY&quo ...

  2. c语言如何增加编译宏,C中的预编译宏定义

    在将一个C源程序转换为可执行程序的过程中, 编译预处理是最初的步骤. 这一步骤是由预处理器(preprocessor)来完成的. 在源流程序被编译器处理之前, 预处理器首先对源程序中的"宏( ...

  3. C/C++常用宏定义,注意事项,宏中#和##的用法

    总结下宏和函数的不同之处,以供大家写代码时使用,这段总结摘自<C和指针>一书. 当然宏定义非常重要的,它可以帮助我们防止出错,提高代码的可移植性和可读性等. 下面列举一些成熟软件中常用得宏 ...

  4. c语言宏定义比较三个数大小,C语言中两个宏进行大小对比,其中一个没有定义,这种行为如何定义。...

    1.C语言中两个宏进行大小对比,其中一个没有定义,这种行为如何定义呢? 在学习U-boot的过程中遇到这么一个定义: # if (CONFIG_ENV_ADDR >= CONFIG_SYS_MO ...

  5. c语言长度宏定义运算符,C语言在宏定义中使用语句表达式和预处理器运算符

    语句表达式的亮点在于定义复杂功能的宏.使用语句表达式来定义宏,不仅可以实现复杂的功能,而且还能避免宏定义带来的歧义和漏洞.下面以一个简单的最小值的宏为例子一步步说明. 1.灰常简单的么,使用条件运算符 ...

  6. c语言宏定义在预处理阶段,预处理和宏定义

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 宏定义 基本概念预处理部分: #include #define 放在函数之外,一般都放在源文档的前面 预处理由预处理进程 ...

  7. c语言 宏do while,关于C语言宏定义 使用do{ xxxx }while()

    暂时感觉像是由于":"的原因,关于使用习惯方面的问题!! 下面是copy的: 这样的宏见过么: Cpp代码 #define FOO(x) do {\ some_code_line_ ...

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

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

  9. java宏定义三目运算define_宏定义的正确写法,三目运算的宏定义

    摘要: 宏,分为两类: 1.对象宏(object-like macro) 对于对象宏来说确实相对简单,但却也不是那么简单 的查找替换 2.函数宏(function-like macro) 函数宏顾名思 ...

最新文章

  1. 电脑前面的插孔没声音怎么设置_手机没声音是怎么回事
  2. Linux服务器的架设 (DHCP,NIS,SAMBA,FTP,DNS)
  3. MySQL 字段约束 null, not null, default, auto_increment
  4. BI中事实表,维度表和数据集市,数据仓库的理解
  5. python生成器的使用_应该如何以及为什么使用Python生成器
  6. 二级公共基础知识_计算机二级选择题(公共基础知识)
  7. 华为怎么查看手机温度_如果你的华为手机拿去维修,记得打开这个功能,防止秘密被查看...
  8. 实例化vue发生了什么?(详解vue生命周期)
  9. windows性能监视器常用计数器
  10. 奇葩算法系列——猴子排序
  11. 数字电路硬件设计系列(十三)之HDMI电路设计
  12. 江湖救急1—win10系统读不出u盘
  13. react生命周期及hooks
  14. 基于Android平台的个人时间管理系统的设计与实现
  15. c语言三胞胎素数,四胞胎素数
  16. 2021-07-14树题目整理
  17. 人工智能数学基础-线性代数5:行列式求解线性方程组和拉普拉斯定理
  18. 联想笔记本怎么把f1到12设置正常
  19. 男性找女朋友最低会要求什么学历?
  20. 疯狂英语超级三最宝典

热门文章

  1. 死磕k8s之calico-nodeport
  2. CPU-MIC异构并行架构下基于大规模频繁子图挖掘的药物发现算法
  3. 软件测试,对于文件的上传下载,导入导出的操作的测试点
  4. android 淘宝天猫支付宝浏览器打开本地app传递参数打开应用内页
  5. 果蝇优化算法 C语言,果蝇优化算法(FOA)
  6. Python机器学习与实践——简介篇
  7. 更改触摸屏校准程序界面提示文字
  8. 徐州神舟计算机学校是大专还是中专,2017年徐州十大中专哪个好
  9. 百度地图开发:多边形覆盖物鼠标高亮效果和标签展示
  10. Uber 正在成为美团外卖,滴滴还有多远?