C 语言 - typedef

C typedef

typedef 关键字允许您为现有类型创建一个新名称(别名)。这可以使复杂的声明更易于阅读,并使您的代码更易于维护。

例如,我们可以不总是写 float,而是创建一个名为 Temperature 的新类型,使代码更清晰:

实例

#include <stdio.h>

typedef float Temperature;

int main() {
  Temperature today = 25.5;
  Temperature tomorrow = 18.6;

  printf("Today: %.1f C\n", today);
  printf("Tomorrow: %.1f C\n", tomorrow);

  return 0;
}

亲自试一试

在这里,Temperature 只是 float 的另一个名称。然而,代码更具表达力:它告诉我们这些数字是温度,而不仅仅是任何浮点数。

为什么要使用 typedef?

  • 简化代码:类型名称更短、更易读。
  • 提高清晰度:更好地表达意图(例如,用 AGE 而不是仅仅 int)。当许多变量共享相同的基础类型(如 floatdouble)时,也有助于避免混淆。

补充说明:在现代 C 语言中,typedef 通常与 structenum 和函数指针一起使用,以保持代码整洁和易于阅读。

typedef 与结构体结合使用

typedefstruct 结合使用很有用,因为它可以避免每次都写 struct

实例

#include <stdio.h>

// 不使用 typedef:
struct Car {
  char brand[30];
  int year;
};

// 使用 typedef:
typedef struct {
  char brand[30];
  int year;
} Car;

int main() {
  struct Car car1 = {"BMW", 1999}; // 需要 "struct"
  Car car2 = {"Ford", 1969}; // 使用 typedef 更简短

  printf("%s %d\n", car1.brand, car1.year);
  printf("%s %d\n", car2.brand, car2.year);
  return 0;
}

亲自试一试

这个示例展示了 typedef 如何使处理多个结构体变量(例如不同的汽车型号)变得更容易:

实例

#include <stdio.h>

// With typedef
typedef struct {
  char brand[30];
  char model[30];
  int year;
} Car;

int main() {
  Car car1 = {"BMW", "X5", 1999};
  Car car2 = {"Ford", "Mustang", 1969};
  Car car3 = {"Toyota", "Corolla", 2011};

  printf("%s %s %d\n", car1.brand, car1.model, car1.year);
  printf("%s %s %d\n", car2.brand, car2.model, car2.year);
  printf("%s %s %d\n", car3.brand, car3.model, car3.year);

  return 0;
}

亲自试一试

在这里您可以看到,当结构体嵌套在其他结构体中时,typedef 如何保持代码整洁:

实例

#include <stdio.h>

// 使用 typedef 定义三个结构体
typedef struct {
  char firstName[20];
  char lastName[20];
} Owner;

typedef struct {
  char brand[20];
  int year;
  Owner owner;
} Car;

typedef struct {
  char name[30];
  Car featuredCar;
} Dealership;

int main() {
  Owner person = {"John", "Doe"};
  Car car1 = {"Toyota", 2010, person};
  Dealership d = {"City Motors", car1};

  printf("Dealership: %s\n", d.name);
  printf("Featured Car: %s (%d), owned by %s %s\n",
    d.featuredCar.brand,
    d.featuredCar.year,
    d.featuredCar.owner.firstName,
    d.featuredCar.owner.lastName);

  return 0;
}

亲自试一试

是否使用 typedef 由您自己决定。不使用它,您的代码也能正常工作。然而,在现代 C 语言中,它经常被用来使代码更简短、更清晰、更易于维护。