我写了以下C程序.输出是32.这是为什么?
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#define max 10+2
int main(){
int i;
i = max * max;
printf("\n%d\n",i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
(我正在学习C并且相对较新.)
#define max 10+2
Run Code Online (Sandbox Code Playgroud)
这是预处理器.它不聪明.
这是愚蠢的.
它只是取代了文字.
max*max
Run Code Online (Sandbox Code Playgroud)
将解决
10+2*10+2
Run Code Online (Sandbox Code Playgroud)
是的
10+(2*10)+2
Run Code Online (Sandbox Code Playgroud)
因为运算符优先,这是
10 + 20 + 2
Run Code Online (Sandbox Code Playgroud)
即 32
此外,你应该避免预处理宏时,你可以和使用.您可能也可能不想也考虑使用static const代替const变量或enum代替a #define; 每个都有他们的权衡,参考类似的问题:"静态const"vs"#define"vs"enum".
如果你想坚持预处理器,那么你可以使用:
#define max (10+2)
Run Code Online (Sandbox Code Playgroud)
由于带括号的代码将使运算符优先.