我刚刚开始学习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,什么时候不用?
请问你能快速解释一下吗?
感谢您的回答
答案 0 :(得分:0)
typedef
s有很多用途。引用一些
1)
typedef
可用于使程序易于移植。如果typedef
用于可能与机器无关的数据类型,则在移动程序时需要更改typedef
。
2)它可用于为程序提供更好的文档。名为
Treeptr
的类型可能更容易理解,然后只能将其声明为指向复杂结构的指针。
答案 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
}
}