使用#define时产生奇怪的mod运算符(%)

Sma*_*ash 2 c++ modulo c-preprocessor

int temp1,temp2,temp3;
temp1 = 199;
temp2 = 200;
temp3 = 199%temp2;

CString txt;
txt.Format(_T("temp3 = %d"),temp3);
AfxMessageBox(txt);
Run Code Online (Sandbox Code Playgroud)

按预期输出199.

#define WIDTH 100
#define BUFFERWIDTH 200
int temp1,temp2,temp3;
temp1 = 199;
temp2 = BUFFERWIDTH;
temp3 = 199%BUFFERWIDTH;

CString txt;
txt.Format(_T("temp3 = %d"),temp3);
AfxMessageBox(txt);
Run Code Online (Sandbox Code Playgroud)

按预期输出199.

#define WIDTH 100
#define BUFFERWIDTH 2*WIDTH
int temp1,temp2,temp3;
temp1 = 199;
temp2 = BUFFERWIDTH;
temp3 = 199%BUFFERWIDTH;

CString txt;
txt.Format(_T("temp3 = %d"),temp3);
AfxMessageBox(txt);
Run Code Online (Sandbox Code Playgroud)

输出是100 ...

只是想知道是什么导致这个:)

Ker*_* SB 8

阅读有关运算符优先级的信息,请注意您的说法199 % 2 * 100.

...

或者我应该说,(199 % 2) * 100......

  • @Pablo:的确如此.你应该总是用括号定义值宏...但等等,这是C++,所以你不应该使用那些可怕的怪物并说'const size_t height = 2*width;`就像一个成年人! (8认同)