#define和typedef

#define

  • C语言中的宏定义语句结尾不能写 “;”, 分号会被视为值的一部分,如:
    #define NAME_LEN 16

  • 定义宏函数时,如果有多行,则需要使用续行符,即反斜杠(\), 百度说:“因为宏定义必须在一行完成”,但是为了美观,要进行换行,就要使用续行符,如:
    #define LIST_INSERT(item, list) do { \
    item -> pre = NULL;
    item -> next = list;
    list = item;
    } while (0);

  • 定义宏函数时,使用do{} while(0)语法,又是为何?
    百度查资料发现,主要是因为,遇到 if else 语句 和 宏函数一起使用时,如:
    #define ADD(x, y) { x+y }
    if(condition)
    ADD;
    else …;
    展开后:
    if (condition)
    {
    x+y
    };
    else
    …;
    导致语法错误,使用do while 语句,正好可以解决此问题;
    这样可以确保宏在使用时不会受制于单行或缺少分号的限制。

typedef

在 C 语言中,typedef 关键字用于为已有类型创建新的类型别名。它可以简化代码,使复杂的类型定义更清晰易读,特别是对于指针、结构体和函数指针等复杂类型。

基本语法

typedef 原始类型 新类型名;
  • 原始类型:是已有的类型,例如 int、float、结构体类型、指针类型等。
  • 新类型名:是对该类型的新名称,可以直接用它来声明变量。

使用场景和示例

  • 基本类型的别名
typedef unsigned int uint;
// uint 就成为 unsigned int 的别名,之后可以直接使用 uint 代替 unsigned int
uint num = 10;
  • 指针类型的别名
    对于指针类型,typedef 可以让代码更简洁,尤其是函数指针等复杂类型。如:
typedef char* string;
// string 变成了 char* 的别名,可以更直接地定义字符串指针
string name = "Hello";
  • 结构体类型的别名
    在 C 语言中,定义结构体时必须使用 struct 关键字,但通过 typedef,可以为结构体创建一个简洁的别名。
typedef struct {
    int x;
    int y;
} Point;
// Point 成为结构体的别名,可以直接用 Point 定义变量,而不需要写 struct 关键字
Point p = {10, 20};

typedef 与 #define 的区别

typedef 与 #define 都可以定义新的名字,但 typedef 是在编译阶段处理的类型定义,而 #define 是在预处理阶段进行简单的文本替换。此外,typedef 更适合定义复杂类型,而 #define 更适合定义简单常量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值