1

次のようなことを宣言する一連のマクロが必要です。

#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.

ありがとう!

4

2 に答える 2

1

プリプロセッサは、コンパイラの入力フェーズ以外の環境で動作することを意図していないため、スタンドアロンでの使用にのみ意味のある機能を提供しません。

于 2012-04-19T19:33:56.403 に答える
1

あなたの考えは理解できますが、CPP の代わりに PHP のようなスクリプト言語をコード ジェネレーターとして使用することをお勧めします。

例は次のとおりです。

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.
};
于 2012-04-19T20:55:43.103 に答える