头文件有 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 的定义“节点”是多余的,我将其更改为版本 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() {
}
我很难相信你问题中的代码能够编译。
关于c - 'typedef in C' 有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29057401/