variadic-macros

    0热度

    2回答

    是否可以在宏中进行无效性检查和访问? 如: #define LOG(mystruct, severity, format, ...) ({ \ severity_t current = ERROR; \ if (mystruct) { \ current = mystruct->error_level; \ } \ if (severity >=

    1热度

    2回答

    Overloading Macro on Number of Arguments https://codecraft.co/2014/11/25/variadic-macros-tricks/ 我一直在寻找上述两个环节,试图让下面的代码工作: #define _GET_NUMBER(_0, _1, _2, _3, _4, _5, NAME, ...) NAME #define OUTPUT_AR

    1热度

    1回答

    我已经得到了以下宏 #include <boost/preprocessor.hpp> #define DB_FIELD(...) BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__) #define DB_TOFIELD(type,name) \ private:\ type name##_;\ public:\ const

    0热度

    1回答

    Microsoft Visual Studio Professional 2015版本14.0.25431.01更新3在编译code below时发出错误。对我来说看起来像一个bug。 谢谢。 #include <iostream> #define A(a, b, c, ...) #__VA_ARGS__ #define B(...) A(__VA_ARGS__) int main()

    2热度

    1回答

    我需要一个宏/模板函数,将包装上的特定对象的一些方法的函数调用,即 ​​ 其中可以是任何类型的,以及销毁和Destroy可以或可能不需要0到n个参数。在这个包装内我需要做一些检查。 我希望能够调用该功能作为包装: DESTROY_CHECK(a.Destroy(p1,p2,...)) 或 DESTROY_CHECK(a, Destroy(p1,p2,...)) 我怎样才能做到这一点?

    0热度

    1回答

    我想实现一个调试打印机制,它允许运行时和编译时过滤。过滤是通过一个热门编码掩码完成的。 运行时过滤通过检查函数中的掩码来完成。如果该级别当前未设置,则返回。编译时实际上会删除对调试打印的调用。 编译时间可以很容易地实现。 #include <stdio.h> #define PRINT_LEVEL_0 (0x0) #define PRINT_LEVEL_1 (0x1) #define PR

    1热度

    1回答

    我试图编写一个宏来比较多个表达式的运行时间,并将其运行到墙上。我的问题可以浓缩为下面的代码: (defmacro test-m [& exprs] `(map #(.toString %) ~exprs)) 如果我把这种喜欢(test-m 1 2 3),我希望它可以沿着线生产代码: (map #(.toString %) [1 2 3]) 这是完全有效的。但不幸的是,这实际上导致

    0热度

    2回答

    中的ncurses printw函数这已被问到几种不同的口味。但我仍然无法实现它的工作。这是我的函数定义。 void ncurses_add_line(const char *fmt, ...) { if (ncurses_window) { va_li

    1热度

    1回答

    我需要打包一个宏以便可以使用函数访问宏。 宏的定义如下: #define gDbgLog(fmt,...) dbgLog(g_pdbg,MODULE_NAME,__FUNCTION__,fmt,##__VA_ARGS__) ,我已经试图把它包起来,如: void pMonDbgLog(char* fmt, ...) { va_list args; va_start(arg

    1热度

    2回答

    下零ARGS我想使用的宏如下所示: #define x(...) y(a,##__VA_ARGS__,b) 要扩大,像这样: x(); -> y(a,b); x(1); -> y(a,1,b); 随着-std=gnu99,它的工作原理完美。 随着-std=c99但是,它看起来像这样: x(); -> y(a,,b); x(1); -> y(a,1,b); 的##正在没有什么区别 -