0

ヘッダーファイルがあります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したいです、それは可能ですか?どうすればよいですか?(元のヘッダーファイルを変更したくない)ElemTypechar

4

3 に答える 3

1

コードをコンパイルしているので、ソースファイル自体を編集したり、別のソースファイル(表示したもののわずかに変更されたコピー)を使用して基になるタイプをに変更したりすることを妨げるものは何もありませんint。つまり、最初の行を次のように変更します。

typedef int ElemType;

他の場所で行われた仮定を破る可能性があるので注意する必要がありますが、それが私が最初に試みることです。

編集で述べたように、元のヘッダーファイルを変更したくない場合は、次のようにインクルードすることができます。

#define char int
#include "stack.h"
#undef char

これはchar、そのヘッダーファイル自体でのみ使用されるtypedefため、効果がローカライズされるため、機能する可能性があります。

現在のビルドのすべての翻訳ユニットはそのトリックを使用する必要があることに注意してください。そうしないと、非常に珍しいバグが発生する可能性があります。


私の意見では、スタックの実装全体をフォークして、物事をクリーンに保つか、スタックが任意のデータ型を処理できるようにする(もう少し複雑ですが実行可能)方がよいと思います。

于 2013-02-02T10:48:09.977 に答える
1

できません。

C++ では、別の名前空間でこれらの識別子を宣言することもできます。

C では、それらを #define し、必要に応じて後で #undef して新しい #define を作成することができます。

于 2013-02-02T10:55:49.993 に答える