吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2224|回复: 9
收起左侧

[已解决] C语言如何定义函数式宏,交换两个变量的值

[复制链接]
mxwawaawxm 发表于 2019-7-20 22:07
本帖最后由 mxwawaawxm 于 2019-7-25 19:38 编辑

2019-07-20_220229.png
如图。要求定义一个函数式宏,交换两个变量的值
[C] 纯文本查看 复制代码
#define swap(type,a,b)

[C] 纯文本查看 复制代码
swap(int,x,y)

请问如何实现

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

testicles 发表于 2019-7-20 22:28
#define swap(type, a, b) do {      
    type t;
    t = a;
    a = b;
    b = t;
            } while (0);
nbqdbltt 发表于 2019-7-21 00:32
 楼主| mxwawaawxm 发表于 2019-7-21 20:39
testicles 发表于 2019-7-20 22:28
#define swap(type, a, b) do {      
    type t;
    t = a;

试了下不行。
报错
[Asm] 纯文本查看 复制代码
error: unknown type name 'type'; did you mean 'typeof'?
     type t;
     ^~~~
     typeof

2019-07-21_203808.png
[C] 纯文本查看 复制代码
#include <stdio.h>

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

int main(void)
{
    int a=5, b=4;
    swap(int, a, b);
    printf("a = %d, b = %d\n", a, b);
    return 0;
}
 楼主| mxwawaawxm 发表于 2019-7-21 20:40
nbqdbltt 发表于 2019-7-21 00:32
楼上正解。。。。。

试了下。不行。报错如上图所示
https://www.52pojie.cn/forum.php ... 67&pid=26979364
testicles 发表于 2019-7-21 21:23
本帖最后由 testicles 于 2019-7-21 21:39 编辑

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

记起来了要加 \
楼主有百度云账号么?能借用下载资料么

免费评分

参与人数 1吾爱币 +2 热心值 +1 收起 理由
mxwawaawxm + 2 + 1 谢谢@Thanks!

查看全部评分

 楼主| mxwawaawxm 发表于 2019-7-21 22:08
testicles 发表于 2019-7-21 21:23
#define swap(type, a, b) do { \     
    type t; \
    t = a; \

谢谢。好像也可以不加do……while循环
至于百度帐号,你试试这两个
都是微博登陆,有效期25天左右,后面有机会持续更新
17176840940    密码  pd4327

更新 一个账号  密码             17177203450            pd2288         

来源https://www.52pojie.cn/thread-991436-1-1.html
 楼主| mxwawaawxm 发表于 2019-7-21 22:13
testicles 发表于 2019-7-21 21:23
#define swap(type, a, b) do { \     
    type t; \
    t = a; \

[C] 纯文本查看 复制代码
#include <stdio.h>

#define swap(type, a, b) type temp=a; a = b; b = temp;

int main(void)
{
    int a=5, b=6;
    swap(int, a, b);
    printf("%d %d\n", a, b);
    return 0;
}

请问,为什么这样能运行
我换成逗号运算符就不行了
[C] 纯文本查看 复制代码
#include <stdio.h>

#define swap(type, a, b) (type temp=a, a=b, b=temp)

int main(void)
{
    int a=5, b=6;
    swap(int, a, b);
    printf("%d %d\n", a, b);
    return 0;
}
8bit 发表于 2019-7-22 00:04
在编译前,编译器会进行预处理,将宏定义展开,也就是按照你的宏定义去替换,使用逗号运算符时,swap(int, a, b)会被替换成int temp=a, a=b, b=temp,这个语法明显是错误的。
testicles 发表于 2019-7-22 08:30
mxwawaawxm 发表于 2019-7-21 22:13
[mw_shl_code=c,true]#include

#define swap(type, a, b) type temp=a; a = b; b = temp;

do while 是为了防止如下情形出现错误

if(...)
swap(...);

直接替换就没有大括号,意思就变了

好吧,那个百度云已经限速了

免费评分

参与人数 1热心值 +1 收起 理由
mxwawaawxm + 1 谢谢@Thanks!

查看全部评分

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-20 09:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表