宏和函数同名

2024-04-10

我有以下代码

#define myfunc(a,b) myfunc(do_a(a), do_b(b))

void myfunc(int a, int b)
{
  do_blah(a,b);
}
int main()
{
    int x = 6, y = 7;
    myfunc(x,y);

    return 0;
}

我希望预处理器仅在调用时扩展函数 myfunc。预处理后所需的代码如下所示:

void myfunc(int a, int b)
{
  do_blah(a,b);
}
int main()
{
    int x = 6, y = 7;
    myfunc(do_a(x),do_b(y));

    return 0;
}

问题是函数定义也这样展开

void myfunc(do_a(int a), do_b(int b))
{
  do_blah(a,b);
}

有没有办法让宏仅在我们扩展函数调用时才扩展? 我尝试了很多解决方案,这似乎是不可能的,但我希望有人看到这样的情况..

注意:请不要告诉我重命名宏或函数名称:D

更新1: 谢谢你的帮助。但我只能改变宏的定义,不能改变它的位置,也不能改变函数的实现。


Use ()阻止预处理器扩展函数定义:

#include <stdio.h>

#define myfunc(a, b) myfunc(do_a(a), do_b(b))
/* if you have a preprocessor that may be non-standard
 * and enter a loop for the previous definition, define
 * myfunc with an extra set of parenthesis:
#define myfunc(a, b) (myfunc)(do_a(a), do_b(b))
 ******** */

int (myfunc)(int a, int b) /* myfunc does not get expanded here */
{
    printf("a=%d; b=%d\n", a, b);
    return 0;
}

int do_a(int a)
{
    return a * 2;
}

int do_b(int b)
{
    return b - 5;
}

int main(void)
{
    myfunc(4, 0);
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

宏和函数同名 的相关文章

随机推荐

  • Google 计算引擎负载平衡无法正确路由

    我是 Google 计算引擎的新手 我尝试设置网络负载平衡 拥有 2 个虚拟机来提供网页服务 例如 我有 2 个虚拟机 app1 和 app2 都有 apache 服务器并提供简单的网页 两个虚拟机都运行 Red Hat Enterpris
  • 绑定参数太多。提供了 5 个参数,但该语句需要 4 个参数

    执行下面的函数时 我得到上面的 IllegalArgumentException 我不明白的是 当我运行调试器时 values变量显然只包含 4 个参数 正如它应该的那样 So 1 这个神秘的第五个论点从何而来 2 我应该如何发现这个错误
  • C# 屏幕截图全窗口

    我正在尝试使用 NET Framework 编写一个控制台应用程序 我想截图我的屏幕 我已经使用过其他答案 如下所示 https stackoverflow com a 24879511 9457997 https stackoverflo
  • 在 32 位和 64 位 C# 世界中使用 System.Data.SQLite 的选项

    我了解为什么在 32 位和 64 位版本中提供 System Data SQLite dll 因此 我们不要纠缠于此 继续前进 由于采用这种方式 纯 C 开发似乎变得更加困难 需要做出 3 个选择 是只支持32位并强制有托管 编译 x86
  • jQuery - 如何编写“如果不等于”(与 == 相反)

    我需要反转以下代码 如果宽度不是 500px 如何使动画运行 image div not this each function if this css width 500px this animate width 250px 500 fun
  • 查询以比较带时间的日期和不带时间的日期 - python 使用 access db

    我需要帮助来创建查询来比较带时间的日期和不带时间的日期 我正在使用带有 access db pypyodbc 的 python 在数据库中 我有一个包含日期 时间 包括时间 的列 在Python中 我有一个日期时间对象 没有时间 我想编写一
  • 为页面创建 Like-Gate [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我已经创建了一个 Facebook 页面 我想为其添加一个所谓的 Like Gate 问题是该页面带有时间线 并且到目前为止我找到的每个教
  • Conda无法激活环境

    Microsoft Windows Version 6 1 7601 Copyright c 2009 Microsoft Corporation All rights reserved C Users gt conda env list
  • 具有多个鉴别器值的 Hibernate 子类

    您好 我有一个子类需要覆盖多个鉴别器值 就像是 DiscriminatorValue 值 ACT DNR ATT 会让我变得完美 我们有现有的数据 其中多个鉴别器可以映射到一个类 因为它们与我们的系统将视为同一事物的类型相似 您可以使用判别
  • jQuery 淡入/淡出 div 到不同的 div?

    当您单击链接或按钮时 是否可以让 div 淡出 然后在同一位置淡入具有不同内容的不同 div 显然会使用 fadeIn and fadeOut 函数 但我不确定所有代码会是什么样子 特别是定位 以及在同一页面上执行两次的能力 如果您想淡出一
  • 如果我的文件中有翻译,如何在 DSpace 中翻译或替换主题术语

    如果语言切换 我想翻译我正在维护的 DSPace 实例中 item view xsl 中显示的主题 MeSH 术语 以前我使用下面的代码 我将其添加到XSLUtils java类 来查找 Babelmesh 站点并动态翻译它 public
  • 从 groovy 方法调用顶级函数

    我认为这有一个简单的答案 但我的网络搜索找不到它 如果我有以下内容 ideone http ideone com HVR89L def f class C public h f x new C h 此操作失败并出现以下错误 No signa
  • 在 OS X 下将 ImageMagick 编译为 64 位?

    我正在尝试安装moddims http code google com p moddims 在 OS X 上 请参阅上一个问题 https stackoverflow com questions 1185106 how do i confi
  • 用于沿大矩阵对角线插入 2x2 矩阵的代码的向量化

    我正在尝试沿大矩阵 例如 10x10 的对角线对小矩阵 2x2 进行元素插入 添加重叠值 并且仅将小矩阵插入到可以完全放入大矩阵的位置 我已经使用 for 循环实现了这一点 但我很好奇该过程是否可以矢量化 function M TestDi
  • Laravel 自定义数据透视表关系和预加载?

    我在为我的一个项目创建架构 模型时遇到问题 希望在这里获得一些帮助 我目前有 3 个表 Accessories products 和数据透视表 Product accessory
  • 在 asp.net core 应用程序的调试窗口中显示 NLog 输出

    是否可以在 Visual Studio 2017 调试窗口中显示 NLog 或内置调试器 正在记录的内容 我已将 NLog 设置为输出到文件 但对于开发来说 能够在调试窗口中查看调试消息将非常方便 我可以看到有关如何使用控制台执行此操作的文
  • 获取div中的文本[重复]

    这个问题在这里已经有答案了 可能的重复 jquery 获取没有子文本的元素的文本 https stackoverflow com questions 11362085 jquery get text for element without
  • 如何在 Angular 2 中过滤具有多个复选框的范围滑块的结果?

    我正在尝试过滤给定数组 db 的结果 有三个过滤器 价格 持续时间和类别 我尝试使用 filter 方法来过滤结果 这是我尝试过的代码链接 https stackblitz com edit multiple filters file ap
  • 在 Javascript 文件中插入 PHP 变量值

    我有一个 JavaScript 文件 其中有一个硬编码的 BASEURL 变量 该值随后由文件中的其他函数使用 我希望动态设置此 url 值 这样我就不需要针对不同的安装手动更改它 是否可以将 PHP 变量值插入 JavaScript 文件
  • 宏和函数同名

    我有以下代码 define myfunc a b myfunc do a a do b b void myfunc int a int b do blah a b int main int x 6 y 7 myfunc x y return