2010-12-28 8 views
2

マクロの数値をより小さい数に分割するにはどうすればよいですか?マクロの分割とラウンドの実装方法

私はこれを行うにしようとしています:

#define TOTAL_NUM_FFTS (int) NO_SAMPLES/FFT_SIZE 

が、私はそのマクロのincompaitible再定義の警告を取得していますし、コンパイラはとしてライン修正再表示:TOTAL_NUM_FFTSと(INT)との間にスペースを入れず #define TOTAL_NUM_FFTS(int) NO_SAMPLES/FFT_SIZEを。

ありがとうございました!

答えて

11
#define TOTAL_NUM_FFTS ((int) (NO_SAMPLES)/(FFT_SIZE)) 

プリプロセッサは、マクロに対するパラメータであると考えます。

マクロを定義するときは、可能な限り多くのカッコを使用してください。たとえば、誰かがFFT_SIZEを2 + 3と定義するとどうなるか考えてみてください。代わりに、5で割ると、あなたは2で割ることだろうし、次にチェックする3.

+0

私はこれをしたします。#define TOTAL_NUM_FFTS((int型)NO_SAMPLES/FFT_SIZE)と私はまだ、コンパイラと同じ警告が互換性のない再定義を言って、ラインを出してくれる取得しています。#define TOTAL_NUM_FFTS((int型)NO_SAMPLES/FFT_SIZE)間にスペースはない。 O_O –

+0

コード内にこのマクロの定義が2つありますか? –

+0

ダン。はい、私はCコードに1つ、ヘッダーファイルに1つ隠れていました。ありがとう!!! –

1

いくつかのものを追加:Ilya mentioned

  • メイクとして、

    • を常に正しく、マクロ(マクロの引数を)括弧しますマクロの定義が重複していないことを確認してください。エラーメッセージには、grepやそれに類するものがどこにあるのかが分かるはずです(古いバージョンのヘッダがインクルードパスの他のディレクトリに隠れているのかもしれません)。
    • ヘッダーファイルがinclude guardsを複数含むことから保護されていることを確認してください。同じマクロの再定義がCまたはC++コンパイラによって受け入れられるはずだから、これはあなたに起こっているとは思えませんが、あなたのヘッダーにこれがあることを確認する必要があります。
  • +0

    私はこれを念頭に置いておきます。ありがとうございました。 :) –

    関連する問題