使用typedef的用途是什么,它表示什么?

问题描述 投票:0回答:2

我遇到了代码,对我来说有点奇怪,我无法理解它的含义。

typedef struct alpha *Abc;

这是定义Abc的地方;

struct alpha{
     Abc s;//what does this mean
}

还有一些在函数中这样使用的地方

Abc iAmFunc(Abc beta,int a){
       some thing is performed
       return variable of type Abc
}

我不明白这样做的目的,谁能向我解释!!

c++ c typedef
2个回答
1
投票

注意,这是针对C而非C ++的。也许它也适用于C ++,但我不知道。

[typedef a b使b成为a的别名

typedef struct alpha *Abc;是什么要使Abc成为struct alpha *的别名。创建完之后,这两个等效:

struct alpha *ptr;
Abc ptr;

有几种不同的用法:

它减少了您需要写的数量。例如,您可以跳过struct字。许多人会说这不是使用typedef的充分理由。

它可以为某些事物提供更具描述性的名称。示例:

typedef char* string; // I would never use this. It's just an example.
typedef int[3] vector; // However, this is something I would consider.

在某些情况下,它可以更轻松地为大型代码库更改类型。假设您有以下代码:

int16_t foo(int16_t a)
{
    int16_t b = a+1;
    for(int16_t = 0; i<b; i++) {
...

[后来您意识到,改用int32_t是个好主意。如果代码看起来像这样,则只需更改一行:

typedef int16_t T
T foo(T a)
{
    T b = a+1;
    for(T = 0; i<b; i++) {
...

限制typedef。通常,它们只会使代码混乱,使代码难以遵循。当它们达到目的时使用它们。对别名指针要特别严格。我只将它们用于函数指针和完全不透明的对象。结构和联合也是如此。恕我直言,我在此处的问题中看到的99%的typedef不是必需的,而且似乎在那里只是因为人们认为应该这样做。

[如果您考虑对结构进行类型定义,请问问自己,对于阅读代码的任何人来说,知道声明是结构是否对您有益。如果是,请使用struct关键字进行声明。当然,您可以发明typedef struct my_struct my_struct_s之类的东西,但是真的值得吗?我会拒绝。

值得注意的是,C的名称空间看起来很简单。这意味着这完全有效:

typedef struct mystruct mystruct;
struct mystruct a;
mystruct b;

因此mystructmystruct的别名。这就是您应该做的,除非您有充分的理由不这样做。

[我曾经写过一个related answer,如果这个答案不是太着重于结构,那么我将把这个问题重复一遍。


3
投票

typedef定义类型为struct alpha的指向Abc的指针。因此,Abc s;转换为struct alpha *s;

© www.soinside.com 2019 - 2024. All rights reserved.