web-dev-qa-db-ja.com

Cプリプロセッサからメッセージを印刷するポータブルな方法はありますか?

次のようなことができるようになりたい

#print "C Preprocessor got here!"

デバッグ用。これを行うための最良/最も移植性の高い方法は何ですか?

81
Andrew Wagner

warningディレクティブはおそらく最も近いものですが、完全にプラットフォームに依存しているわけではありません。

#warning "C Preprocessor got here!"

知る限り、これはpragmaディレクティブを使用する必要があるMSVCを除くほとんどのコンパイラで機能します。

#pragma message ( "C Preprocessor got here!" )
95
You

以下は [〜#〜] msvc [〜#〜] 、および [〜#〜] gcc [〜#〜] でサポートされています。

#pragma message("stuff")
#pragma message "stuff"

Clangは最近サポートを追加し始めました。詳細は here をご覧ください。

46
Matt Joiner

試してみてください:#pragma message("Hello World!")

11
Ruel

ほとんどのCコンパイラは#warningディレクティブを認識するため、

 #warning "Got here"

標準の '#error'ディレクティブもあります。

 #error "Got here"

すべてのコンパイラーがサポートしていますが、コンパイル/プリプロセスも停止します。

8
nos
#pragma message("foo")

よく働く。また、-Werrorを使用してもコンパイルは停止しません。

6
Martin

別の解決策は、コメントとシェルスクリプトを使用してそれらを処理することです。これにはある程度の規律が必要です(またはタイプミスを検出するシェルスクリプト)。

たとえば、_//TODO_という形式のコメントを追加してから、それらすべてをレポートに収集するシェルスクリプトを追加します。

より複雑なユースケースについては、独自の単純なプリプロセッサを作成してみてください。たとえば、ソースを_*.c2_ファイルとして編集できます。単純なプリプロセッサはソースを読み取り、_//TODO_を探し、printf("TODO ...")を出力_*.c_ファイルに書き込みます。

0
Aaron Digulla