问题标签 [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++ - 在 GCC 中欺骗预处理器 VARIADIC MACROS
我有一项工作要使静态库更安全,为此我需要替换 的格式化字符串以printf
使它们在编译的静态库中以不同的方式出现,为此必须在预处理器中完成阶段 。
我所做的(它实际上在 Visual Studio 中有效)如下(这只是一个伪示例):
所有这些开销都是为了欺骗编译器接受除了字符串之外没有任何参数的打印
因此,在我的 main.c 中对其进行测试时,我尝试了以下方法并且它起作用了:
但是当切换到 GCC 时,他不喜欢第一个打印的格式,即:
并给我一个编译错误:
有什么想法可以欺骗编译器并接受它吗?或者更好的想法如何在编译后安全地重命名字符串?
c++ - `gnu-zero-variadic-macro-arguments` 可以安全忽略吗?
考虑以下代码(现场示例):
clang++ 3.4抱怨:
我在我的项目的示例代码中使用了一些可变参数宏。
...
不为可变参数宏的参数传递参数是否安全?(基本上忽略警告)
还是会导致问题?
标准是否明确禁止?
ios - Objective C - #define 使用 __VA_ARGS__
我正在学习如何使用宏,但现在对宏感到困惑。
我正在尝试创建一个NSString
连接,它只会将每个参数附加到彼此。
例如:concatOP(@"hey",@"Jude",@"Don't")
将返回一个NSString
包含:@"heyJudeDon't"
实际上,我编写了一些代码(也可以在此处找到一些代码)来获取参数的数量,但我没有成功完成工作的第二部分。
我实际上得到了很多错误,告诉我格式不存在或者我错过了一些“;” 或其他结束标签。
c - 如何保证可变参数的类型安全?
在 C 中,我想创建一个如下所示的函数或宏:
其中 ... 必须是 const char* 的键值对。我真的希望不遵循此规则的代码在编译时爆炸。我尝试寻找执行此操作的 __attribute((..)) 指令,但无济于事。有任何想法吗?
c - 将参数传递给可变参数宏
到目前为止,这个宏不需要是可变参数。但是为了将来的使用,我希望它是可变的。我不知道如何在可变参数宏中编写/定义参数列表以及如何使用它们。如上例,应设置并打印 p1、p2。
我这样称呼这个宏:
有人可以帮助以可变的方式实现这一目标吗?
c++11 - 是否可以使用可变参数宏来声明多重继承?
我编写了一个消息传递系统,它在很大程度上依赖于编译时机制。要接收消息,您可以从类模板继承,如下所示:
我在想有一种方法可以使用宏以一种简洁的方式简写这个符号。我如何想象要使用的宏:
有没有办法创建这样的 FEA_IS_RECEIVER 宏?
我研究了可变参数宏,但似乎无法评估它们,除非您为每个特定数量的参数编写特定的宏重载。这种方法可行,但会限制您可以订阅的消息数量。
有没有一种巧妙的方法来实现我想要做的事情?
c - 检测 C 宏中是否存在参数
如何定义一个 C 宏IFARGS(YES, NO, ...)
,使得IFARGS
不带附加参数的调用产生NO
,而IFARGS
用一个或多个参数调用产生YES
?
我有一个使用 GCC 的答案(见下文),但如果可能的话,我更喜欢 C99 的答案(或证明它不可能)。
c++ - 宏内的宏扩展
我正在尝试创建 LOGDEBUG 宏:
我没有使用 # 或 ## 参数对参数进行字符串化,但 g++ 显然试图对它们进行字符串化:
请注意,我不会将其转换为haystack_len
宏,但编译器会这样看待它。g++ 是否隐式尝试将宏参数转换为字符串?size_t
char*
如何解决?我的意思是,我正在使用 gnu LOG_MAKEPRI 宏进行系统日志记录,是这个宏可能会造成麻烦吗?另外,有没有办法查看宏扩展的代码?
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?
c - C99 中的可变参数函数释放多个数组?
目前,我有一个非常简单的函数可以在我的程序中释放双精度数组:
我希望这个函数是可变的,以便获取多个数组,并一个接一个地释放它们。我从来没有写过可变参数函数,因为可能存在指针技巧,我想知道如何做到这一点。