#include <stdio.h>
#define S(x) 3 < (x) < 5
int a, n;
void f1(int n)
{
for(; n >= 0; n--){
if(n % 2 != 0) continue;
printf("%d ", n); /*%d后面有1个空格*/
}
printf("\n");
}
double f2(double x, int n)
{
if(n == 1) return x;
else return x * f2(x, n-1);
}
int main(void)
{
int a = 9 ;
printf("%d,%d\n", a, S(a)); /* 中间没有空格 */
f1(4);
printf("%.1f\n", f2(2.0, 3));
printf("%d,%d\n", n, S(n)); /* 中间没有空格 */
return 0;
}
9,1
4 2 0
8.0
0,1
在C语言中,#define
?是用来定义宏的预处理指令。给定一个标识符和一个替换序列,#define
?指令会将标识符替换为指定的序列。
在您提供的示例中,S(x)
?是一个宏定义,它定义了一个名为?S
?的宏,其参数为?x
。替换序列是?3<(x)<5
。
这种宏定义实际上是一个逻辑表达式。它通过比较?(x)
?是否大于3且小于5,返回一个布尔值的结果。宏定义中的?(x)
并不是函数的调用,它仅是用来表示宏的参数。
需要注意的是 C 语言中的比较运算符?<(小于)
?和?>(大于)
?是左结合的,意味着它们从左到右进行比较。因此,表达式?3<9<5
?的比较顺序是?3<9
?首先得到结果?1
,然后和?5
?比较,即?1<5
,最终得到结果?1。