gpt4 book ai didi

c - C 中宏的意外行为

转载 作者:太空宇宙 更新时间:2023-11-04 05:02:57 26 4
gpt4 key购买 nike

下面两段代码如何执行(除了第二行的分号,其余代码相同)

此代码预计会执行,并且也执行了。

#include<stdio.h>
#define SWAP(a, b) int t; t=a, a=b, b=t //note here is no semi-colon at the end
int main()
{
int a=10, b=12;
SWAP(a, b);
printf("a = %d, b = %d\n", a, b);
return 0;
}

但以下预计不会运行,因为 SWAP(a, b) 将被替换为 int t; t=a, a=b, b=t;;.所以两个分号应该产生错误!!!

#include<stdio.h>
#define SWAP(a, b) int t; t=a, a=b, b=t; //note the semi-colon here
int main()
{
int a=10, b=12;
SWAP(a, b);
printf("a = %d, b = %d\n", a, b);
return 0;
}

最佳答案

杂散的分号成为空语句,这在 C 中是完全合法的。

您可以通过在代码中添加一行带有十几个分号的代码来证明这一点。

另外,您的宏最好写成:

#define SWAP(a, b) do { int t = a; a = b; b = t; } while (0)

如果您尝试在单个代码块中进行两次不同的交换,这种方法效果会更好。

关于c - C 中宏的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18923212/

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