#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。