什么是更好的? #define getmax(a,b)或int getmax(a,b)

时间:2014-04-17 12:57:27

标签: c runtime c-preprocessor

如果我的程序需要一个简单的函数,让我们说最多确定两个数字,最好定义它:

#define getmax(a, b) ((a)>(b)?(a):(b))

int getmax(int a, int b)
{
    return a>b?a:b;
}

我制作了一个打印getmax(a, b)

的简单程序
#include<stdio.h>
#define getmax(a, b) ((a)>(b)?(a):(b))

int main()
{
    int i, j;
    for( i = 0; i < 100; i++)
        for( j = 0; j < 100; j++)
            printf("%d\n", getmax(i, j));
    return 0;
}

#include<stdio.h>

int getmax(int a, int b)
{
    return a>b?a:b;
}

int main()
{
    int i, j;
    for( i = 0; i < 100; i++)
        for( j = 0; j < 100; j++)
            printf("%d\n", getmax(i, j));
    return 0;
}

我测试了两个程序10次并计算了平均运行时间。对于第一个程序,平均值为0.8880秒,第二个程序平均值为0.8575。什么是更好的使用,除了运行时还有其他区别吗?

1 个答案:

答案 0 :(得分:2)

int getmax(int a, int b)
{
    return a>b?a:b;
}

优于

#define getmax(a, b) ((a)>(b)?(a):(b))

因为考虑做

getmax(a++,b++);

使用define宏,你得到

((a++)>(b++)?(a++):(b++));

这可能不是你想要的。