了解这种情况下的预处理器指令吗?

发布于 2024-10-16 12:27:52 字数 167 浏览 3 评论 0原文

#define swap(a,b,c)(int t;t=a;a=b;b=t;);
void main()
{
    int x=10,y=20;
    swap (x,y,int);
    printf("%d %d\n",x,y);
}

输出是什么以及为什么?

#define swap(a,b,c)(int t;t=a;a=b;b=t;);
void main()
{
    int x=10,y=20;
    swap (x,y,int);
    printf("%d %d\n",x,y);
}

What is the output and why?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

回忆凄美了谁 2024-10-23 12:27:52

最好像这样重写你的宏:

#define swap(a, b, type) \
        do { \
                type t = a; \
                a = b; \
                b = t; \
        } while (0)

Better to re-write your macro like this:

#define swap(a, b, type) \
        do { \
                type t = a; \
                a = b; \
                b = t; \
        } while (0)
紫轩蝶泪 2024-10-23 12:27:52

根据用法以及宏中未使用c 的事实,看起来宏中存在拼写错误。不应使用 int,而应使用 c

#define swap(a,b,c)(c t;t=a;a=b;b=t;);

事实上,虽然此“修复”将为您提供宏的一般概念,但它无法编译。请参阅 Peyman 的答案,它告诉您如何正确编写它。

基本上,它看起来像是一种交换 c 类型的两个变量 ab 的方法。

在您的情况下,输出将是:

20 10

此交换算法的工作方式很简单。基本上,您希望将 a 复制到 b 中,并将 b 复制到 a 中。但是,如果您只是将 b 复制到 a 中,您将丢失 a,并且您将陷入 的两个副本b。

您不只是将 b 复制到 a 中,而是首先将 a 的副本保存到名为 临时变量中>t,然后将b复制到a中,然后复制t(其中保存a的原始值) code>) 到 b 中。完成后,您就可以忘记 t

Based on the usage and on the fact that c is not used in the macro, it looks like there's a typo in the macro. Instead of using int, it should say c:

#define swap(a,b,c)(c t;t=a;a=b;b=t;);

In fact, while this "fix" will give you the general idea of the macro, it won't compile. Please see Peyman's answer which tells you how to write it correctly.

Basically, it looks like a way to swap two variables a,b of the type c.

In your case the output would be:

20 10

The way this swapping algorithm works is simple. Basically, you want to copy a into b and b into a. However, if you just copy b into a, you'll lose a, and you'll be stuck with two copies of b.

Instead of just copying b into a, you first save a copy of a into a temporary variable called t, then copy b into a, then copy t (which holds the original value of a) into b. When you're done, you can forget about t.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文