我正在对一段代码进行功能增强,这就是我在现有代码中看到的内容。如果声明了枚举或结构,则以后总会有一个typedef:
enum _Mode {
MODE1 = 0,
MODE2,
MODE3
};
typedef enum _Mode Mode;
类似于结构:
struct _Slot {
void * mem1;
int mem2;
};
typedef struct _Slot Slot;
结构不能直接在枚举中声明吗? 为什么对于像下划线那样轻微的东西有一个typedef?这是编码惯例吗?
请给出好的答案,因为我需要添加一些代码,如果这是一个规则,我需要遵循它。
请帮忙。 P.S:作为附加信息,源代码用C语言编写,Linux就是平台。
答案 0 :(得分:9)
在C中,要声明具有结构类型的变量,您必须使用以下内容:
struct _Slot a;
typedef允许您通过基本上创建别名使这看起来更整洁。并允许变量声明如下:
Slot a;
答案 1 :(得分:4)
在C
中, struct 和 typedef 有单独的“命名空间”。因此,如果没有 typedef ,您必须以Slot
作为struct _Slot
访问,这更像是打字。比较:
struct Slot { ... };
struct Slot s;
struct Slot create_s() { ... }
void use_s(struct Slot s) { ... }
VS
typedef struct _Slot { ... } Slot;
Slot s;
Slot create_s() { ... }
void use_s(Slot s) { ... }
另请参阅http://en.wikipedia.org/wiki/Struct_(C_programming_language)#typedef了解详细信息,例如可能的命名空间冲突。
答案 2 :(得分:2)
如果以下是结构:
struct _Slot {
void * mem1;
int mem2;
};
您需要以下内容来声明变量:
struct _Slot s;
请注意struct
之前的额外_Slot
。声明像Slot s
这样的变量似乎更自然,不是吗?
如果您想摆脱额外的struct
,则需要typedef
:
typedef struct _Slot Slot;
Slot s;
答案 3 :(得分:1)
这种代码混淆技术只在少数情况下才有意义。
人们说不写“结构”和其他主观事物更自然。
但客观地说,至少a)不能转发声明这样的typedeffed结构,b)在使用ctags时必须跳过一个环。