C:关于typedef和enum

时间:2015-12-05 18:56:01

标签: c enums typedef

我刚刚开始学习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,什么时候不用?

请问你能快速解释一下吗?

感谢您的回答

3 个答案:

答案 0 :(得分:0)

typedef s有很多用途。引用一些

  

1)typedef可用于使程序易于移植。如果typedef用于可能与机器无关的数据类型,则在移动程序时需要更改typedef

  

2)它可用于为程序提供更好的文档。名为Treeptr的类型可能更容易理解,然后只能将其声明为指向复杂结构的指针。

来源:The C programming Language

答案 1 :(得分:-1)

你不混淆typedef并定义?如果你这样做:

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

答案 2 :(得分:-1)

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,情况有所不同 - 请考虑以下示例:

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 enum可防止将其他值添加到枚举:

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