This question already has answers here:
The need for parentheses in macros in C [duplicate]

(8 个回答)


4年前关闭。




为什么这个 code 给我值“4”而不是“0”?
#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 << ")";
}

97/384(有/无地板)应该给我 0。

但它似乎除以 96 而不是 384?即使我打印 MIDIENGINE_SCORE_LENGTH 是 384 ...

最佳答案

想象它是一个“字符串替换”而不是一个数学运算。

所以 MIDIENGINE_SCORE_LENGTH 不是 384 而是 96 *4
所以你的代码看起来像:

floor(mCurrentPatternPulse / 96 *4 );
mCurrentPatternPulse / 96 将首先被评估。

只需添加一些括号:
floor(mCurrentPatternPulse / ( MIDIENGINE_SCORE_LENGTH ) );

编辑:

或者甚至更好地将它们直接放在定义中:
#define MIDIENGINE_SCORE_LENGTH ( PLUGIN_PPQ * 4 )

关于c++ - 定义的处理方式不同吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39451372/

10-09 00:20