与宏同名的函数

发布于 2024-11-09 09:10:26 字数 221 浏览 0 评论 0原文

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

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

如何调用f(函数)?编写 f(3) 不起作用,因为它被 {} 替换

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

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

How to call f (the function)? Writing f(3) doesn't work because it is replaced by {}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

岁吢 2024-11-16 09:10:26

(f)(3); 有效吗?

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


Does (f)(3); work?

The C preprocessor doesn't expand the macro f inside ( ).


飞烟轻若梦 2024-11-16 09:10:26
int main()
{
#undef f  // clear f!
 f(3);
}
int main()
{
#undef f  // clear f!
 f(3);
}
时间你老了 2024-11-16 09:10:26

使用函数指针来实现这一点:

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

Use function pointer to achieve this:

int main() {
    void (*p)(int a);
    p = f;
    p(3); //--> will call f(3)
    return 0;
}
最冷一天 2024-11-16 09:10:26

@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

One solution is posted by @Prasoon, another could be just introducing another name for the function, IF you can't change the function's name, neither the macro's name:

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


#define fun (f) //braces is necessary 

#define f(a) {}

int main()
{
     fun(100);
}

Online demo : http://www.ideone.com/fbTcE

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文