typedef与没有带有C语言中的结构和枚举的typedef

cju*_*b39 4 c enums struct typedef

在C中,将结构声明为是否存在任何有效差异

typedef struct {...} Foo;
Run Code Online (Sandbox Code Playgroud)

struct Foo {...};
Run Code Online (Sandbox Code Playgroud)

我知道第二个要求你使用前缀struct,但是在编写或执行程序时我会注意到这两个定义之间有什么区别?用enums怎么样?

dtm*_*and 5

更新:请参阅答案中的评论以获得澄清.

原帖.

除了必须在任何地方编写"struct"之外,另外需要注意的是使用typedef 可以避免在使用指针时出现细微的语法错误:

引用:

Typedef还可以简化指针类型的声明.考虑一下:

struct Node {
    int data;
    struct Node *nextptr;
};
Run Code Online (Sandbox Code Playgroud)

使用typedef,可以像下面这样重写上面的代码:

typedef struct Node Node;
struct Node {
    int data;
    Node *nextptr;
};
Run Code Online (Sandbox Code Playgroud)

在C中,可以在单个语句中声明多个相同类型的变量,甚至可以混合指针和非指针.但是,需要在星号前加上每个变量的前缀,以将其指定为指针.在下文中,程序员可能会认为errptr确实是Node*,但是打字错误意味着errptr是一个Node.这可能会导致细微的语法错误.

struct Node *startptr, *endptr, *curptr, *prevptr, errptr, *refptr;
Run Code Online (Sandbox Code Playgroud)

通过定义Node*typedef,可以确保所有变量都是指针类型.

typedef struct Node *NodePtr;
...
NodePtr startptr, endptr, curptr, prevptr, errptr, refptr;
Run Code Online (Sandbox Code Playgroud)

  • 最后一个优点是使用`typedef`作为*指针*类型,而不是结构类型.指针类型的Typedef通常被认为是糟糕的风格,理由是指针是C的集成,隐藏某些东西"指针"可能会引起混淆.通过每行声明一个对象(或非常小心)可以避免多重声明问题.并且在您第一次尝试使用`errptr`时可能会检测到错误. (4认同)