当前位置:   article > 正文

【Linux C/C++】关于结构体定义,typedef关键字的使用场景_linux typedef

linux typedef
typedef关键字修饰结构体声明的优劣

优势:
在C语言中,可以使用两种方式来定义结构体类型:使用struct关键字和使用typedef关键字。使用struct关键字定义结构体类型时,需要在定义时同时指定结构体的名称和成员变量,例如:

struct Person {
    char name[20];
    int age;
};
  • 1
  • 2
  • 3
  • 4

使用typedef关键字定义结构体类型时,可以将结构体类型重命名为一个新的类型名,例如:

typedef struct {
    char name[20];
    int age;
} Person;
  • 1
  • 2
  • 3
  • 4

这样,就可以直接使用Person作为结构体类型名,而不需要再使用struct关键字。但是,如果只是使用typedef关键字定义结构体类型,而没有指定结构体的名称,那么这个结构体类型就无法被直接使用,例如:

typedef struct {
    char name[20];
    int age;
} ;
  • 1
  • 2
  • 3
  • 4

这个结构体类型没有名称,无法被直接使用,因此在定义命名结构体时,需要同时使用struct关键字和typedef关键字,例如:

typedef struct Person {
    char name[20];
    int age;
} Person;
  • 1
  • 2
  • 3
  • 4

这样就可以定义一个命名为Person的结构体类型,并且可以直接使用Person作为结构体类型名。因此,在C语言中,命名结构体通常使用struct和typedef关键字的组合来定义。
缺点:

不使用typedef定义结构体类型的好处是可以更加清晰地表达代码的含义,避免类型混淆和歧义。当我们在代码中使用结构体类型时,如果没有使用typedef关键字,那么我们需要在每次使用结构体类型时都要加上struct关键字,例如:

struct Person {
    char name[20];
    int age;
};

int main() {
    struct Person p1;
    // ...
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
'
运行

这样虽然有些繁琐,但是可以更加明确地表达p1是一个结构体类型的变量。如果我们使用了typedef关键字,那么可以直接使用新的类型名来代替结构体类型名,例如:

typedef struct {
    char name[20];
    int age;
} Person;

int main() {
    Person p1;
    // ...
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
'
运行

这样虽然更加简洁,但是可能会导致类型混淆和歧义。如果我们在代码中定义了多个类似的结构体类型,使用不同的typedef名称来代替结构体类型名,那么可能会导致代码的可读性和可维护性降低。因此,在一些需要更加清晰地表达代码含义的场景下,不使用typedef定义结构体类型可能更加合适。

当我们在代码中定义了多个类似的结构体类型,并且使用了不同的typedef名称来代替结构体类型名时,容易导致类型混淆和歧义。例如:

typedef struct {
    char name[20];
    int age;
} Person;

typedef struct {
    char name[20];
    char address[50];
} Employee;

int main() {
    Person p1;
    Employee e1;
    // ...
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
'
运行

在这个例子中,我们定义了两个类似的结构体类型Person和Employee,并且使用了不同的typedef名称来代替结构体类型名。虽然这样可以让代码更加简洁,但是也容易导致类型混淆和歧义。例如,如果我们在代码中使用了一个变量p1,那么很难确定它是Person类型的变量还是Employee类型的变量。因此,在这种情况下,不使用typedef定义结构体类型可能更加合适,可以让代码更加清晰易懂。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/952144
推荐阅读
相关标签
  

闽ICP备14008679号