问题标签 [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 回答
753 浏览

c++ - 在 GCC 中欺骗预处理器 VARIADIC MACROS

我有一项工作要使静态库更安全,为此我需要替换 的格式化字符串以printf使它们在编译的静态库中以不同的方式出现,为此必须在预处理器中完成阶段 。

我所做的(它实际上在 Visual Studio 中有效)如下(这只是一个伪示例):

所有这些开销都是为了欺骗编译器接受除了字符串之外没有任何参数的打印

因此,在我的 main.c 中对其进行测试时,我尝试了以下方法并且它起作用了:

但是当切换到 GCC 时,他不喜欢第一个打印的格式,即:

并给我一个编译错误:

有什么想法可以欺骗编译器并接受它吗?或者更好的想法如何在编译后安全地重命名字符串?

0 投票
2 回答
3748 浏览

c++ - `gnu-zero-variadic-macro-arguments` 可以安全忽略吗?

考虑以下代码(现场示例)


clang++ 3.4抱怨:


我在我的项目的示例代码中使用了一些可变参数宏。

...不为可变参数宏的参数传递参数是否安全?(基本上忽略警告)

还是会导致问题?

标准是否明确禁止?

0 投票
3 回答
3425 浏览

ios - Objective C - #define 使用 __VA_ARGS__

我正在学习如何使用宏,但现在对宏感到困惑。

我正在尝试创建一个NSString连接,它只会将每个参数附加到彼此。

例如:concatOP(@"hey",@"Jude",@"Don't")将返回一个NSString包含:@"heyJudeDon't"

实际上,我编写了一些代码(也可以在此处找到一些代码)来获取参数的数量,但我没有成功完成工作的第二部分。

我实际上得到了很多错误,告诉我格式不存在或者我错过了一些“;” 或其他结束标签。

0 投票
3 回答
191 浏览

c - 如何保证可变参数的类型安全?

在 C 中,我想创建一个如下所示的函数或宏:

其中 ... 必须是 const char* 的键值对。我真的希望不遵循此规则的代码在编译时爆炸。我尝试寻找执行此操作的 __attribute((..)) 指令,但无济于事。有任何想法吗?

0 投票
1 回答
304 浏览

c - 将参数传递给可变参数宏

到目前为止,这个宏不需要是可变参数。但是为了将来的使用,我希望它是可变的。我不知道如何在可变参数宏中编写/定义参数列表以及如何使用它们。如上例,应设置并打印 p1、p2。

我这样称呼这个宏:

有人可以帮助以可变的方式实现这一目标吗?

0 投票
2 回答
104 浏览

c++11 - 是否可以使用可变参数宏来声明多重继承?

我编写了一个消息传递系统,它在很大程度上依赖于编译时机制。要接收消息,您可以从类模板继承,如下所示:

我在想有一种方法可以使用宏以一种简洁的方式简写这个符号。我如何想象要使用的宏:

有没有办法创建这样的 FEA_IS_RECEIVER 宏?

我研究了可变参数宏,但似乎无法评估它们,除非您为每个特定数量的参数编写特定的宏重载。这种方法可行,但会限制您可以订阅的消息数量。

有没有一种巧妙的方法来实现我想要做的事情?

0 投票
2 回答
2009 浏览

c - 检测 C 宏中是否存在参数

如何定义一个 C 宏IFARGS(YES, NO, ...),使得IFARGS不带附加参数的调用产生NO,而IFARGS用一个或多个参数调用产生YES

我有一个使用 GCC 的答案(见下文),但如果可能的话,我更喜欢 C99 的答案(或证明它不可能)。

0 投票
1 回答
265 浏览

c++ - 宏内的宏扩展

我正在尝试创建 LOGDEBUG 宏:

我没有使用 # 或 ## 参数对参数进行字符串化,但 g++ 显然试图对它们进行字符串化:

请注意,我不会将其转换为haystack_len宏,但编译器会这样看待它。g++ 是否隐式尝试将宏参数转换为字符串?size_tchar*

如何解决?我的意思是,我正在使用 gnu LOG_MAKEPRI 宏进行系统日志记录,是这个宏可能会造成麻烦吗?另外,有没有办法查看宏扩展的代码?

0 投票
1 回答
1981 浏览

c++ - Visual studio __VA_ARGS__ issue

I run cl /P test.cpp, the file and result is as following.

test.cpp

Cl /P test.cpp :

I wonder why the __PRETTY_FUNCTION__ are put as the last arguments in the result. I assume the result should be:

Is it an bug of VS 2010?

0 投票
2 回答
109 浏览

c - C99 中的可变参数函数释放多个数组?

目前,我有一个非常简单的函数可以在我的程序中释放双精度数组:

我希望这个函数是可变的,以便获取多个数组,并一个接一个地释放它们。我从来没有写过可变参数函数,因为可能存在指针技巧,我想知道如何做到这一点。