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

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