C プログラムのコンパイル – 裏側
プリプロセッサとは、システムソフトウェア(コンピュータのハードウェアやアプリケーションプログラム上で動作するように設計されたコンピュータプログラム)の一つです。 高レベル言語(HLL)のプリプロセスを行う。 プリプロセッシングは、言語処理システムの最初のステップである。 プリプロセッサーはC言語のスコープルールを知らない。#defineのようなプリプロセッサー命令は、見たとたんに有効になり、それを含むファイルの終わりまで有効で、プログラムのブロック構造は関係ない。
A Preprocessor は主に HLL コードに対して 3 つのタスクを実行します:
- Removing comments : すべてのコメントを削除します。 コメントは人間がコードを理解するためにのみ書かれます。 ですから、機械にとっては何の役にも立たないことは明らかです。
Linux でコメントを削除したファイルを見るには):
Cコードを書く(ファイル名を prog.c とする)。 gcc -E prog.c
あなたはコメントなしのコードの出力を見るでしょう。
このファイルは’.i ‘という拡張子で保存され、コンパイラに入力されます。 - File inclusion : プログラムが必要とするすべてのファイルをライブラリからインクルードすること。 HLLでは#includeと記述します。これはプリプロセッサに対する指示で、指定されたライブラリ・ファイルの内容をインクルードするように指示します。 例えば、#include はプリプロセッサにライブラリ・ファイル stdio.h.
のすべてのコンテンツを含めるように指示します。#include “stdio.h”
注:ファイル名が山括弧で囲まれている場合、ファイルはコンパイラの標準インクルード・パスの中で検索されます。 - マクロ展開 : マクロは、処理にかかるオーバーヘッドが少ない小さな関数として呼び出すことができます。 もし、再帰的に (何度も) 呼び出される必要がある (小さな定義を持つ) 関数を書かなければならないなら、関数よりもマクロを優先させるべきである。
#define SI 1000
はマクロの簡単な例です。
- マクロには 2 つのタイプがあります。 オブジェクト型(パラメータを取らない)と関数型(パラメータを取れる)
// object-like macro#define // function-like macro #define ()
- マクロの定義は #undef で削除できる。
#include <stdio.h>
#define MACRO(num, str) {\
printf
(
"%d"
, num);\
printf
(
" is"
);\
printf
(
" %s number"
, str);\
printf
(
"\n"
);\
}
この記事はDikshaさんより寄稿いただきました。 GeeksforGeeksが好きで、貢献したい場合は、contribute.geeksforgeeks.orgを使って記事を書いたり、[email protected] まで記事を郵送することもできます。 あなたの記事が GeeksforGeeks のメインページに表示され、他の Geeks を助けることができます
。
- マクロには 2 つのタイプがあります。 オブジェクト型(パラメータを取らない)と関数型(パラメータを取れる)