我想要一组声明这样的东西的宏:
#define DECL_ITEM( var_name, type, array, flags, comment ) \
type var_name array, ///< comment
不幸的是,预处理器将剥离///< comment
。
是否有任何技巧可以让我的宏输出变量声明及其注释?
我希望
DECL_ITEM( var1, int, [ 10 ], 0, "What var1 stands for." )
输出如:
int var1[ 10 ], ///< What var1 stands for.
谢谢!
答案 0 :(得分:1)
预处理器不适用于编译器输入阶段以外的任何环境,因此不提供仅对独立使用有意义的功能。
答案 1 :(得分:1)
我理解您的想法,但建议您使用PHP等脚本语言作为代码生成器而不是CPP。
一个例子是:
class MetaInfo
{
public $name;
public $type;
public $arr_w;
public $flags;
public $comment;
public function __construct( $n, $t, $a, $f, $c )
{
$this->name = $n;
$this->type = $t;
$this->arr_w = $a;
$this->flags = $f;
$this->comment = $c;
}
};
function decl_db( $db_defs )
{
echo '
struct dataBase
{
';
foreach( $db_defs as $def )
{
if ( $def->arr_w == "" )
$decl="\t$def->type $def->name; ///< $def->comment\n";
else
$decl="\t$def->type $def->name[ $def->arr_w ]; ///< $def->comment\n";
print $decl;
}
echo '
};
';
}
// ------------------------------------------------------------
// Custom DB definitions.
$db_defs = array(
new MetaInfo( "var1", "int", "10", "0", "What var1 stands for." ),
);
decl_db( $db_defs );
它应输出:
struct dataBase
{
int var1[ 10 ], ///< What var1 stands for.
};