Cプログラミング言語 - プリコンパイラディレクティブ

プリコンパイラ・ディレクティブ(コンパイラの実装ではなく、C言語のコンテンツ)

メインの処理命令は、#で始まります。#INCLUDEファイルは、の#ifなどの条件付きコンパイルをマクロのに#defineを交換し、コピーのようなコードが含まれています

必要な場合は、プリコンパイル:常にコードの大きな体が頻繁に変更されていない使用しています。

前処理プロセスは、コンパイルする前に、タスクの一つは文法チェッカーをまとめたものです、文法チェッカーが前処理されていません。


#define宏

問題のタイプが存在しないマクロ定義は、それは、引数のないタイプではありません。文字だけを交換して、セキュリティチェックのないタイプがありません。
通常、ほとんどのファイルの先頭に、括弧の外側の関数、そのプログラムの適用範囲を書きます。

デフォルトのNULLによるCおよびC ++言語は、0に置き換え

1)統合デバッグツールはマクロ定数をデバッグすることはできません。

2)のみの単純な置き換えではなく、自動的に括弧を行います

3)マクロの定義はネストすることができません。

4)文字列「」永遠のマクロが含まれていません。

5)メモリを割り当てるメモリマクロの定義、変数定義を割り当てません。


マクロ機能、もはや対応するマクロパラメータ声明、単純な文字列の置き換えを置き換えません。

#define SQR(X) X*X

SQR(2+1):返回2+1*2+1 也就是5

SQR(2+1)/SQR(2+1) : 返回 2+1*2+1/2+1*2+1 返回7.5

#2マクロパラメータオペレータに接続されている文字列オペレータ##にマクロパラメータです。

自動的に交換用の動作パラメータを区別(ないパラメータ名およびオペレータを、文字は代替オペレータによって置き換えることはできません)

#define SQR(X) X*X   
SQR(1)替换成1

#define SQR(X) XY
SQR(任何数)替换成XY

#define STR(arg) #arg STR(hello)展开时为”hello”

#define NAME(y) name_##y NAME(1)展开为name_1

#undefの:マクロ定義の取り消し
の#ifdefを:マクロがすでに定義されている場合


アサート()マクロ

アサートは、()で定義され、<assert.h>マクロ(すなわち、ヘッダ・ファイルを定義します)。
エラーメッセージを出力し、その後アボートを呼び出すことにより、プログラムを終了STDERR偽(すなわち、0である)、それXianxiang;真(非ゼロ)を実行し続ける場合、そのブール値を受け付け


条件付きコンパイル場合、ヘッダファイルが導入され、#includeし#

次にヘッダーファイルは、必然的に繰り返し発生するように、他のヘッダファイルを含むことができ含むヘッダ・ファイルであり
、例えば、条件付きコンパイルに使用することができるmy_head.hヘッダに含まれている回避します。

条件付きコンパイル(条件付きコマンド・プリプロセッサ):

#ifndef _MY_HEAD_H   //如果该宏没有被定义
引入头文件
#define _MY_HEAD_H /*空宏*/  //定义空宏,就是定义成了空白符,用作标志
#elif
#else
#endif   #终止#if预处理命令


公開された46元の記事 ウォン称賛15 ビュー30000 +

おすすめ

転載: blog.csdn.net/qq_41850194/article/details/105315802