C语言不常用小tip

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

你可能感兴趣的:(c语言,算法,开发语言)