在C或C++中,使用!(variable)和(!variable)在a之间是否有确定的区别if-statement,例如:
if (!(variable)) { .. // do something }
要么
if (!variable && !(variable2)) { .. // do something }
这样一个版本提供的结果与另一个版本不同?
我想在编译时根据另一个宏的值定义一个宏.但是,此代码未按预期执行:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIXTEEN 16
#define TWO (SIXTEEN % 8 == 0)? (SIXTEEN / 8) : ((SIXTEEN / 8) + 1)
int main();
int main() {
printf("max = %d\n", TWO);
int i;
for (i = 0; i < TWO; i++) {
printf("%d\n", i);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这打印:
max = 2
0
1
2
...
Run Code Online (Sandbox Code Playgroud)
并继续直到终止,当它应该打印简单:
max = 2
0
1
Run Code Online (Sandbox Code Playgroud)
并退出.
如果我这样做,它的工作原理:
#define TWO 2
Run Code Online (Sandbox Code Playgroud)
我认为这是宏的定义的一个问题...但是,如果我使用原始的#define执行以下操作,它似乎工作:
...
int count = TWO;
for (i = …Run Code Online (Sandbox Code Playgroud) 唯一让我想到的是,MULT((3 + 2)(5*4))= 100不是62?有人可以解释一下吗?
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#define ADD(x1, y1) x1 + y1
#define MULT(x1,y1) x1 * y1
int _tmain(int argc, _TCHAR* argv[])
{
int a,b,c,d,e,f,g;
a=2;
b=3;
c=4;
d=5;
e= MULT(ADD(a,b),MULT(c,d));
printf("the value of e is: %d\n", e);
system("PAUSE");
}
Run Code Online (Sandbox Code Playgroud)