'typedef in C'有什么用?
What's the use of 'typedef in C'?
一个头文件有3个版本。
版本 1:
typedef struct node
{
void* dataPtr;
struct node* link;
} NODE;
版本 2:没有旧类型名称 'node' (typedef oldTypeName newTypeName)
typedef struct
{
void* dataPtr;
struct* link;
} NODE;
版本 3:没有 typedef
struct
{
void* dataPtr;
struct* link;
} NODE;
根据C : typedef struct name {...}; VS typedef struct{...} name;,
版本 1 的定义 'node' 是多余的,我将其更改为版本 2 并且工作正常。
再次根据此答案,当不使用 'typedef' 时,不能重复使用 'NODE'。
但是,使用这个版本 3 头文件的代码工作得很好。 (NODE被用了两次三次。)
这是代码:
/* Create a list with two linked nodes.*/
#include <stdio.h>
#include <stdlib.h>
#include "version3.h" //Header file
int main (void)
{
//Local Definitions
int* newData;
int* nodeData;
NODE* node;
// Statements
newData = (int*)malloc (sizeof (int));
*newData = 7;
node = createNode(newData);
newData = (int*)malloc (sizeof (int));
*newData = 75;
node->link = createNode(newData);
nodeData = (int*)node->dataPtr;
printf ("Data from node 1: %d\n", *nodeData);
nodeData = (int*)node->link->dataPtr;
printf ("Data from node 2: %d\n", *nodeData);
return 0;
} //main
在这种情况下 'typedef' 有什么用? (这里假设我重用了NODE。->如果这个假设不成立,请告诉我为什么。我对C语言不熟悉。)
以下代码不会创建类型。它创建了一个名为 NODE
的对象,该对象的类型为匿名结构。
struct {
void* dataPtr;
void* link;
} NODE;
int main() {
}
我很难相信你问题中的代码可以编译。
typedef
用于给一个类型起一个新的名字。当使用 struct
的第三个版本时,它只是声明类型 struct{ void* dataPtr; struct* link;}
的 NODE
。现在,如果您必须声明另一个与 NODE
相同类型的变量,您会怎么做?只有一个选项,您必须将其与 NODE
一起声明,否则它们不兼容。
如果两个结构同时声明或使用结构标记或相同类型名称(使用 typedef
)声明,则两个结构是兼容的。
一个头文件有3个版本。
版本 1:
typedef struct node
{
void* dataPtr;
struct node* link;
} NODE;
版本 2:没有旧类型名称 'node' (typedef oldTypeName newTypeName)
typedef struct
{
void* dataPtr;
struct* link;
} NODE;
版本 3:没有 typedef
struct
{
void* dataPtr;
struct* link;
} NODE;
根据C : typedef struct name {...}; VS typedef struct{...} name;, 版本 1 的定义 'node' 是多余的,我将其更改为版本 2 并且工作正常。
再次根据此答案,当不使用 'typedef' 时,不能重复使用 'NODE'。
但是,使用这个版本 3 头文件的代码工作得很好。 (NODE被用了两次三次。)
这是代码:
/* Create a list with two linked nodes.*/
#include <stdio.h>
#include <stdlib.h>
#include "version3.h" //Header file
int main (void)
{
//Local Definitions
int* newData;
int* nodeData;
NODE* node;
// Statements
newData = (int*)malloc (sizeof (int));
*newData = 7;
node = createNode(newData);
newData = (int*)malloc (sizeof (int));
*newData = 75;
node->link = createNode(newData);
nodeData = (int*)node->dataPtr;
printf ("Data from node 1: %d\n", *nodeData);
nodeData = (int*)node->link->dataPtr;
printf ("Data from node 2: %d\n", *nodeData);
return 0;
} //main
在这种情况下 'typedef' 有什么用? (这里假设我重用了NODE。->如果这个假设不成立,请告诉我为什么。我对C语言不熟悉。)
以下代码不会创建类型。它创建了一个名为 NODE
的对象,该对象的类型为匿名结构。
struct {
void* dataPtr;
void* link;
} NODE;
int main() {
}
我很难相信你问题中的代码可以编译。
typedef
用于给一个类型起一个新的名字。当使用 struct
的第三个版本时,它只是声明类型 struct{ void* dataPtr; struct* link;}
的 NODE
。现在,如果您必须声明另一个与 NODE
相同类型的变量,您会怎么做?只有一个选项,您必须将其与 NODE
一起声明,否则它们不兼容。
如果两个结构同时声明或使用结构标记或相同类型名称(使用 typedef
)声明,则两个结构是兼容的。