#if 0の機能


8

今日、私はPICのプログラミングにMPLAB Xを使用し始め、コードを入力するための複数のファイルとスポットを含むコードテンプレートを見つけました。私のコードが含まれている単一のファイルがある前に。このテンプレートでは、構成ビットを配置することになっていますが、次のテキストがあります。

/* TODO Fill in your config bits here.  Remove #if 0 to embed config words.   */

#if 0

/* General syntax for configuration word 1 - Check your device .h file
for an up to date listing of available macros.*/
__CONFIG(FOSC_INTOSC & WDTE_OFF & PWRTE_OFF & MCLRE_OFF & BOREN_OFF);

/* If the device has multiple configuration words, the second macro defines
the second configuration word.  Again check your device .h file
for an up to date listing of available macros. */
__CONFIG(WRT_OFF & PLLEN_OFF & STVREN_OFF & BORV_19 & LVP_OFF);

#endif

「構成単語を埋め込むために#if 0を削除する」とは本当に理解できません。つまり...これはおそらく本当にシンプルなものです。私はグーグルでコンパイラのマニュアルを検索してみましたが、良い結果は得られませんでした。私が理解できることから、#if 0と#endifの間のコードはコンパイルされません。この埋め込みはどういう意味ですか?コードでの構成ビットの設定とその後の関係は関係していますか?

回答:


17

#if 0を少し拡張するには:
複数行のコメントを許可することは本質的にハックです。コンパイラーが実行する前に実行されるプリプロセッサーは、#if 0と一致する#endifの間のすべてを削除します。

/ * * /スタイルのコメントの代わりに使用される理由の1つは、「#if 1」に変更するだけでブロック全体を有効にできることです。


9
特に、/* */ネストしないので、コードの大きなブロックを/* */その中にすでに/* */コメントが含まれているコードで囲むと、全体が正しくコメント化されません。ただし、このライブラリの場合、よりクリーンなアプローチとして、#if defined EMBED_CONFIG_WORDS代わりに#if 0(おそらく別の構成ファイルなどで)を使用して、「構成行の埋め込みを有効にするには、この行のコメントを外す」//#define EMBED_CONFIG_WORDSというコメントのような行を使用します。
BlueRaja-Danny Pflughoeft 2012年

5

私が理解できることから、#if 0と#endifの間のコードはコンパイルされません。

はい。

この埋め込みはどういう意味ですか?コードでの構成ビットの設定とその後の関係は関係していますか?

構成ビットは、発振器の動作、電圧低下検出などを決定する、PIC内の特別にプログラムされたレジスタです。リファレンスマニュアルのいずれか:(Cで__CONFIGマクロは、アセンブリ内の対応する命令にマップ)

MPASMのCONFIGディレクティブ

マイクロチップ社のアセンブラーであるMPASMには、このプログラムの構成ビットの選択された状態をソースコードファイルで指定できる優れた機能があります。これにより、アプリケーション用のデバイスをプログラミングするときに、必要な構成もプログラムされます。これにより、間違ったデバイス構成をプログラミングするリスクが最小限に抑えられ、アプリケーションで機能しなくなる理由がわかりません。


3

正解ですが、#if 0 /#endifの間にあるコードはコンパイルされません。コードのブロックをコメント化するもう1つの方法です。

#if 0 /#endifを削除すると、PICの構成ビットでこれらのビットを有効にする__CONFIGマクロが含まれます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.