typedef与define区别

摘自网络,用于自己记录学习。

在 C 语言中,typedefdefine 都可以用来定义别名或者宏,但是它们有一些重要的区别,具体如下:

  1. 基本语法
  • typedef 的基本语法:
typedef type alias;

其中,type 是一个数据类型(如 intfloat 等等),alias 是这种数据类型的别名。

  • define 的基本语法:
#define macro value

其中,macro 是一个宏名称,value 是这个宏的值。

  1. 定义别名和宏的方式不同

typedef 用于定义新的数据类型别名,例如:

typedef int Integer;

上面这行代码定义了一个名为 Integer 的新类型,它是 int 类型的别名。这意味着,以后就可以使用 Integer 来代替 int 来声明变量或者函数参数,例如:

Integer a = 123;
void func(Integer b);

define 则用于定义常量、宏和函数等,在预处理阶段将其替换为指定的表达式或值,例如:

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

上述代码中,第一行定义了一个名为 PI 的常量,第二行定义了一个名为 MAX 的宏,它接受两个参数 xy,返回两者中较大的一个。

  1. 只能用于不同类型别名定义

typedef 仅能用于为已有类型定义新的别名,例如:

typedef int Integer;
typedef float Real;

define 则可以定义任何可替换的文本,例如:

#define PI 3.1415926
#define MAX(x, y) (x > y ? x : y)
#define HELLO "hello, world"

上述代码中,第一行和第二行是用于定义常量和宏,而第三行则用于定义字符串常量。

  1. 范围和作用域

typedef 定义的别名的范围和作用域与实际类型相同。例如,在以下代码中:

typedef int Integer;
void func() {
    Integer a = 123;
}

Integer 的范围和作用域与 int 相同,因此可以在函数内部使用 Integer 类型的变量。

define 定义的宏的范围和作用域通常限于当前文件或者当前编译单元(即 .c.cpp 文件)。如果要在其他文件或模块中使用这些宏,需要将其导出到头文件中并进行包含。

 假如你想定义一个四个字符组成的数据类型 char4 的话,可以使用以下方式:

typedef struct {
    char data[4];
} char4;

上述代码中,定义了一个结构体,其中包含了一个名为 data 的数组,这个数组中有四个元素,每个元素都是 char 类型。然后使用 typedef 将这个结构体定义为 char4 类型的别名,这样就可以使用 char4 来代替 struct { char data[4]; } 来声明变量或者函数参数了。例如:

char4 c1 = {'a', 'b', 'c', 'd'};
char4 c2 = {"xyz"}; // 可以省略大括号
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值