使用typedef的用途是什么,它表示什么?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用typedef的用途是什么,它表示什么?相关的知识,希望对你有一定的参考价值。
我遇到了代码,对我来说有点奇怪,我无法理解它的含义。
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 ++的。也许它也适用于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;
因此mystruct
是mystruct
的别名。这就是您应该做的,除非您有充分的理由不这样做。
[我曾经写过一个related answer,如果这个答案不是太着重于结构,那么我将把这个问题重复一遍。
typedef定义类型为struct alpha
的指向Abc
的指针。因此,Abc s;
转换为struct alpha *s;
以上是关于使用typedef的用途是什么,它表示什么?的主要内容,如果未能解决你的问题,请参考以下文章
c语言typedef int Arrty[10] 是啥意思 然后Arrty f,c;起到了啥作用