-
作用不同:
#define
用于定义常量、简单的替换文本或宏函数。typedef
用于为已有的数据类型定义一个新的名字(别名)。
-
类型检查:
typedef
定义的类型名具有类型检查的功能,编译器会对使用该类型名的变量进行类型检查。#define
只是简单的文本替换,没有类型检查。
-
作用域:
typedef
遵循变量的作用域规则。#define
不受作用域的限制,从定义点开始直到文件结束都有效。
-
处理方式:
typedef
由编译器在编译时处理。#define
由预处理器在编译前进行文本替换处理。
以下是示例来说明它们的区别:
#include <stdio.h>
// #define 定义常量
#define PI 3.14159
// #define 定义宏函数
#define SQUARE(x) ((x) * (x))
// typedef 定义新的类型名
typedef int INT;
int main() {
// 使用 #define 定义的常量
double area = PI * 5 * 5;
printf("Area of the circle: %f\n", area);
// 使用 #define 定义的宏函数
int num = 10;
int square = SQUARE(num);
printf("Square of %d: %d\n", num, square);
// 使用 typedef 定义的新类型名
INT a = 100;
printf("Value of a: %d\n", a);
return 0;
}
在上述示例中,
可以看到 #define
用于创建常量和宏函数,而 typedef
用于创建新的数据类型别名。