【发布时间】:2009-11-15 05:11:35
【问题描述】:
面对是否可以在预处理器中选择#includes 的问题时,我立即认为不可能。
.. 只是后来发现它确实是可能的,你只需要注意参数扩展(例如 Boost.Preprocessor 可以处理)。
虽然我会尽可能避免为包含实际执行此操作,但我想知道为什么会这样。目前我无法对 C++ 或 C 标准有一个有用的理解。
任何预处理器指令都允许参数化宏吗? (#define/#undef除外)
有人可以参考允许这样做的地方并进行总结吗?
为简单起见,使用 Boost.Preprocessor 的好奇示例:
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/stringize.hpp>
#define INC_LOCAL(a,b) BOOST_PP_STRINGIZE(BOOST_PP_CAT(BOOST_PP_CAT(a,b),.h))
#define INC_GLOBAL(a,b) BOOST_PP_CAT(BOOST_PP_CAT(<,a),BOOST_PP_CAT(b,>))
#include INC_LOCAL(loc,al) // #include "local.h"
#include INC_GLOBAL(vect,or) // #include <vector>
更新: 引用 C 标准,澄清问题。
【问题讨论】:
标签: c++ macros c-preprocessor