/*本程序时为了验证用宏来做
 * 两个数的大小比较的写法*/
#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

C语言宏定义取得两数的最大值和最小值的更多相关文章

  1. C 语言宏定义

    C 语言宏定义1.例子如下: #define PRINT_STR(s) printf("%s",s.c_str()) string str = "abcd"; ...

  2. 将C语言宏定义数值转换成字符串!

    将C语言宏定义转换成字符串! 摘自:https://blog.csdn.net/happen23/article/details/50602667 2016年01月28日 19:15:47 六个九十度 ...

  3. 宏定义(无参宏定义和带参宏定义),C语言宏定义详解

    1.宏定义说明 宏定义是比较常用的预处理指令,即使用"标识符"来表示"替换列表"中的内容.标识符称为宏名,在预处理过程中,预处理器会把源程序中所有宏名,替换成宏 ...

  4. C语言 宏定义之可变参数

    可变参数宏定义 C99编译器标准允许你可以定义可变参数宏(variadic macros),这样你就可以使用拥有可以变化的参数表的宏.可变参数宏就像下面这个样子: #define dbgprint(. ...

  5. C语言利用va_list、va_start、va_end、va_arg宏定义可变參数的函数

    在定义可变參数的函数之前,先来理解一下函数參数的传递原理: 1.函数參数是以栈这样的数据结构来存取的,在函数參数列表中,从右至左依次入栈. 2.參数的内存存放格式:參数的内存地址存放在内存的堆栈段中, ...

  6. c语言宏定义

    一. #define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能理解该命令的本质,总是在此处产生一些困惑,在编程时 ...

  7. C语言宏定义相关

    写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性 等等.下面列举一些成熟软件中常用得宏定义......1,防止一个头文件被重复包含#ifndef COMDEF_H# ...

  8. c语言宏定义#define的理解与资料整理

    1. 利用define来定义 数值宏常量 #define 宏定义是个演技非常高超的替身演员,但也会经常耍大牌的,所以我们用它要慎之又慎.它可以出现在代码的任何地方,从本行宏定义开始,以后的代码就就都认 ...

  9. C语言宏定义使用技巧

    写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性 等等.下面列举一些成熟软件中常用得宏定义...... 1.防止一个头文件被重复包含 #ifndef COMDEF_ ...

随机推荐

  1. 计算 MD5值

    // // MD5Value.h // iOSEdu // // Created by littest on 16/2/26. // Copyright © 2016年 littest. All ri ...

  2. LeetCode 319

    Bulb Switcher There are n bulbs that are initially off. You first turn on all the bulbs. Then, you t ...

  3. [需再总结]SSH整合代码生成器

    package cn.itcast.invoice.util.generator; import java.io.BufferedWriter; import java.io.File; import ...

  4. 转:Nginx RTMP 功能研究

    看点: 1.    Nginx 配置信息与使用.  (支持 rtmp与HLS配置) 2.    有ffmpeg 编译与使用,    命令行方式来测试验证客户端使用. 转自:http://blog.cs ...

  5. SDKInitializer.initialize报错求助

    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);     ...

  6. Ehcache(2.9.x) - API Developer Guide, Write-Through and Write-Behind Caches

    About Write-Through and Write-Behind Caches Write-through caching is a caching pattern where writes ...

  7. Servlet之创建与配置

    上篇已将介绍完了,下面来实践操作走一个: 首先在名为"com.caiduping"的包中创一个MyFilter的对象: 1 package com.caiduping; 2 3 i ...

  8. CentOS 7 下使用 Firewall

    在 CentOS 7 中,引入了一个新的服务,Firewalld,下面一张图,让大家明确的了解 Firewall 与 iptables 之间的关系与区别. 安装它,只需 yum install fir ...

  9. 从客户端中检测到有潜在危险的 request

    如题,当遇到这种情况该怎么办呢? 通常情况下一下2种解决方案就可以解决问题了:    解决方案一:     在.aspx文件头中加入这句:     <%@ Page validateReques ...

  10. NodeJS服务器退出:完成任务,优雅退出

    上一篇文章,我们通过一个简单的例子,学习了NodeJS中对客户端的请求(request)对象的解析和处理,整个文件共享的功能已经完成.但是,纵观整个过程,还有两个地方明显需要改进: 首先,不能共享完毕 ...