swap宏

ithiker 2010-04-22 10:56:19

#include <iostream>
#define swap1(nx,ny)\
nx^=ny;\
ny^=nx;\
nx^=ny;

int main()
{
int a = 1,b=3;
swap1(a,b);
std::cout<<a<<" "<<b<<std::endl;

return 0;
}

为什么我的这个执行不了,帮忙看看
错误信息:
Compiling...
swap.cpp
E:\my_project\swap.cpp(3) : error C2143: syntax error : missing ';' before '^='
E:\my_project\swap.cpp(3) : error C2501: 'nx' : missing storage-class or type specifiers
E:\my_project\swap.cpp(3) : error C2143: syntax error : missing ';' before '^='
E:\my_project\swap.cpp(3) : error C2017: illegal escape sequence
E:\my_project\swap.cpp(4) : error C2143: syntax error : missing ';' before '^='
E:\my_project\swap.cpp(4) : error C2501: 'ny' : missing storage-class or type specifiers
E:\my_project\swap.cpp(4) : error C2143: syntax error : missing ';' before '^='
E:\my_project\swap.cpp(4) : error C2017: illegal escape sequence
E:\my_project\swap.cpp(5) : error C2143: syntax error : missing ';' before '^='
E:\my_project\swap.cpp(5) : error C2501: 'nx' : missing storage-class or type specifiers
E:\my_project\swap.cpp(5) : error C2086: 'nx' : redefinition
E:\my_project\swap.cpp(5) : error C2143: syntax error : missing ';' before '^='
E:\my_project\swap.cpp(10) : error C2017: illegal escape sequence
...全文
199 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Slient__Fish 2011-06-11
  • 打赏
  • 举报
回复
目前了解到的有SWAP(val1, val2)三种,各有优缺点
#define SWAP(x, y) \
do \
{ \
(x) = (x) ^ (y) \
(y) = (x) ^ (y); \
(x) = (x) ^ (y); \
} while (0)

#define SWAP(a, b) \
do \
{ \
typeof(a) tmp; \
tmp = (a); \
(a) = (b); \
(b) = tmp; \
} while (0)

#define SWAP(m, n) \
do \
{ \
(x) = (x) - (y)\
(y) = (x) - (y)\
(x) = (x) + (y)\
} while (0)

第一种:优点有,不用担心数据交换过程中出现溢出
缺点有,不能实现float型数据的交换(无法处理含小数点数据)

第二种:优点是,相对第一种而言,他可以进行更多类型的数据交换
缺点是,有少数编译器不支持typeof 关键字的用法

第三种:优点是,相对第二种而言,他不收编译器的限制,可以进行多种类型数据交换
缺点是,在想x + y或x - y 过程中可能会溢出
xhd3767 2010-04-22
  • 打赏
  • 举报
回复
难道不叫jf
编程-鸟人-_-- 2010-04-22
  • 打赏
  • 举报
回复
宏定义,尽量还是在一行比较好。尽量减少出错的元素。
柯本 2010-04-22
  • 打赏
  • 举报
回复
#define swap1(nx,ny)\
nx^=ny;\
ny^=nx;\
nx^=ny;

你的\后面有空格,将所有\后面的空格去掉就OK了(前面加空格)
ithiker 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lylm 的回复:]
多行也行,但是\后不能有空格
[/Quote]
谢谢,明白了.
poppoo1986 2010-04-22
  • 打赏
  • 举报
回复
#define min_t(type,x,y) \
({ type __x = (x); type __y = (y); __x < __y ? __x: __y; })

参考下
lylm 2010-04-22
  • 打赏
  • 举报
回复
多行也行,但是\后不能有空格
「已注销」 2010-04-22
  • 打赏
  • 举报
回复
每天回帖即可获得10分可用分!小技巧
lylm 2010-04-22
  • 打赏
  • 举报
回复
写一行得了
#define swap1(nx,ny) nx^=ny;ny^=nx;nx^=ny;

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧