关闭

宏函数

标签: 宏函数
485人阅读 评论(0) 收藏 举报
分类:

1. 宏函数定义的时候需要加({ })

比如

#include <stdio.h>
#define swap(a, b) ({(a)=(a)+(b);\
                     (b)=(a)-(b);\
                     (a)=(a)-(b);})

int main(int argc, const char *argv[])
{
    int array[2] = {10, 20};
    printf("array[0] = %d;array[1] = %d\n", array[0], array[1]);
    swap(array[0], array[1]);
    printf("array[0] = %d;array[1] = %d\n", array[0], array[1]);
    return 0;
}                                                         

此函数的说明

a = a + b;
b = a - b; // b = (a + b) - b = a;
a = a - b; // a = (a + b) - (a) = b;

宏函数中为了避免swap(10+3, 12) ,这种情况的出现,应该采用这种方案:

要搞定它其实很简单,别吝啬括号就行了。


2. 宏函数相似返回值的实现

#include <stdio.h>
#define swap(a, b) ({(a)=(a)+(b);\
                     (b)=(a)-(b);\
                     (a)=(a)-(b);\
                      a;})

int main(int argc, const char *argv[])
{
        int array[2] = {10, 20};
        int temp = 0;
        printf("array[0] = %d;array[1] = %d\n", array[0], array[1]);
        temp = swap(array[0], array[1]);
        printf("array[0] = %d;array[1] = %d\n", array[0], array[1]);
        printf("swap = %d\n", temp);
        return 0;
}

在 swap 中,整体的值是最后一个元素的值
即 a 的值

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:188780次
    • 积分:4386
    • 等级:
    • 排名:第6810名
    • 原创:235篇
    • 转载:13篇
    • 译文:3篇
    • 评论:12条
    博客专栏