ほとんどの別ヘッダ(またはC自体の実装が)のようなものを行っています私はコードをコンパイルする:
#define XYZZY unsigned char
typedef int BOOL;
int main (void) {
return 0;
}
それwo細かいRKSしかし、私は#define BOOL unsigned char
にその最初の行を変更したときに、私はあなたが見るとまったく同じメッセージが出ます:これを確認するには
qq.c:2:17: error: two or more data types in declaration specifiers
qq.c:2:5: warning: useless type name in empty declaration
を、あなたはそのコードが実際にどのように見えるかを確認するためだけにプリプロセッサフェーズをコンパイルすることができますコンパイラ段階に移行します。
これはコンパイラに依存しますが、もちろんgcc -E
はgcc
に使用するオプションです。
固定することは別の問題です。エイリアスタイプの1つをBOOL1
に変更するか、そのような非常に醜いものを変更する必要があります。私はそれがかなり使用されるだろうと想像して以来、それはより大きな変化になる可能性があります。
あなたは単にBOOL
の同じ定義を使用しますが、それはまだ、これは有害な副作用を持っていないことを確認するために、分析のかなりを取るの両方のサブシステムを確保して逃げることができるかもしれません。 typedef
がないことを確認するために
#ifndef SKIP_BOOL_DEF
#if !defined(_WINDEF_) && !defined(_WINDEF_H) && !defined(DOS32X)
typedef int BOOL;
#endif
#endif
、その後gcc -DSKIP_BOOL_DEF
(または同等品)を使用してコードをコンパイルします。この修正プログラムをテストする(さらにおそらく実装)する
、あなたのような何かに#if
文を変更することができます完了しました。それからあなたの(うまくいけば互換性のある)システム定義を使用します。
それがそうだったので、この再定義をスキップするためにifndefを追加しました。 –