gpt4 book ai didi

c - 为什么这段代码会出错?它在多行宏中使用括号。我在 GeeksforGeeks 的一篇文章中找到了这一点

转载 作者:行者123 更新时间:2023-11-30 21:43:42 25 4
gpt4 key购买 nike

这是我的程序。为什么这段代码会出错?它在多行宏中使用括号。我在 GeeksforGeeks 的一篇文章中找到了这一点

#include <stdio.h>

#define MACRO(num, str) ({\
printf("%d", num);\
printf(" is");\
printf(" %s number", str);\
printf("\n");\
})

int main(void)
{
int num;

printf("Enter a number: ");
scanf("%d", &num);

if (num & 1)
MACRO(num, "Odd");
else
MACRO(num, "Even");

return 0;
}

最佳答案

使用 clang,代码实际上可以编译,但它会给出一些警告。生成警告的原因是宏定义中的括号和大括号,或者更准确地说,是因为 if-else 语句中缺少大括号。您可以将代码重写为以下形式:

#include <stdio.h>

#define MACRO(num, str) \
printf("%d", num);\
printf(" is");\
printf(" %s number", str);\
printf("\n");

int main(void)
{
int num;

printf("Enter a number: ");
scanf("%d", &num);

if (num & 1)
{
MACRO(num, "Odd");
}
else
{
MACRO(num, "Even");
}
return 0;
}

您可以进一步简化代码:

#include <stdio.h>

#define MACRO(num, str) printf("%d is %s number\n", num, str);

int main(void)
{
int num;

printf("Enter a number: ");
scanf("%d", &num);

if (num & 1)
{
MACRO(num, "Odd");
}
else
{
MACRO(num, "Even");
}
return 0;
}

关于c - 为什么这段代码会出错?它在多行宏中使用括号。我在 GeeksforGeeks 的一篇文章中找到了这一点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35955780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com