问题标签 [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.
c - 如何将参数传递给可变参数宏?
我有一个可变参数函数:
它应该这样调用:
但是,我想编写一个可变参数宏以使其更易于调用:
这样开发人员就可以使用以下方式调用它:
代替
但是,这两种方法都给我一个编译器错误。
这是可能的还是我在浪费时间?我以前从未使用过可变参数函数,所以不确定。我的函数有效......我使用完整的声明调用它,并将它写入我想要的文件。
c++ - 如何为连接字符串生成可变参数宏
我被困在这里...
c - 避免“ISO C99 需要使用其他参数”
使用 gcc 4.6.3(使用 -ansi -pedantic),我得到以下代码:
当被称为:
我收到警告:
警告:ISO C99 要求使用剩余参数
当被称为:
我不。我怎么能压制这个?
c - 使用 __VA_ARGS__ 强制转换 MACRO 中传递的所有参数
我有一个FOO(...)
接收未知数量参数的宏。我想将所有这些参数转换为 uint。有没有办法实现它?
c++ - 重载宏
我试图通过参数的数量来重载宏。
当然,我实际上不能重载宏。
我试过使用可变参数宏来选择正确的宏(使用如果__VA_ARGS__
不存在它应该删除它之前的最后一个逗号的事实 - GCC参考):
这个想法是,如果__VA_ARGS__
存在,它应该将 4 个参数传递给CHOOSER,其中第三个参数应该与未使用的参数一起“消失”。所以会选择 TEST1。
如果没有参数,则该参数__VA_ARGS__
将为空,并且应该已删除昏迷,因此将选择并使用TEST2 。
所以,我想这不起作用,因为__VA_ARGS__
可能仅在预处理阶段结束时才被删除,在整个事情已经扩展之后。
那么,我该怎么做呢?(在 vs2010 中)
macros - 如何在 GNU Make 中使用 $(call ...) 做可变参数宏
我创建了一个宏以在makefile中使用,如下所示:
我可以通过以下方式解决它:
...但我很好奇是否有任何东西为可变参数宏提供更明确的支持。
c - C语言中的#define,带有三个点
这是这两个宏的定义;稍后在代码中LOGI
并LOGW
以这种方式使用
这样
由于我尽量避免使用复杂的宏,而且#define
总的来说,我无法理解这个宏的实际含义。3 点符号在这里的作用是什么?#define
稍后在代码中会发生什么变化?
显然我知道这 3 个点是用来表示和不定数量的论点,但我不知道如何阅读这种情况。
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。
c++ - 带有省略号的可变参数模板计数参数作为参数传递
这个问题是https://stackoverflow.com/a/5365786/383306的后续问题。
将省略号作为参数的一部分传递时,如何使宏技巧起作用?
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)
) 是否可行?