问题标签 [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 - 忽略空的可变参数
当所有参数都传递给 HTML_A 时,此代码按预期工作:
但是,如果我想以格式调用不带参数的 HTML_A:
我在 gcc 下收到此编译错误:
demo.c:17:1:警告:ISO C99 需要使用其他参数
demo.c:在函数“main”中:
demo.c:17:错误:“,”标记之前的预期表达式
cpp 返回:
与,,
在最后。
c - 宏计数参数
为了让编译器满意,我必须计算传递给的参数,否则当 pedantic 标志打开并且只传递一个参数时A()
gcc 会引发“ ”warning: ISO C99 requires rest arguments to be used
通过这种实现,N_ARGS
我只能使用 10 个参数,是否有另一种方法来检查宏中是否有多个无限制的参数?
我知道, ## __VA_ARGS__
gcc 扩展,但我想避免警告
c - 将参数反转为可变参数宏
如何将参数反转为可变参数宏?例如,我想
我的目标是将前后参数分开:
c++ - 与 MSVC++10 兼容的预处理器变量 FOR_EACH 宏
我已经看到一些要求对可变参数FOR_EACH
宏进行变体的问题。然而不幸的是,提供的答案与 VC++10 不兼容,因为它在传递给另一个宏时将 __VA_ARGS __ 作为一个参数扩展。请有人提供仍然适用于 VC++10 的 C++11 兼容(因此向前兼容)版本。也许使用经常提到的“解决方法” #define EXPAND(x) x
,但是我不知道将其放在哪里以便获得例如该答案的后者在 VC++10 中工作的概括部分。
澄清一下,预期的行为是用于FOR_EACH(x, a, b, ...)
产生x(a) x(b), ...
,其中 x 是另一个宏。
c++ - 根据参数数量生成多个宏调用
我试图以重复的方式多次调用这个函数。
我写了以下宏:
等等 ...
我需要调用METADATA_METHODS_IMPL_N
其中N
的多个参数__VA_ARGS__
上面的代码(带BOOST_PP_OVERLOAD
)给了我不合适的结果:
这导致
我想要这样的东西:
- 有谁知道如何达到预期的结果?
- 我可以使用库为某些使用
Boost.preprocessor
自动生成吗METADATA_METHODS_IMPL_K
K in [1 .. 10]
METADATA_METHODS_IMPL_1
c++ - Variadac 宏将宏应用于所有参数
我正在试验 C++11 variadac 宏。
我试图将另一个宏应用于列表中的每个参数。
这是我的第一次尝试:
不幸的是,这不起作用。
我最终让它工作了。但这有点令人费解,并且有一个“n”的限制(其中“n”是我愿意为其键入宏的最大大小)。
所以我的问题是:我是否遗漏了一些简单的东西,可以让我iterate
沿着论证链前进?
c++ - 如何将这个变量转储调试宏增强为可变参数?
第一个工作代码:
这给出了标准错误输出(gcc):
现在我想要一个带有任意数量参数的可变参数宏,例如
DUMP(argc, argc+1);
可以工作,输出如下:
int main(int):8:argc='1',argc+1='2'
但我还没有想出一个好的解决方案。这甚至可以用宏来实现吗?如果不是,那么模板或宏和模板的组合如何?如果需要,C++11 和 Boost 都可以,如果没有标准方法,解决方案可以是gcc特定的。寻找实际代码,使可变参数 DUMP 像上面描述的那样工作,或者至少显示等效信息。
c++ - 可以通过参数数量重载宏吗?
这是如何工作的?如何实现 C99/C++11 可变参数宏以仅根据为其提供多少参数来扩展为不同的事物?
c++ - 可变参数宏,其可变参数没有参数
调用M
不带可变参数的可变参数宏是否合法?
相关的标准报价是[cpp.replace]/4:
如果宏定义中的标识符列表不以省略号结尾,则调用类函数宏时的参数数量(包括那些不包含预处理标记的参数)应等于宏定义中的参数数量。否则,调用中的参数应多于宏定义中的参数(不包括
...
)。应该存在)
终止调用的预处理令牌。
对于没有非可变参数的情况,表单中的调用M()
应该是合法的,因为调用有一个参数(不包含预处理标记)。所以比非可变参数多了一个参数。
对于具有一个非可变参数的情况,是否应该有一个尾随,
以M(1,)
引入一个不包含可变参数的预处理标记的参数?否则,参数的数量将等于非可变参数的数量。IE,
但是, Clang和GCC都接受以下测试用例:
并产生输出:
这是非标准行为吗?
c++ - C++ 可变参数宏和模板
我正在玩可变参数宏和模板。有没有什么简单的方法可以实现以下目标?
这就像 std::make_tuple。如何实现 make_my_class?我看到我可能需要“std::decay”,但我不太明白。提前非常感谢。