This question already has answers here:
Closed 5 years ago.
Inline functions vs Preprocessor macros
(13个答案)
如果我的程序需要一个简单的函数,比如说确定两个数的最大值,那么最好这样定义它:
#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。有什么比运行时更好用,还有什么区别吗?

最佳答案

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++));

这显然不是你想要的。

关于c - 什么是更好的? #define getmax(a,b)或int getmax(a,b),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23133778/

10-10 13:41