gpt4 book ai didi

c - c中相同结构的不同typedef

转载 作者:太空宇宙 更新时间:2023-11-04 07:53:19 24 4
gpt4 key购买 nike

在SequenceStack.h中,我有以下代码

#ifndef SEQUENCESTACK_H
#define SEQUENCESTACK_H

#ifndef DATASTRUCTURE_MAZE_H
typedef int SElemType_Sq;
#endif

typedef struct {
SElemType_Sq *base;
SElemType_Sq *top;
int stacksize;
}SqStack;

在 SequenceStack.c 中,我有

#include "SequenceStack.h"

它定义了一个堆栈。

在我想使用堆栈但我想更改元素类型的其他程序中。

所以在 Maze.h 中我有

#ifndef DATASTRUCTURE_MAZE_H
#define DATASTRUCTURE_MAZE_H

typedef struct {
int x;
int y;
}PosType;

typedef struct {
int ord;
PosType seat;
int di;
}SElemType_Sq;

#include "SequenceStack.h"

调试器中更改的 SqStack 仅 int ord 受到影响。

如果我将 SequenceStack.h 更改为

#ifndef SEQUENCESTACK_H
#define SEQUENCESTACK_H

typedef struct {
int x;
int y;
}PosType;

typedef struct {
int ord;
PosType seat;
int di;
}SElemType_Sq;

typedef struct {
SElemType_Sq *base;
SElemType_Sq *top;
int stacksize;
}SqStack;

并且在 Maze.h 中不放任何东西,一切正常。

我想知道出了什么问题以及为什么 #ifndef 不起作用。我可以给源码。

最佳答案

在 C(和 C++)中,#include 是非常原始的机制,它只是在实际编译之前对包含文件中的文本进行“复制-粘贴”。

所以,这里发生的是,您使用 int* 指针编译您的 SequenceStack.c。函数中的代码使用该类型。

然后你传递这些函数参数,它们不匹配。因此,事情无法正常工作也就不足为奇了。

如果您想要带有指针的“通用”堆栈,我建议您使用void* 指针指向SequenceStack 中的元素。根据您的完整代码,例如您需要复制/重新分配元素,您可能必须将元素的大小添加到 SqStack

关于c - c中相同结构的不同typedef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52411911/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com