有一个标题文件stack.h
:
typedef char ElemType;
typedef struct{
ElemType data[MaxSize];
int top;
} SqStack;
int Push_Sq(SqStack *s, ElemType e);
int Pop_Sq(SqStack *s, ElemType *e);
int GetTop_Sq(SqStack *s, ElemType *e);
现在我有一些包含此标题的源文件,我想int
使用ElemType
代替char
,是否可能?我该怎么办?(我不想修改原始头文件)
答案 0 :(得分:2)
不幸的是,没什么可做的。您可以重构代码以使类型为#define
,因此在头文件中会出现类似这样的内容:
#ifndef ELEMTYPE
# define ELEMTYPE char
#endif
typedef ELEMTYPE ElemType;
然后在源文件之前中包含您可以执行的头文件
#define ELEMTYPE int
如果从多个文件中使用,则危险,所有源文件中没有相同的ELEMTYPE
。
答案 1 :(得分:1)
好吧,既然您正在编译代码,那么就没有什么能阻止您编辑源文件本身,或者使用不同的源文件(您已经显示的文件略微修改过的副本)来将基础类型更改为int
。换句话说,将第一行更改为:
typedef int ElemType;
你需要小心,因为这可能会破坏其他地方的假设,但这将是我尝试的第一件事。
如果如编辑中所述,您不想修改原始头文件,则可以这样包含它:
#define char int
#include "stack.h"
#undef char
这可能有效,因为char
仅在typedef
本身的头文件中使用,因此效果已本地化。
请记住,当前版本中的所有翻译单元都应该使用该技巧,否则您可能会遇到一些非常不寻常的错误。
在我看来,你最好不要让整个堆栈实现尝试保持干净,或者使堆栈能够处理任何数据类型(稍微复杂一些,但可行)。
答案 2 :(得分:1)
你不能。
在C ++中,另一种方法是在不同的名称空间中声明这些标识符。
在C语言中你可以#define它们,然后在必要时#undef它们来制作一个新的#define。