繁体   English   中英

define:有没有办法扩展参数?

[英]define: is there a way to expand arguments?

T()是一个宏

我有很多东西,比如:

MACRODOWN(T(P), T(E), T(X), T(R), T(T), T(H), T(A), T(F))
MACRODOWN(T(H), T(A), T(F))
MACRODOWN(T(Z), T(A))

我想定义一个像这样工作的宏:

MACRODOWN(TT(P,E,X,R,T,H,A,F))
MACRODOWN(TT(H,A,F))
MACRODOWN(TT(Z,A))

当然,他们会夸大上面的第一个宏。 这是可能的,如果是的话,怎么样?

答案是:不,海湾合作委员会不能做扩大论证。 C预处理器仅支持2种宏:类似对象的宏和类似函数的宏。 你正在使用的是类似函数的宏。 宏是已赋予名称的代码。 类似函数的宏通过编译器扩展其代码,但要注意这一点,只关注它的代码,而不是它的参数,如果包含其他宏,编译器也将扩展其他宏代码。 GCC的官方页面( https://gcc.gnu.org/),NEVER报告它支持参数扩展,或者我看到你想要的东西,在扩展时功能参数分离。 GCC仅支持正常的宏代码扩展(这是关于支持的宏的具体文章: https//gcc.gnu.org/onlinedocs/cpp/Macros.html ),因此在扩展时无法进行函数参数分离时间。 但是你可以像你给出的第二个例子那样完美地定义宏,但当然不会进行参数扩展。

一个增强预处理器解决方案可能是

#include <boost/preprocessor/variadic/to_seq.hpp>
#include <boost/preprocessor/seq/enum.hpp>
#include <boost/preprocessor/seq/transform.hpp>


#define TT(...) BOOST_PP_SEQ_ENUM( BOOST_PP_SEQ_TRANSFORM( TT_, _, BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__) ) )
#define TT_(_1,_2,E) T(E)

TT(A,B,C,D) // T(A),T(B),T(C),T(D)

假设可变参数支持和提升pp迭代限制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM