lili200238 发表于 2016-11-7 15:40:24

关于“宏定义中的两道衣裳命令的情形“

#include<stdio.h>
#define exchange(a,b)
{
int t;\
t=a;\
a=b;\
b=t;\
}

int main()
{
        int x=10 ;
        int y=20 ;
        printf("x=%d ; y=%d \n", x , y );

        exchange(x,y);
        printf("x=%d ; y=%d \n", x , y );
}

今天看到一个宏定义的练习,代码如上,运行显示错误,提示如图,请知道的鱼油帮忙解答下!!!
error C2449: found '{' at file scope (missing function header?)
error C2059: syntax error : '}'

lili200238 发表于 2016-11-7 15:50:12

#include<stdio.h>
#define exchange(a,b) \
{\
int t;\
t=a;\
a=b;\
b=t;\
}

int main()
{
        int x=10 ;
        int y=20 ;
        printf("x=%d ; y=%d \n", x , y );

        exchange(x,y);
        printf("x=%d ; y=%d \n", x , y );
}

改成这样就OK了,但原因还是没明白,请各位鱼油出来指点指点!!!

鱼C篮球 发表于 2023-12-6 17:31:28

#include<stdio.h>
#define exchange(a,b)
{
int t;\
t=a;\
a=b;\
b=t;\
}

int main()
{
      int x=10 ;
      int y=20 ;
      printf("x=%d ; y=%d \n", x , y );

      exchange(x,y);
      printf("x=%d ; y=%d \n", x , y );
}

@FishC_GPT

FishC_GPT 发表于 2023-12-6 17:32:02

鱼C篮球 发表于 2023-12-06 17:31
#include
#define exchange(a,b)
{
int t;\
t=a; ...

首先,你的代码中定义了一个宏exchange(a,b),但是宏定义应该是不需要加大括号的。另外,还需要包含stdio.h头文件来使用printf函数。

修改后的代码如下:

#include <stdio.h>

#define exchange(a,b) \
{ \
    int t = a; \
    a = b; \
    b = t; \
}

int main()
{
    int x = 10;
    int y = 20;
    printf("x=%d ; y=%d \n", x, y);

    exchange(x, y);
    printf("x=%d ; y=%d \n", x, y);
}

这段代码中,我们定义了一个宏exchange(a,b),用于交换两个变量的值。在main函数中,我们首先初始化了变量x和y的值分别为10和20,然后使用printf打印出它们的当前值。

接下来,我们调用exchange宏来交换变量x和y的值。具体实现是通过一个临时变量t来暂存变量a的值,然后将a赋值为b,再将b赋值为t。这样,变量x和y的值就完成了交换。

最后,我们再次使用printf来验证交换是否成功。现在你可以运行代码并观察输出结果,看看变量x和y的值是否被成功交换了。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 关于“宏定义中的两道衣裳命令的情形“