c语言define用法举例

Python018

c语言define用法举例,第1张

C语言中#define用法总结:

1、简单的宏定义

#define标识符替换列表(替换列表可以是数,字符串字面量,标点符号,运算符,标识符,关键字,字符常量。注意:替换列表是可以为空的)。

典型错误:

#define N =100

int a[N];/*这样会成为int a[=100],这里会处理成为一种标识记号一样*/

#define N 100

int a[N]/*带分号的定义会成为int a[100;],这是一种很常见的错误*/

#define pin(int*)

pin a,b;

int* a,b;/*本意是a和b都是int型指针,但是实际上变成int* a,b;a是int型指针,而b是int型变量。这是应该使用typedef来代替define,这样a和b就都是int型指针了。*/

2、带参数的宏

#define标识符(x1,x2,x3...xn) 替换列表 (注意:x1,x2,x3..是宏的参数,标识符和其左括弧之间不能有空格)

使用方法:

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

i=MAX(j+k,m-n);

3、宏的特殊单行定义

#define A(x) T_##x

#define B(x) #@x

#define C(x) #x

x=1

替换为:

A(1)------>T_1 (T_##x,##符号是记号粘黏符号,将前后的字符粘黏起来。)

B(1)------>'1' ( #@x , #@ 符号会将宏的参数进行字符串字面量化,并且加‘’号)

C(1)------>"1" ( #x ,#符号会将宏的参数进行字符串字面量化,并且加""号)

4、define的多行定义

define可以替代多行的代码,在每一个换行的时候加上一个"\"

#define MAX(X,Y) do { \

语句1\

语句2\

/* 注释的写法 */ \

} while(0) /* (no trailing ) */ \

1、简单的define定义#define MAXTIME 1000

一个简单的MAXTIME就定义好了,它代表1000,如果在程序里面写if(i<MAXTIME){.........}

编译器在处理这个代码之前会对MAXTIME进行处理替换为1000。

这样的定义看起来类似于普通的常量定义CONST,但也有着不同,因为define的定义更像是简单的文本替换,而不是作为一个量来使用,这个问题在下面反映的尤为突出。

2、define的“函数定义”

define可以像函数那样接受一些参数,#define max(x,y) (x)>(y)?(x):(y);

这个定义就将返回两个数中较大的那个,看到了吗?因为这个“函数”没有类型检查,就好像一个函数模板似的,当然,它绝对没有模板那么安全就是了。可以作为一个简单的模板来使用而已。

C语言中无参宏定义的一般形式:

#define 宏名 字符串,其中的“#”表示这是一条预处理命令。凡是以“#”开头的均为预处理命令。“define”为宏定义命令。“标识符”为所定义的宏名。“字符串”可以是常数、表达式、格式串等。

例如: #define M (a+b) 它的作用是指定标识符M来代替表达式(a+b)。在编写源程序时,所有的(a+b)都可由M代替,而对源程序作编译时,将先由预处理程序进行宏代换,即用(a+b)表达式去置换所有的宏名M,然后再进行编译。