功能和功能宏的名称可以相同吗?

时间:2014-02-04 14:51:30

标签: c macros

功能和功能宏的名称可以相同吗? 这不会导致任何问题吗?

3 个答案:

答案 0 :(得分:8)

他们可能是一样的。根据您使用名称的方式,它可以被预处理器替换。例如

//silly but just for demonstration.
int addfive(int n)
{
    return n + 5;
}
#define addfive(n) ((n) + 5)

int main(void)
{
    int a;
    a = addfive(2); //macro
    a = (addfive)(2); //function
}

代表。 MS说:http://msdn.microsoft.com/en-us/library/aa272055(v=vs.60).aspx

答案 1 :(得分:1)

http://gcc.gnu.org/onlinedocs/cpp/Function-like-Macros.html#Function-like-Macros

在这里你可以看到调用函数,其中存在一个具有相同名称的宏,而不是调用宏:) 对于gcc至少!

这不会引起任何问题,但会引起一些混乱。我不推荐这个。

答案 2 :(得分:1)

我将通过案例解释:
如果你先声明了这个函数,那么函数就像宏二,宏将过度使用该函数。即它将始终被调用而不是函数。

//Function
double squar(double x)
{
    return x*x;
}

//Macro
#define squar(x) (x*x)

另一方面,如果您先声明宏然后再使用该函数,则会出现异常,您将无法构建

//Macro
#define squar(x) (x*x)

//Function
double squar(double x)
{
    return x*x;
}

最后,在第一种情况下,你仍然可以像@Hayri一样调用函数UğurKoltuk在(squar)(5)

的回答中说here