# include/compiler.h

# 1 ファイル

## 1.1 include/compiler.h

コンパイラ検出および抽象化マクロのヘッダーファイル。

コンパイラの種類とバージョンを検出し、統一的なマクロを定義します。
また、コンパイラ固有のインライン制御属性を抽象化します。

#### 1.1.0.1 コンパイラ検出マクロ

検出されたコンパイラに応じて、以下のマクロを定義します。

コンパイラ | 識別マクロ | COMPILER_NAME | COMPILER_VERSION の形式
--- | --- | --- | ---
MSVC | COMPILER_MSVC | “MSVC” | _MSC_VER の値 (例: 1943)
Clang | COMPILER_CLANG | “Clang” | major * 10000 + minor * 100 + patch
GCC | COMPILER_GCC | “GCC” | major * 10000 + minor * 100 + patch
その他 | COMPILER_UNKNOWN | “Unknown” | 0

Clang は __GNUC__ も定義するため、Clang を GCC より先に判定しています。

#### 1.1.0.2 インライン制御マクロ

コンパイラごとに異なるインライン強制・抑制の構文を、統一的なマクロで提供します。

マクロ名 | MSVC | GCC/Clang | その他
--- | --- | --- | ---
FORCE_INLINE | __forceinline | inline __attribute__((always_inline)) | inline
NO_INLINE | __declspec(noinline) | __attribute__((noinline)) | (空)

#### 1.1.0.3 使用例

    #include "compiler.h"

    FORCE_INLINE int fast_add(int a, int b)
    {
        return a + b;
    }

    NO_INLINE void debug_dump(const char *msg)
    {
        fprintf(stderr, "%s\n", msg);
    }

Copyright (C) CompanyName, Ltd. 2025. All rights reserved.

### 1.1.1 作者

c-modernization-kit sample team

### 1.1.2 日付

2026/02/06

# 2 定数、マクロ

## 2.1 COMPILER_MSVC

    #define COMPILER_MSVC

MSVC コンパイラの場合に定義されます。

## 2.2 COMPILER_CLANG

    #define COMPILER_CLANG

Clang コンパイラの場合に定義されます。

## 2.3 COMPILER_GCC

    #define COMPILER_GCC

GCC コンパイラの場合に定義されます。

## 2.4 COMPILER_UNKNOWN

    #define COMPILER_UNKNOWN

未知のコンパイラの場合に定義されます。

## 2.5 COMPILER_NAME

    #define COMPILER_NAME "name"

コンパイラ名の文字列 (“MSVC”, “Clang”, “GCC”, “Unknown”)。

## 2.6 COMPILER_VERSION

    #define COMPILER_VERSION 0

コンパイラバージョンの数値。

## 2.7 FORCE_INLINE

    #define FORCE_INLINE

インライン展開を強制します。コンパイラに応じた属性に展開されます。

## 2.8 NO_INLINE

    #define NO_INLINE

インライン展開を抑制します。コンパイラに応じた属性に展開されます。