なぜこのcodeは "0"の代わりに "4"の値を与えますか?定義が異なる方法で処理されていますか?
#define PLUGIN_PPQ 96
#define MIDIENGINE_SCORE_LENGTH PLUGIN_PPQ * 4
int main()
{
int mCurrentPatternPulse = 97;
int patternBar = (int)floor(mCurrentPatternPulse/MIDIENGINE_SCORE_LENGTH);
cout << "value: " << patternBar << " (" << MIDIENGINE_SCORE_LENGTH << ")";
}
384分の97(と/床なし)私には0
を与えるしかし、96の代わりに、384で除算思えるでしょうか?たとえ私が印刷したとしても、MIDIENGINE_SCORE_LENGTH
は384です...
Protip:
はいくつかのブラケットを追加する代わりに、 'constexpr'変数を使用してください。マクロのようにコンパイル時に処理されますが、変数であるため演算子の優先順位を尊重し、それらは言語に知られています。 –@LưuVĩnhPhúc:他の言語(C++ではなくC言語)。根本原因が共有されている、解決策はありません。 Cには 'constexpr'がありません。 – MSalters
@MSalters私はあなたを取得しません。そのリンクはOPの問題を説明しています。多くのC++の質問が[この1つ](http://stackoverflow.com/q/35039313/995714)のような質問によって重複して報告されていることがわかります。 'constexpr'はこの質問に対する答えではなく、提案です。 –