可变参数分析与宏分析实例

1.#include <stdio.h>
#include <malloc.h>

#define MALLOC(type, n) (type*)malloc(n * sizeof(type))

int main()
{
    int* p = MALLOC(int, 5);
    
    int i = 0;
    
    for(i=0; i<5; i++)
    {
        p[i] = i + 1;
        
        printf("%d\n", p[i]);
    }
    
    free(p);
    
    return 0;
}

2.#include <stdio.h>

int add(int a, int b)
{
    return a + b;
}

int mul(int a, int b)
{
    return a * b;
}

int _min_(int a, int b)
{
    return a < b ? a : b;
}

int main()
{
    int i = 1;
    int j = 10;
    
    printf("%d\n", mul(add(1, 2), add(3, 4)));
    printf("%d\n", _min_(i++, j));
    
    return 0;
}

3.#include <stdio.h>

#define ADD(a, b) a + b
#define MUL(a, b) a * b
#define _MIN_(a, b) ((a) < (b) ? (a) : (b))

int main()
{
    int i = 1;
    int j = 10;
    
    printf("%d\n", MUL(ADD(1, 2), ADD(3, 4)));
    printf("%d\n", _MIN_(i++, j));
    
    return 0;
}

4.#include <stdio.h>

#define RESET(p, len) while( len > 0) ((char*)p)[--len] = 0

void reset(void* p, int len)
{
    while( len > 0 )
    {
        ((char*)p)[--len] = 0;
    }
}

int main()
{
    int array[] = {1, 2, 3, 4, 5};
    int len = sizeof(array);
    
    reset(array, len);
    RESET(array, len);
    
    return 0;
}

说明:

1.可变参数是C语言提供的一种函数设计技巧
2.可变参数的函数提供了一种更方便的函数调用方式
3.可变参数必须顺序的访问
4.无法直接访问可变参数列表中间的参数值

5.宏和函数并不是竞争对手
6.宏能够接受任何类型的参数, 效率高 效率高, 易出错 易出错
7.函数的参数必须是固定类型, 效率稍低 效率稍低, 不易出错 不易出错
8.宏可以实现函数不能实现的功能

posted @ 2016-12-12 09:46  王小波私人定制  阅读(308)  评论(0编辑  收藏  举报
DON'T FORGET TO HAVE FUN