问题标签 [variadic-macros]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1925 浏览

c - 如何将参数传递给可变参数宏?

我有一个可变参数函数:

它应该这样调用:

但是,我想编写一个可变参数宏以使其更易于调用:

这样开发人员就可以使用以下方式调用它:

代替

但是,这两种方法都给我一个编译器错误。

这是可能的还是我在浪费时间?我以前从未使用过可变参数函数,所以不确定。我的函数有效......我使用完整的声明调用它,并将它写入我想要的文件。

0 投票
2 回答
1672 浏览

c++ - 如何为连接字符串生成可变参数宏

我被困在这里...

p> 即使有 20 个参数,我如何生成 CONCAT 宏?也许我可以使用BOOST_PP_SEQ_FOR_EACH但我不明白该怎么做?

0 投票
1 回答
4809 浏览

c - 避免“ISO C99 需要使用其他参数”

使用 gcc 4.6.3(使用 -ansi -pedantic),我得到以下代码:

当被称为:

我收到警告:

警告:ISO C99 要求使用剩余参数

当被称为:

我不。我怎么能压制这个?

0 投票
1 回答
2507 浏览

c - 使用 __VA_ARGS__ 强制转换 MACRO 中传递的所有参数

我有一个FOO(...)接收未知数量参数的宏。我想将所有这些参数转换为 uint。有没有办法实现它?

0 投票
2 回答
1105 浏览

c++ - 重载宏

我试图通过参数的数量来重载宏。
当然,我实际上不能重载宏。

我试过使用可变参数宏来选择正确的宏(使用如果__VA_ARGS__不存在它应该删除它之前的最后一个逗号的事实 - GCC参考):

这个想法是,如果__VA_ARGS__存在,它应该将 4 个参数传递给CHOOSER,其中第三个参数应该与未使用的参数一起“消失”。所以会选择 TEST1。

如果没有参数,则该参数__VA_ARGS__将为空,并且应该已删除昏迷,因此将选择并使用TEST2 。

所以,我想这不起作用,因为__VA_ARGS__可能仅在预处理阶段结束时才被删除,在整个事情已经扩展之后。

那么,我该怎么做呢?(在 vs2010 中)

0 投票
3 回答
827 浏览

macros - 如何在 GNU Make 中使用 $(call ...) 做可变参数宏

我创建了一个宏以在makefile中使用,如下所示:

我可以通过以下方式解决它:

...但我很好奇是否有任何东西为可变参数宏提供更明确的支持。

0 投票
1 回答
10333 浏览

c - C语言中的#define,带有三个点

这是这两个宏的定义;稍后在代码中LOGILOGW以这种方式使用

这样

由于我尽量避免使用复杂的宏,而且#define总的来说,我无法理解这个宏的实际含义。3 点符号在这里的作用是什么?#define稍后在代码中会发生什么变化?

显然我知道这 3 个点是用来表示和不定数量的论点,但我不知道如何阅读这种情况。

0 投票
2 回答
394 浏览

fortran - C/C++ 预处理器:如何根据参数数量生成代码

我希望能够在我的预处理器宏中执行此操作

我知道 C 标准预处理器不允许重载。我也知道可变参数

至少需要一个参数,并且不允许省略括号。即使有这样的洞察力,我也不能放弃它必须是解决这个问题的一种方法的感觉。有没有人有任何聪明的想法如何做到这一点?

使用示例:

背景:我实际上对将 C 预处理器用于我的 Fortran 代码很感兴趣。我想为变量声明开发一个简化的符号。对于独立应用程序,DBLE 将扩展到 DOUBLE PRECISION,如果我正在为具有 C 接口的库进行 C 互操作性编译,则 DBLE 将扩展到 REAL(C_DOUBLE)。但是,DBLE 在 Fortran 中是所谓的 INTRINSIC。DBLE(3) 将 3 转换为双精度浮点数。在独立模式下,它将是 3.0d0。在 C 互操作模式下,它将被转换为 3.0_C_DOUBLE。

0 投票
1 回答
373 浏览

c++ - 带有省略号的可变参数模板计数参数作为参数传递

这个问题是https://stackoverflow.com/a/5365786/383306的后续问题。

将省略号作为参数的一部分传递时,如何使宏技巧起作用?

0 投票
2 回答
527 浏览

c - 如何在宏中扩展可变参数?

我想基本上有一个宏缩短器。

宏,FOO(A,B,C)应扩展为 defined(_FOO_A) || defined(_FOO_B) || defined(_FOO_C).

在 GCC 中使用可变参数宏参数而不是实际编写 3 个函数 ( FOO(A), FOO(A,B), FOO(A,B,C)) 是否可行?