7

uint8_t, uint16_tタイプを定義する従来の埋め込み C コードと、キーワード uint32_tを使用してヘッダー ファイルで作業しています。typedef

typedefs.h議論のために、ファイルにこれらの定義が含まれているとしましょう。

私の新しい C ソース モジュールには、stdint.h. typedefs.hまた、階層内のどこかに含まれる他のヘッダー ファイルも含めます。予想どおり、コンパイラは複数の定義されたシンボルについて不平を言います。

タイプが定義されていない場合は、どちらかが含まれていないか、より良い場合にのみタイプtypedefs.hを宣言するように、レガシーファイルを変更したいと思います。uint*_tstdint.huint*_t

私の理解では、プリプロセッサ ディレクティブではない#ifndefため使用できません。typedef

uint*_tでは、それらが既に存在する場合 (またはstdint.h既に含まれている場合)を定義しないようにコンパイラに指示するにはどうすればよいでしょうか?

注: C 仕様で定義された標準にヘッダー ファイルのガード定義が含まれている場合、これは簡単です。

FWIW、私は ARM9 プロセッサに Green Hills コンパイラ 4.24 を使用しています。

4

3 に答える 3

7

stdint.h定義する型の制限のためのマクロも定義する必要があると私は信じています。などを使用しているものをテストできるはずです#ifdef

#ifndef UINT32_MAX
  typdef ... uint32_t;
  #define UINT32_MAX ...
  ...
#endif

編集: もともとは UINT32_MIN を使用していましたが、Jens Gustedt が指摘したように、これは発生しない符号付き/符号なしと最小/最大の組み合わせの 1 つです。

于 2010-09-07T18:45:58.007 に答える
5

これらのタイプを取得するために常にインクルードするようにレガシー ヘッダーを修正し、重複する定義を削除し、それがない壊れたシステムにstdint.hドロップイン ファイルを提供するだけです。stdint.h

于 2010-09-07T18:43:17.890 に答える
0

UNIX システムを使用している場合は、ステップをバックアップして、autoconf(1) や automake(1) などの構成パッケージを使用する必要があります。このような問題を処理するように設計されています。

于 2010-09-07T20:21:08.867 に答える