/*本程序时为了验证用宏来做
 * 两个数的大小比较的写法*/
#include<stdio.h>
#define MAX(x,y) ((x)<(y)?(y):(x))
#define MIN(X,Y) ({\
 typeof (X) x_ = (X);\
 typeof (Y) y_ = (Y);\
 (x_ < y_) ? x_ : y_; })
/*({...})的作用是将内部的几条语句中最后一条的值返回,它也允许在内部声明变量(因为它通过大括号组成了一个局部Scope)*/
int foo(int *flag);
int foo(int *flag)
{
 *flag = *flag + 3;
 return *flag;
}
int main()
{
 int a=3,b=5,c;
 c = MAX(b,foo(&a));
 printf("a,b,c=%d,%d,%d\n",a,b,c);
 /*此时a=9,b=5,c=9,调用MIN看是否a的值再加2次*/
 c = MIN(b,foo(&a));
 printf("a,b,c=%d,%d,%d\n",a,b,c);
 return 0;
}
/*运行结果:
 *  [root@bogon c_study]# ./hong_max_min
 *  a,b,c=9,5,9
 *  a,b,c=12,5,5
 *证明MIN的写法才是正确的*/

参考链接:http://blog.csdn.net/jk110333/article/details/8021231

转载于:https://www.cnblogs.com/followyourdream/p/3368504.html

C语言宏定义取得两数的最大值和最小值相关推荐

  1. c语言求n个数的最小值博客,C语言中的#define宏定义 求一组数的最大值和最小值(转)...

    C语言有很多预编译关键字,如#if.#include.#else--,所有以#开头的的关键字都属于这一类,此处讨论#define关键字 #define的核心就是"替换" 如#def ...

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

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

  3. C语言宏定义、宏函数、内置宏与常用宏

    前言: 在C语言中,变量类型.循环控制.基础语法等与其他高级语言基本无异:而C语言(C++)特有的两把双刃剑指针和宏定义/宏函数使得C语言在底层开发中披荆斩棘.无所不能.这两个概念涉及范围比较广,其分 ...

  4. c语言中#39;xd#39;代表什么,关于C语言宏定义的技巧:#39;##39;和#39;###39;

    关于C语言宏定义的技巧:'#'和'##' '#'和'##' '#'和'##'是两个预处理运算符,只能在预处理的过程中使用.在带参数的宏定义中, '#'运算符后面应该跟一个参数,预处理器会把这个参数转换 ...

  5. C/C++语言宏定义##连接符和符#的使用

    C/C++语言宏定义##连接符和符#的使用     [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/53113187 (一) ...

  6. c语言宏定义技巧和用法,关于C语言宏定义的技巧:'#'和'##'

    关于C语言宏定义的技巧:'#'和'##' '#'和'##' '#'和'##'是两个预处理运算符,只能在预处理的过程中使用.在带参数的宏定义中, '#'运算符后面应该跟一个参数,预处理器会把这个参数转换 ...

  7. c语言宏定义(c语言宏定义是什么意思)

    C语言宏定义名可以有括号和分号吗? 宏定义的名称,是C语言标识符的一种,和函数名,变量名的命名规则是一样的,只允许使用数字,字母,下划线,且不能以数字开头. 所以宏名是不可以有括号和分号的. 另外,在 ...

  8. 宏定义 指针 c语言,C语言宏定义讲解(C和指针 笔记)

    关于C语言宏定义#define 最常用的莫过于通过宏定义定义常数了,例如 #define MAX 1000      通过宏定义程序中需要的常量,方便维护被多次引用的变量,并且宏替换在预处理阶段完成, ...

  9. c语言宏定义的连接符##和#转字符串

    c语言宏定义的连接符有哪些 [此问题的推荐答案] (一)宏定义中的## 连接符与# 符 ## 连接符号由两个井号组成,其功能是在带参数的宏定义中将两个子串(token)联接起来,从而形成一个新的子串. ...

最新文章

  1. p40 升级鸿蒙,等了这么久,我的P40终于可以升级鸿蒙系统了
  2. 2019年前端的3个趋势
  3. PyTorch多卡分布式训练:DistributedDataParallel (DDP) 简要分析
  4. struts2,jsp,freemarker编程小技巧
  5. XmlAttribute与实体的转换和匹配方案(附源码)
  6. python 利用栈实现复杂计算器
  7. tftp命令linux,tftp命令使用详解
  8. 威富通对账单下载并且解析为对象列表展示
  9. 爬虫---数据的提取
  10. 1068 万绿丛中一点红(JAVA)
  11. 我乐网关停1月套牢2亿风投
  12. 新南威语言班C加,【干货来了】新南威尔士大学UEEC语言班 你了解多少?
  13. 核心交换机链路聚合、冗余、堆叠、热备份
  14. gRPC快速入门(三)——Protobuf应用示例
  15. sql盲注 各种方法拿到 管理员账户和密码
  16. WIN10 共享 访问WIN7提示 出现“你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问
  17. HTML5期末大作业:海绵宝宝相关人物介绍
  18. 孕妇不能吃哪些食物?(协和妇产权威版)
  19. java集成微信发送模板消息
  20. 【TJOI2017】可乐

热门文章

  1. 求二叉树中两个节点的最远距离
  2. java中定义一个CloneUtil 工具类
  3. 项目中CI缓存适配器的使用
  4. 2013 ACM/ICPC Asia Regional Changsha Online - C
  5. Magento安装后无法访问
  6. 虚拟机四种网络连接模式比较
  7. openfire服务器
  8. pvrect r语言 聚类_R语言实现KEGG通路富集可视化
  9. [译] Bounds Check Elimination 边界检查消除
  10. Django,Ajax,Vue实现文章评论功能