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) typedef
s can be used to make programs easy to port. If typedef
s are used for data types that may be machine-independent, onle the typedef
s 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.
你不会混淆 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
}
}
刚开始学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)
typedef
s can be used to make programs easy to port. Iftypedef
s are used for data types that may be machine-independent, onle thetypedef
s 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.
你不会混淆 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
}
}