注册 登录
编程论坛 C++教室

“宏”的问题

promising 发布于 2010-02-12 00:18, 1012 次点击
如何定义1个带参宏,使其实现2个整数的交换?
没想法啊……
若用函数是会的。
11 回复
#2
pangding2010-02-12 09:35
只带一个参数怎么交换两个数?我也不会……
#3
pangding2010-02-12 09:40
抱歉审题错误……
这样就可以,这样行吗?

程序代码:

#include <stdio.h>

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

int main(int argc, char *argv[])
{
    int a = 1, b = 2;
    swap(a, b);
    printf("%d, %d\n", a, b);

    return 0;
}

#4
promising2010-02-12 13:13
do {\......\
} while (0)
这个看不懂,麻烦再简单一点。
 又,为什么不可以直接#define swap(a,b) {int t=a;a=b;b=t}呢?

[ 本帖最后由 promising 于 2010-2-12 13:19 编辑 ]
#5
pangding2010-02-12 15:44
也应该但,这么写的话,如果这么用:
swap(a, b);
展开后就会变成:
{int t=a; a = b; b = t};
多的那个分号很别扭。

这么写你试了吗?可不可以?要是可以就这么写也没事。
#6
promising2010-02-12 17:03
分号还是要加上的,只是do {\...\} while(0)可以去掉的。
谢谢。

[ 本帖最后由 promising 于 2010-2-12 22:29 编辑 ]
#7
void没什么2010-02-15 15:55
可以用内联函数
inline void swap(a,b)
{
int c;
c=a;
a=b;
b=c;
}
我没试过,不知到行不行(但可以用指针)
#8
promising2010-02-15 18:06
那函数声明时,默认的属性说明是什么?(inline吗?)
请教了。

[ 本帖最后由 promising 于 2010-2-15 18:07 编辑 ]
#9
pangding2010-02-15 23:18
什么叫属性声明?你是指函数返回类型?他写的那个不是 void 吗?
#10
promising2010-02-16 22:08
[inline,static,virtual,friend] int swap(int ,int);
函数声明时,"[]"中的4个,哪个是默认的,只是随便问问啊。
#11
taozztzz2010-02-20 01:05
#define SWAP(a, b)
    { \
        long nTemp = a; \
        a = b; \
        b = nTemp; \
    }
#12
pangding2010-02-20 10:24
回复 10楼 promising
函数有这概念吗?我也不是很清楚。但那四个应该都不是默认的(如果有的话,可能是 auto~ )。

inline 是声明内联函数用的。它不是函数。
static 是限制函数作用域为该文件内。
剩下的那两个是类里的特殊語法。

函数可能没有变量的所谓存储类型说明的概念。变量的那个四修饰符是 auto, static, extern 和 register。
1