Juniorboy 发表于 2022-7-23 20:11:23

typedef 定义问题

typedef struct Stack
{
   int a ;
   int b ;
};
//第二种形式
typedef struct
{
   int a ;
   int b ;
}Stack;


请问这个结构体的名字 定义在struct后面和整个结构体后面都可以吗?

ba21 发表于 2022-7-23 21:16:25

typedefstruct Stack 别名

typedefstruct {}   别名

jackz007 发表于 2022-7-23 21:18:17

本帖最后由 jackz007 于 2022-7-23 21:21 编辑

      两种都是错的。
typedef struct STACK {
      int a ;
      int b ;
} Stack ;
      这样定义,才可以这样定义结构体:
Stack x , * p ;

ba21 发表于 2022-7-23 21:19:25

typedef定义别名
typedef struct Stack
{
   int a ;
   int b ;
}a; // struct Stack 别名 a
//第二种形式
typedef struct
{
   int a ;
   int b ;
} b; // {}本身没名称 别名 b

临时号 发表于 2022-7-23 21:20:49

这两者是不同的
第一个形式你要声明一个结构变量的话就必须这样写
struct Stack a;
第一个形式你要声明一个结构变量的话就只需要这样写
Stack a;
而且第一个形式在我的编译器上还报了Warning
我想是因为typedef的格式是:
typedef 类型 新名字
而第一种形式少了新名字,所以报了Warning,把typedef删了就不会报Warning了

柿子饼同学 发表于 2022-7-23 21:46:22

如果你是 c 的话 ,建议使用这样的写法:typedef struct STACK{
        int a, b;
} Stack;
十分方便,不影响使用,并且可以直接把整个结构体当作一个类型
后面的声明都很方便
Stack stack, sk;
Stack stacks;
如果用 c++ 就直接写:struct Stack{
        int a, b;
}; // 注意有分号
用 c 的话就建议用 typedef

桃花飞舞 发表于 2022-7-24 09:58:00

本帖最后由 桃花飞舞 于 2022-7-27 01:44 编辑

爱莫能助呀,typedef和struct结构体重命名的我也搞不清,不过你的代码中没有新的类型名typedef struct Stack
{
   int a ;
   int b ;
};
//第二种形式
typedef struct
{
   int a ;
   int b ;
}Stack;
typedef   原来的类型 新的类型名   
第一种形式是少了新的类型名,语法错误
第二种形式少了结构体的名称有新的类型名,进行类型重定义之后结构体名称可以省略不写,用类型重定义之后的名字来写,符合语法规则
页: [1]
查看完整版本: typedef 定义问题