我知道运算符是如何工作的,但我不明白下面代码中的第二种情况如何给出1作为结果.
#define MIN(a,b) a<b ? a:b
int x = MIN(1,2); //case 1, output is 1
int x = MIN(1,1+1); // case 2
Run Code Online (Sandbox Code Playgroud)
编译器不应该看到这个(情况2)为"是1 <1 + 1?",我认为应该是"1 <1?不是",表达式3被执行并得到:"b"= 1 +1 = 2.这是因为上面的宏中a和b周围没有括号,或者可能是因为我遵循自己的规则而感到迷茫?请帮忙....
另外,你如何解释这个案例:
int x = MIN(1,2) + 1; //should we consider the "1" on the right?
Run Code Online (Sandbox Code Playgroud) 我#define在main中使用之前声明了该函数,但我仍然得到:
隐含的函数fakultet声明...
答案应该是6 ...
#include <stdio.h>
#define fakultet(x) ((x)>1?((x)*(fakultet(x-1))):(1))
int main(void) {
printf(fakultet(3));
}
Run Code Online (Sandbox Code Playgroud)