关于#宏定义#的问题,如何解决?

题目要求宏定义,但是我不太懂,就看例子定义,写完运行程序是:Segmentation fault。

img


我写的代码是

#include
#define LEAP_YEAR(y) j(y)

void j(int y);

int main()
{
    int y;
    scanf("%d", &y);
    LEAP_YEAR(y);
    return 0;
}

void j(int y){
    if(y%400==0 || y%4==0 && y%100!=0){
        printf('L');
    }
    else{
        printf('N');
    }
}

printf("L");
字符串用双引号

printf第一个参数必须用字符串,不能用char:

#include<stdio.h>
#define LEAP_YEAR(y) j(y)
 
void j(int y);
 
int main()
{
    int y;
    scanf("%d", &y);
    LEAP_YEAR(y);
    return 0;
}
 
void j(int y){
    if(y%400==0 || y%4==0 && y%100!=0){
        printf("L"); // 双引号
    }
    else{
        printf("N"); // 双引号
    }
}
 

让你宏定义实现逻辑,你定义了个函数然后宏定义调用函数,这不符合题意


#include<stdio.h>
#define LEAP_YEAR(y) ((y%4==0)&&(y%100!=0)||(y%400==0))?'L':'N'
    
int main()
{
    int y;
    scanf("%d", &y);
    printf("%c",LEAP_YEAR(y));
    return 0;
}

参考下面的方法,可行还望采纳,谢谢,

#include <stdio.h>
#define LEAP_YEAR(y) ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0))

int main() {
    int year;
    scanf("%d", &year);
    if (LEAP_YEAR(year)) {
        printf("L");
    } else {
        printf("N");
    }
    return 0;
}