功能和功能宏的名称可以相同吗? 这不会导致任何问题吗?
答案 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)