宏函数

来源:互联网 发布:centos 7 官网下载 编辑:程序博客网 时间:2024/05/16 08:45

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
原创粉丝点击