相关疑难解决方法(0)

C++预处理器__VA_ARGS__参数个数

简单的问题,我无法在网上找到答案.在可变参数宏中,如何查找参数的数量?如果它有解决方案,我可以使用boost预处理器.

如果它有所不同,我试图转换可变数量的宏参数来增强预处理器序列,列表或数组以进行进一步的重新处理.

c c++ c-preprocessor variadic-macros

90
推荐指数
8
解决办法
10万
查看次数

是否可以在C宏中放置预处理器条件?

有没有办法编写一个C预处理器宏,根据收到的参数扩展到不同的东西?

#define foo() ???

/* 1 */
foo(name)

/* 2 */
foo(_)
Run Code Online (Sandbox Code Playgroud)

期望的结果:

/* 1 */
int name;

/* 2 */
/*ignore*/
Run Code Online (Sandbox Code Playgroud)

是的,我知道宏是邪恶的.我主要是出于好奇而问这个问题.

c macros

13
推荐指数
2
解决办法
5691
查看次数

变异的宏伎俩

创建可变参数宏的技巧是什么FOO(a1, a2, a3,..., an),它可以扩展到您选择的任何预选有界范围内的FOOn(a1, a2, a3,..., an)n?也就是说,FOO(a)应该扩展FOO1(a),FOO(a, b, c)FOO3(a, b, c)等,我知道有一个标准的把戏,但我似乎无法找到它.

请随意将此问题标记为副本,如果答案中还有其他问题,请将其关闭.我怀疑有,但我找不到它.

c c-preprocessor variadic-macros

11
推荐指数
3
解决办法
2万
查看次数

C++上的预处理器重载

我目前正在完成一个库,并希望我的"调试"日志功能在编译时是可选的.

我的想法是:检查是否DEBUG已定义,然后定义我的自定义debug函数.

这就是我所做的(一部分)

#if defined(DEBUG)
    #define debug(s) Serial.println(s)
    #define debug(s,t) Serial.print(s);Serial.println(t)
#else
    #define debug(s) // s
    #define debug(s,t) // s t
#endif
Run Code Online (Sandbox Code Playgroud)

(我正在为Arduino编译;这就是为什么我需要将函数分成两部分.)

由于我花了很多时间,Serial.print成功了Serial.println,我想要的debug(s),也接受了两个"参数".

因此,在插入debug("ParamOne");debug("ParamOne", "ParamTwo");将导致定义函数.

但是,显然,只有最后定义的调试有效,否则会覆盖第一个.

我应该怎么做,保持功能的相同名称,还是有任何更"正确"的做法?

c++ compiler-construction debugging arduino c-preprocessor

1
推荐指数
1
解决办法
217
查看次数