C语言之 typedef和define的使用

c语言中typedef和define的使用

typedef和define的使用

##(一)typedef的使用
typedef,使你能够为某一个类型创建自己的别名。例如:

1
typedef unsigned char BYTE;

随后你就可以使用

1
2
3
4
5
6
BYTE x,y[10],*z;
```
###1、结合指针的用法
```c
tyoedef char *STRING;
STRING name,sign;

意思是

1
char * name,*sign;

###2、使用指针时和define的区别

1
2
#define STRING char *
STRING name,sign;

被解释为

1
char *name,sign;

第二个sign没有被设置为字符指针。

###3、typedef和结构
例:

1
2
3
4
typedef struct complex{
float real;
float imag;
} COMPLEXL;

这样就可以用COMPLEX代替struct complex来表示复数了。

##(二)define的使用

###1、define的通常用法

#define name stuff

每当有符号那么出现时在这条指令后面时,预处理器就会把它替换成stuff。

###2、使用#define可能出现副作用
#define机制包括了一个规定,允许把参数替换到文本中。
例如:

#define SQUARE(x)       x*x

如果在定义了之后使用SQUARE(5)结果是25;
但是如果使用

a=5;
printf("%d\n",SQUARE(a+1));

结果会是什么样呢??
也许你会说是36,可是真的是么???让我们分析一下。
define语句后出现SQUARE(x)的地方会被替换为x*x
在这个例子中a+1相当与x。所以此时愿意应为

printf("%d\n",a+1*a+1);

现在你感觉结果是多少呢?没错,是11.
当然解决这个问题也很简单,加上括号不就解决了么。

#define SQUARE(x)   (x)*(x)

而如果是

#define DOUBLE(x)  (x)+(x)

则需要写成

#define DOUBLE(x)   ((x)+(x))

道理一样。