与宏同名的函数

时间:2011-05-21 12:24:51

标签: c++ c puzzle

#include<stdio.h>
void f(int a)
{
printf("%d", a);
}
#define f(a) {}

int main()
{
 /* call f : function */
}

如何拨打f(该功能)?写f(3)不起作用,因为它被{}

取代

4 个答案:

答案 0 :(得分:16)

(f)(3);是否有效?

C预处理器不会展开f内的宏( )


答案 1 :(得分:7)

int main()
{
#undef f  // clear f!
 f(3);
}

答案 2 :(得分:4)

使用函数指针实现此目的:

int main() {
    void (*p)(int a);
    p = f;
    p(3); //--> will call f(3)
    return 0;
}

答案 3 :(得分:1)

@Prasoon发布了一个解决方案,另一个解决方案可能就是为函数引入另一个名称,如果你不能改变函数的名称,那么宏的名字都不会:

#include<stdio.h>
void f(int a)
{
   printf("%d", a);
}


#define fun (f) //braces is necessary 

#define f(a) {}

int main()
{
     fun(100);
}

在线演示:http://www.ideone.com/fbTcE