工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> C言語

C言語 プリプロセッサとマクロ: #include, #define, 条件付きコンパイルをマスター

C言語 プリプロセッサとマクロ

C言語のプリプロセッサの力を探る:ヘッダインクルード、定数/関数マクロ定義、条件付きディレクティブによるコンパイルフロー制御。

C言語 プリプロセッサとマクロ: #include, #define, 条件付きコンパイルをマスター

Cプリプロセッサはコンパイラの前に実行され、マクロ展開、ヘッダファイルインクルード、条件文評価によりソースコードを変換します。柔軟で再利用可能なコードを書くための必須ツールです。

すべてのプリプロセッサディレクティブは#シンボルで始まります。例:

#define PI 3.14

ヘッダファイルのインクルード: #include

#includeディレクティブは、ヘッダファイルの内容をソースファイルに直接挿入します。一般的な用法:

#include <stdio.h>

#include <stdio.h>なしでは、printf()やscanf()は未定義になります。独自ヘッダも作成可能:

#include "my_header.h"

独自ヘッダは関連関数宣言と定数のグループ化に便利です。

定数と式の定義: #define

マクロは、トークンや式をコンパイル前に値で置換します。例:

#define c 299792458 /* 光速 */

プログラム内でcを使うと299792458に展開されます。

例1: PIの定義

#include <stdio.h>
#define PI 3.1415
int main() {
    float radius, area;
    printf("半径を入力: ");
    scanf("%f", &radius);
    area = PI * radius * radius;
    printf("Area=%.2f", area);
    return 0;
}

関数風マクロ

マクロは引数を取れ、インライン関数のように機能します:

#define circleArea(r) (3.1415 * (r) * (r))

circleArea(5)は(3.1415 * 5 * 5)に展開されます。

例2: 関数風マクロの使用

#include <stdio.h>
#define PI 3.1415
#define circleArea(r) (PI * (r) * (r))
int main() {
    float radius, area;
    printf("半径を入力: ");
    scanf("%f", &radius);
    area = circleArea(radius);
    printf("Area = %.2f", area);
    return 0;
}

条件付きコンパイル

条件付きディレクティブを使うと、実行前ではなくコンパイル時にコードブロックをインクルード/除外できます。if文に似ていますが、事前に評価されます。

主なユースケース

主要ディレクティブ

#ifdef MACRO /* MACRO定義時のコード */ #endif
#if EXPRESSION /* EXPRESSION非ゼロ時のコード */ #else /* ゼロ時のコード */ #endif
#if EXPRESSION /* コード */ #elif ANOTHER_EXPRESSION /* 代替コード */ #else /* フォールバックコード */ #endif
#if defined BUFFER_SIZE && BUFFER_SIZE >= 2048 /* バッファが十分大きい */ #endif

事前定義マクロ

マクロ値
__DATE__コンパイル日の文字列
__FILE__現在のファイル名の文字列
__LINE__マクロが出現する行番号
__STDC__ANSI C標準準拠なら非ゼロ
__TIME__コンパイル時刻の文字列

例3: コンパイル時刻の表示

#include <stdio.h>
int main() {
    printf("Current time: %s", __TIME__);
    return 0;
}

出力例:

Current time: 19:54:39

推奨リーディング

C言語

  1. 交流回路における抵抗器、インダクタ、コンデンサの包括的まとめ
  2. C# キーワードと識別子:ルール、一覧、ベストプラクティス完全ガイド
  3. C# クラスとオブジェクト:堅牢な OOP の基礎
  4. C# 抽象クラスと抽象メソッドをマスターする:実践ガイド
  5. C# 部分クラスと部分メソッドを理解する
  6. C# sealed クラスとメソッドをマスターする:使用判断、実例、コードの安全性とパフォーマンス向上
  7. C#プリプロセッサディレクティブ完全ガイド:条件付きコンパイルと診断制御
  8. C言語キーワードと識別子:実践ガイド
  9. C言語の定数とリテラル:型、使い方、ベストプラクティス
  10. C言語の入出力マスター:標準関数とファイル操作
  11. C言語プリプロセッサ(CPP)の理解:コンパイルをシンプルにする仕組み