宏define

Q:写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个

A: #define MIN(A,B)  ((A) <= (B) ?(A):(B))  

这个测试为这些目的而设:

1).标识#define在宏中应用的基本知识.直到嵌入(inline)操作符变为标准C 的一部分.是方便产生嵌入代码的唯一方法.对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法.

2).三重条件操作符的知识.这个操作符存在C语言中的原因是它使得编译器能产生比if-then-else更优化的代码.了解这个用法很重要的.

3).懂得在宏中小心地把参数用括号括起来

4).我也用这个问题开始讨论宏的副作用,例如:当你写下面的代码时会发生什么事?

least = MIN(*p++, b);



Q:求最大值

A: #define  MAX( x, y ) ( ((x) > (y)) ? (x) : (y) )

Q:将一个字母转换为大写

A: #define  UPCASE( c ) ( ((c) >= ‘a‘ && (c) <= ‘z‘) ? ((c) - 0x20) : (c) );

Q:判断字符是不是10/16进值的数字

A: #define  DECCHK( c ) ((c) >= ‘0‘ && (c) <= ‘9‘)

A: #define  HEXCHK( c ) ( ((c) >= ‘0‘ && (c) <= ‘9‘) ||\

((c) >= ‘A‘ && (c) <= ‘F‘) ||\

((c) >= ‘a‘ && (c) <= ‘f‘) )

Q:返回数组元素的个数

A: #define  ARR_SIZE( a )  ( sizeof( (a) ) / sizeof( (a[0]) ) )



#define

命令#define定义了一个标识符及一个串。在源程序中每次遇到该标识符时,均以定义的串代换它。ANSI标准将标识符定义为宏名,将替换过程称为宏替换。命令的一般形式为:

#define identifier string

注意:

? 该语句没有分号。在标识符和串之间可以有任意个空格,串一旦开始,仅由一新行结束

? 宏名定义后,即可成为其它宏名定义中的一部分

? 宏替换仅仅是以文本串代替宏标识符,前提是宏标识符必须独立的识别出来,否则不进行替换

例如: #define XYZ

this is a test,使用宏printf("XYZ");//该段不打印"this is a test"而打印"XYZ".因为预编译器识别出的是"XYZ"

? 如果串长于一行,可以在该行末尾用一反斜杠‘ \‘续行



宏define

时间: 2024-08-01 22:14:14

宏define的相关文章

iOS 宏(define)与常量(const)的正确使用

在iOS开发中,经常用到宏定义,或用const修饰一些数据类型,经常有开发者不知怎么正确使用,导致项目中乱用宏与const修饰你能区分下面的吗?知道什么时候用吗?#define HSCoder @"汉斯哈哈哈"NSString *HSCoder = @"汉斯哈哈哈";extern NSString *HSCoder;extern const NSString *HSCoder;static const NSString *HSCoder = @"汉斯哈哈哈

C/C++中慎用宏(#define)

宏的定义在程序中是非常有用的,但是使用不当,就会给自身造成很大的困扰.通常这种困扰为:宏使用在计算方面. 本例子主要是在宏的计算方面,很多时候,大家都知道定义一个计算的宏,对于编译和编程是多么的有用.现在定义有以下一个计算 "乘法" 的宏. #include <stdio.h> #define MUL(a) ((a)*(a)*(a)) int main(int argc,char *argv[]) { int i = 10; int sum = MUL(i); printf

iOS 常用到的宏#define

//AppDelegate #define APPDELEGATE [(AppDelegate*)[UIApplication sharedApplication] delegate] //----------------------系统设备相关---------------------------- //获取设备屏幕尺寸 #define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width) #define SCREEN_HEIGHT ([

【转】iOS 宏(define)与常量(const)的正确使用-- 不错

原文网址:http://www.jianshu.com/p/f83335e036b5 在iOS开发中,经常用到宏定义,或用const修饰一些数据类型,经常有开发者不知怎么正确使用,导致项目中乱用宏与const修饰 你能区分下面的吗?知道什么时候用吗? #define HSCoder @"汉斯哈哈哈" NSString *HSCoder = @"汉斯哈哈哈"; extern NSString *HSCoder; extern const NSString *HSCod

操作构造字符串化宏#define STRINGIZE(x) #x

c++test工程单元测试中报错 “STRINGIZE” 未定义错误 解决方案:在头文件定义宏STRINGIZE #符号把一个符号直接转换为字符串,例如:#define STRINGIZE(x) #xconst char *str = STRINGIZE( test_string ); str的内容就是"test_string",也就是说#会把其后的符号直接加上双引号.##符号会连接两个符号,从而产生新的符号(词法层次),例如:#define SIGN( x ) INT_##x int

宏(define)与常量(const) 和 枚举(enum)的使用

宏:只是在预处理器里进行文本替换,没有类型,不做任何类型检查,编译器可以对相同的字符串进行优化.只保存一份到 .rodata 段.甚至有相同后缀的字符串也可以优化,你可以用GCC 编译测试,"Hello world" 与 "world" 两个字符串,只存储前面一个.取的时候只需要给前面和中间的地址,如果是整形.浮点型会有多份拷贝,但这些数写在指令中.占的只是代码段而已,大量用宏会导致二进制文件变大.并且,当我们定义的宏名字有冲突时,编译器不会发出警告.造成覆盖后不得

c++中的宏 #define _CLASSDEF(name) class name

1 #include <iostream> 2 using namespace std; 3 #define _CLASSDEF(name) class name; 4 typedef name * P##name; 5 typedef name & R##name; 6 typedef name * & RP##name; 7 typedef const name * PC##name; 8 typedef const name & RC##name 9 _CLASS

typedef 类型重命名 和 #define 宏定义(1)

http://www.blogjava.net/jasmine214--love/archive/2010/11/29/339307.html 在现实生活中,信息的概念可能是长度,数量和面积等.在C语言中,信息被抽象为int.float和double等基本数据类型.从基本数据类型名称上, 不能够看出其所代表的物理属性,并且int.float和double为系统关键字,不可以修改.为了解决用户自定义数据类型名称的需求,C语言中引入类 型重定义语句typedef,可以为数据类型定义新的类型名称,从而

&lt;28&gt;【了解】10-枚举类型介绍及定义+【掌握】11-枚举变量变量定义和使用+【掌握】13-typedef定义新的类型+【掌握】15-宏的概念及无参宏定义方法+【掌握】16-有参宏定义和使用方法+【掌握】17-应用:使用有参宏求最大值+【掌握】18-typedef和#define的区别

[了解]10-枚举类型介绍及定义 枚举类型: C语言提供了一个种类型,这种类型的变量的取值被限定在一定的范围之内了 枚举类型的定义: enum 枚举类型名{ 枚举值1,枚举值2,.... }; 举例: 定义一个变量,保存一周的第几天 enum weekday{ zhouyi,zhouer,zhousan,zhousi,zhouwu ,zhouliu,zhouri }; 定义iPhone手机的颜色 关于枚举类型元素的命名习惯 enum iColor{kIcolorWhite,kIcolorBlac