C: 关于 typedef 和 enum

C: About typedef and enum

刚开始学C,觉得自己没有完全理解typedef的使用

考虑这段代码:

#include <stdio.h>

enum _season{spring=1, summer, autumn, winter} season;

int main()
{
    int val;
    printf(" enter the number of the season: ");
    scanf("%d", &val);

    season = val;

    switch (season) {
        case 1:
            printf("spring");
            break;
        case 2:
            printf("summer");
            break;
        case 3:
            printf("autumn");
            break;
        case 4:
            printf("winter");
            break;
        default:
            printf("the seasons are only 4");
    }
    return 0;
}

它在没有 typedef 的情况下工作。我看到一些使用 typedef 的例子,有些没有使用它,所以现在我有点困惑,我不明白什么时候应该使用 typedef,什么时候不应该?

你能给我一个简单的解释吗?

感谢您的回答

typedef 有很多用途。引用一些

1) typedefs can be used to make programs easy to port. If typedefs are used for data types that may be machine-independent, onle the typedefs need to be changed when the program is moved.


2) It can be used to provide better documentation for a program. A type called Treeptr may be easier to understand then one declared only as a pointer to a complicated structure.

来源:The C programming Language

你不会混淆 typedef 和 define 吗?如果你这样做:

当你使用定义时,你需要指定对应于你的文本的值(不总是数字),通过使用枚举,值将自动关联。如果是这样,您不应在开关中使用数值,而应使用您定义的文本

typedef 定义了一种新的数据类型。所以你可以拥有:

typedef char* my_string;
typedef struct{
  int member1;
  int member2;
}my_struct

现在您可以使用这些新数据类型声明变量

my_string s;
my_struct x;

s = "welcome";
x.member1 = 10;

对于枚举,情况有些不同 - 请考虑以下示例:

enum Ranks {FIRST, SECOND};
int main()
{
   int data = 20;
   if (data == FIRST)
   {
      //do something
   }
}

枚举是整数类型;枚举中的第一个值是 0(除非另有说明),第二个是第一个值+1(在本例中为 0+1),依此类推。当您声明类型为 enum_data_type 的变量时,您只能为其分配存在于枚举中的值....编译器会进行验证。
所以在这个例子中,if(data==FIRST) is false

使用 typedef 枚举可防止将其他值添加到枚举中:

typedef enum Ranks {FIRST, SECOND} Order;
int main()
{
   Order data = 20;   //ERROR 20 is not a Order
   if (data == FIRST)
   {
      //do something
   }
}