2010-11-26 26 views
1

免責事項:私はプログラマではありません。プリプロセッサを使用してコードを文字列に変換する

私は最近友人のプロジェクトを見ました。私が理解できない理由のために、彼は実行時にコンパイルされた文字列にコードを書きます。このようなものになり:Visual Studioがでステップと一部のプリプロセッサの虐待を使用するなど

構文強調表示を行いませんので、使用して恐ろしいです

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

、にトリックの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のすべての言及を削除しました。

+0

これは機能しませんか? char x [] = "int x = 5; \ n printf(\"%i \ "、x)"; – fazo

+0

私がしたいことの目的は、文字列に書かれたコードを構文の強調表示、「インテリセンス」などにトリックすることです。 –

+1

何をしようとしていますか?あなたがGPUから標準出力に物事を印刷しようとしているのであれば、あなたは正しい軌道にいるとは思わない... – Marm0t

答えて

3

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

私はいくつかのテストをした、と明示的に改行記号を入れても動作しているようだ:

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

は私だけではない構文を意識したIDEで、しかし、Linux上でこれをテストしてきました。これらの "見栄えの悪い"改行は、賢明な構文ハイライターによって構文エラーとしてフラグが立てられる可能性があります。

3

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

あなたはこれを何と言いますか? CUDA SDKの例を見て、.cuファイルにCUDAコードを入れて、nvccを使ってコンパイルします。構文のハイライト、インテリセンス、そしてすべてのVisual Studioの良さを持つことができます!詳細については、CUDAプログラミングガイドおよびthis postを参照してください。

+0

CUDAを使っていることのヒントをありがとう。しかし、この質問はCUDAに関するものではなく、プリプロセッサを乱用することです。 –

関連する問題