3

これはばかげた質問かもしれませんが、好奇心から、そのようなことが可能かどうか知りたかったのです。

関数があるとしましょう

void Foo(int a)
{
 ...
}

そして、私はこのようなことをしたい

@pragma mypragma
void Foo(int a)
{
 ...
}

コンパイル時にこれを生成したい(プラグマmypragmaが関数の前に定義されている場合)

void Foo(void * ptr, int a)
{
    Foo(a);
}

void Foo(int a)
{
 ...
}

または戻り値付き

int Foo(void * ptr, int a)
{
    return Foo(a);
}

int Foo(int a)
{
 ...
}

編集:いくつかの例。私が欲しいのはOpenMPに似ています

4

2 に答える 2

0

もちろん、David が示唆しているように、これには C プリプロセッサを使用できますが、手元にもっと複雑なタスクがある場合は、必要なコードを生成するための他のツールを検討する必要があります。

私が使用しているプリプロセッサの例には、m4およびpython.

python想定している構文により適しているようですが、プリプロセッサとして実行することはできません。目的の出力を生成するには、ファイルに対してpython プログラムを実行する必要があります。

m4一方、 は実際のプリプロセッサです。つまりm4、コンパイラが C プリプロセッサを介して C ファイルをフィードするのと同じように、基本的にソース ファイルを に直接フィードします。その構文は非常に機能的なスタイルであり、何を達成したいかによって、良い場合も悪い場合もあります。

于 2013-09-09T19:51:38.813 に答える