C语言有很多预编译关键字,如#if、#include、#else……,所有以#开头的的关键字都属于这一类,此处讨论#define关键字

#define的核心就是“替换”

如#define MAXLEN (int)20 语句,在代码中凡是遇到MAXLEN字符串都用,(int)20替换。如源代码中b

= c / MAXLEN;实际在预编译阶段将会把做替换编程,b = c / 20;来编译。

如下例代码:

[cpp:showcolumns]

·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150

#include

#define MAXLEN (int)20

#define MAX(a,b) ((a)>(b))?(a):(b)

#define MIN(a,b) (a

intmain(void)

{

inta[MAXLEN];

inti,maxvalue,minvalue;

srand(0x45623);

for(i = 0; i

printf("%d ",a[i] = rand());

maxvalue =minvalue = a[0];

for(i = 1; i

{

maxvalue = MAX(maxvalue, a[i]);

minvalue = MIN(minvalue , a[i]);

}

printf("/nMaxValue = %d/nMinValue = %d/n",maxvalue,minvalue);

return1;

}

例代码实现的是随机生成一组整形数,然后找出其中最大和最小值,最后打印出这组整形数和最大、最小值。

其中用了3个宏定义,分别定义了数组长度MAXLEN,两个数最大值计算MAX(a,b)和两个数最小值计算MIN(a,b)。

首先,说MAXLEN宏,定义了MAXLEN后,在数组定义、循环范围限定都用到了带来个方便,当某天想要把数组长度改成200、3000、50……时,只需要简单的修改MAXLEN宏定义就搞定了。还有一个功能就是解释说明作用,读代码的人看到这个宏马上就能明白这个地方是要说明数组的长度。

再来,看MAX宏,这是#define的另一个用法

宏函数,可以传递参数,但是它的核心还是替换,MAX(c,f)预编译后会成为((c)>(f))?(c):(f),当我们需要更改这个功能时,可以通过更改这个宏更改,不需要在用这个功能的地方一一修改,这样容易出错。

最后MIN宏,和MAX宏的区别是内部参数没有加小括号,这中情况可能在有些运算符优先级高低的情况下导致与编码者意图不一致的情况,如

#define MUL(a,b) a*b 当代码中这样用时,c =

MUL(2+3,2); 会出现错误,意图是 c = 10;而实际c =

8;这只是一个很简单的例子,在实际复杂的程序中,如果出现这种令人困惑的问题,会使人找N多时间的。

总结:

1、宏的实现核心是替换;

2、宏有解释说明作用;

3、宏函数(暂且这么叫)参数传递过程中需要注意运算优先级问题;

4、修改用宏定义实现的功能时,可以只修改一处,所有地方全部修改,不必每个用到这个功能的地方都过一遍,不容易出错;

4、在一个程序中,相同功能的宏最好只有一个,避免出现多个相同功能宏;

请多指教

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

  1. C语言宏定义取得两数的最大值和最小值

    /*本程序时为了验证用宏来做  * 两个数的大小比较的写法*/ #include<stdio.h> #define MAX(x,y) ((x)<(y)?(y):(x)) #defin ...

  2. C语言:输出一组数的最大值与最小值

    C语言:输出一组数中的最大值或最小值 如果要输出多个数的最大值只需更改数组大小与循环的限制条件即可 这里以三个数为例: 最大值 #include<stdio.h> int main() { ...

  3. C语言:定义一个函数max_min,求一组数据的最大值和最小值. 在主函数中输入n和n个数据,调用max_min函数求出最大最小值,然后在主函数中输出这n个数的最大值和最小值。(要求使用指针做)

    [问题描述]定义一个函数max_min,求一组数据的最大值和最小值. 在主函数中输入n和n个数据,调用max_min函数求出最大最小值,然后在主函数中输出这n个数的最大值和最小值.(要求使用指针做) ...

  4. 学C/C++想提升功底 可以花点时间看看这篇博客---C语言程序环境和预处理

    本篇博客介绍了C语言程序环境和预处理.主要包含程序的翻译和运行环境和 各种预处理操作:预定义符号.各种#define 用法 undef的使用条件编译的使用 头文件包含指令 C语言程序环境和预处理 一. ...

  5. 动态规划求编辑距离 - 残阳似血的博客

    动态规划求编辑距离 - 残阳似血的博客 动态规划求编辑距离 - 残阳似血的博客 动态规划求编辑距离 位于分类 自然语言处理 这两天在写一个简单的单词拼写检查器(Spell checker),本来求编辑 ...

  6. C语言基础知识之define宏定义表达式,undef,内存对齐,a和a的区别,数组知识点,int (*)[10] p,二维数组参数与二维指针参数,函数指针数组,常见的内存错误及对策

    一.用define宏定义表达式 1.定义一年有多少秒: #define SEC_A_YEAR 60*60*24*365 //上述描述不可靠,没有考虑到在16位系统下把这样一个数赋给整型变量的时候可能会 ...

  7. 关于C语言刷题(#define宏定义函数的常见错误)

    关于C语言刷题(#define宏定义函数的常见错误) 首先我们来先看对#define的定义 define,宏定义,C语言中预处理命令一种.分为无参宏定义和带参宏定义.无参宏定义的一般形式为:#defi ...

  8. 如何在CSDN博客自定义栏目中添加“给我写信”

    在"自定义栏目"中添加"连接"(将自己的微博,QQ空间和CSDN博客关联起来)很多人都做过.但是添加"给我写信"这个功能,用的好像不太多.此 ...

  9. 数组 ——求出一组数的最大值(用数组实现)

    题目:一个养鸡场有6只鸡,它们的体重分别是3kg,5kg,1kg,3.4kg,2kg,50kg .请问这六只鸡的总体重是多少?平均体重是多少? 请你编一个程序. #include <stdio. ...

最新文章

  1. Java中list.forEach方法的使用示例-根据key获取对应的value
  2. python queue 调试_python:如何创建用于调试的持久内存结构
  3. 利用JS实现点击上一周或下一周却换
  4. 一台微型计算机性能的主要参数及其意义,微型计算机的主要性能指标.ppt
  5. ubuntu12.04 php环境搭建,Ubuntu12.04筹建php开发环境
  6. MyEclipse下开发Web Service(转)
  7. 【每日算法Day 64】LeetCode 861. 翻转矩阵后的得分
  8. Arcgis字段计算器实现自动编码
  9. 尚硅谷IDEA常用快捷键-宋红康
  10. “对不起,我是用AI做的警察”
  11. 这些两轮电动车的黑科技你知道吗?
  12. Camtasia v2021.18汉化屏幕录像软件教程分享
  13. Deep Learning(深度学习)学习笔记整理
  14. Chrome浏览器更新
  15. html自动淡入淡出,纯css实现淡入淡出_html/css_WEB-ITnose
  16. CORR函数 看不明白
  17. 微商利用淘宝评价怎么引流?如何利用淘宝买低价产品刷评价引流?
  18. 关于CSS粘性定位——sticky
  19. Android语音控制录音APP——根据音量大小自动记录
  20. EPLMN in attach accept NAS signaling

热门文章

  1. Serializable接口
  2. 开发者欣慰:苹果表软件圣诞表现不错
  3. Python 之父谈 Python
  4. centos环境自动化批量安装软件脚本
  5. 【CSS3进阶】酷炫的3D旋转透视
  6. OSChina 周一乱弹 —— 程序员进阶之路
  7. WindML相关知识和图形设备驱动程序开发(一)
  8. (转)数据库设计范式深入浅出
  9. java list 截取部分数据_Java List.subList()方法:获取列表中指定范围的子列表
  10. html.partial mvc,MVC Html.Partial or Html.Action