1

免責事項:私はCプログラマーではありません。

最近、友達のプロジェクトを見ました。私が理解できない理由で、彼は実行時にコンパイルされる文字列でコードを書きます。これにより、次のようになります。

char x[] = "int y = 5; printf(\"%i\", y)";
run_this_code(x);

Visual Studioは介入せず、構文の強調表示などを行わないため、これを使用するのは恐ろしいことです。

プリプロセッサの悪用を使用すると、Visual Studioをだまして、実際のコードを記述していると思い込ませ、コンパイラがソースを取得する前に、プリプロセッサにそれを文字列に変換させることができます。これは機能します:

#define STRINGIFY(x) #x

int main(void){
        char[] y = STRINGIFY(
                int x = 5;
                printf("%i", x);
        );
        printf("%s", y);
}

これに伴う問題は、それが印刷されることです:

int x = 5; printf("%i\n", x);

問題は、ランタイムコンパイラが1行目にエラーを表示することです。改行を含める方法はありますか?

更新これは私の問題ではありません。それは他の誰かのコードです、私はちょうど彼の生活を楽にするためにプリプロセッサを使うという考えに興味を持ちました。なぜ彼がこんな風にやっているのか分かりません。

この質問はCUDAではなくプリプロセッサに関するものであるため、アップデートによりCUDAに関するすべての言及が削除されました。

4

2 に答える 2

3

私は最初に、改行をエスケープするだけで十分であることを提案しました。確認する(そして質問の所有者によるコメントを見る)時間があったので、私はそれがそれをカットしないことに気づきました。

私はいくつかのテストを行いましたが、改行記号を明示的に入力すると機能するようです。

char[] y = STRINGIFY(
                int x = 5;\n
                printf("%i", x);\n
        );

ただし、これはLinuxでのみテストしており、構文対応のIDEではテストしていません。これらの「むき出しの」改行は、巧妙な構文ハイライトによって、代わりに構文エラーとしてフラグが立てられる可能性があります。

于 2010-11-26T10:25:35.377 に答える
3

CUDAでコーディングする場合、コンパイルする文字列ですべてのコードをグラフィックカードに送信する必要があります。

何があなたにこれを言わせるのですか?CUDA SDKの例を見てください。CUDAコードを.cuファイルに入れて、を使用してコンパイルすることができますnvcc。構文の強調表示、インテリセンス、およびすべてのVisualStudioの優れた機能を利用できます。詳細については、CUDAプログラミングガイドとこの投稿を参照してください。

于 2010-11-26T12:53:43.810 に答える