C语言不常用小tip

发布时间:2023年12月30日
#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。

文章来源:https://blog.csdn.net/Xm041206/article/details/135304981
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。