This question already has answers here:
The need for parentheses in macros in C [duplicate]
(8 个回答)
4年前关闭。
为什么这个 code 给我值“4”而不是“0”?
97/384(有/无地板)应该给我 0。
但它似乎除以 96 而不是 384?即使我打印
只需添加一些括号:
编辑:
或者甚至更好地将它们直接放在定义中:
(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