#define
#define
#define
#define 用法集锦
用法集锦
用法集锦
用法集锦 [
[
[
[ 修正版
修正版
修正版
修正版 ]
]
]
]
Definition
Definition
Definition
Definition [
[
[
[ 定义
定义
定义
定义 ]
]
]
] :
:
:
:
The #define Directive
You can use the #define directive to give a meaningful name to a
constant in your program. The two forms of the syntax are:
Syntax
#define identifier token-stringopt
#define identifier[( identifieropt, ... , identifieropt )] token-stringopt
Usage
Usage
Usage
Usage [
[
[
[ 用法
用法
用法
用法 ]
]
]
] :
:
:
:
1.
1.
1.
1. 简单的 define
define
define
define 定义
#define MAXTIME 1000
一个简单的 MAXTIME 就定义好了,它代表 1000 ,如果在程序里面写
if(i<MAXTIME){.........}
编译器在处理这个代码之前会对 MAXTIME 进行处理替换为 1000 。
这样的定义看起来类似于普通的常量定义 CONST , 但也有着不同 , 因为 define 的定义更像是简单的文本
替换,而不是作为一个量来使用,这个问题在下面反映的尤为突出。
2.define
2.define
2.define
2.define 的 “
“
“
“ 函数定义 ”
”
”
”
define 可以像函数那样接受一些参数,如下
#define max(x,y) (x)>(y)?(x):(y);
这个定义就将返回两个数中较大的那个,看到了吗?因为这个 “ 函数 ” 没有类型检查,就好像一个函数模
板似的,当然,它绝对没有模板那么安全就是了。可以作为一个简单的模板来使用而已。
但是这样做的话存在隐患,例子如下:
#define Add(a,b) a+b;
在一般使用的时候是没有问题的 , 但是如果遇到如 : c * Add(a,b) * d 的时候就会出现问题 , 代数式的本意
是 a+b 然后去和 c , d 相乘 , 但是因为使用了 define ( 它只是一个简单的替换 ) , 所以式子实际上变成 了
c*a + b*d
另外举一个例子:
#define pin (int*);
pin a,b;
本意是 a 和 b 都是 int 型指针,但是实际上变成 int* a,b;
a 是 int 型指针,而 b 是 int 型变量。
这是应该使用 typedef 来代替 define ,这样 a 和 b 就都是 int 型指针了。
所以我们在定义的时候,养成一个良好的习惯,建议所有的层次都要加括号。
评论5