コンパイラ検出および抽象化マクロのヘッダーファイル。
コンパイラの種類とバージョンを検出し、統一的なマクロを定義します。
また、コンパイラ固有のインライン制御属性を抽象化します。
検出されたコンパイラに応じて、以下のマクロを定義します。
| コンパイラ | 識別マクロ | 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 より先に判定しています。
コンパイラごとに異なるインライン強制・抑制の構文を、統一的なマクロで提供します。
| マクロ名 | MSVC | GCC/Clang | その他 |
|---|---|---|---|
| FORCE_INLINE | __forceinline | inline __attribute__((always_inline)) | inline |
| NO_INLINE | __declspec(noinline) | __attribute__((noinline)) | (空) |
#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.
c-modernization-kit sample team
2026/02/06
#define COMPILER_MSVCMSVC コンパイラの場合に定義されます。
#define COMPILER_CLANGClang コンパイラの場合に定義されます。
#define COMPILER_GCCGCC コンパイラの場合に定義されます。
#define COMPILER_UNKNOWN未知のコンパイラの場合に定義されます。
#define COMPILER_NAME "name"コンパイラ名の文字列 (“MSVC”, “Clang”, “GCC”, “Unknown”)。
#define COMPILER_VERSION 0コンパイラバージョンの数値。
#define FORCE_INLINEインライン展開を強制します。コンパイラに応じた属性に展開されます。
#define NO_INLINEインライン展開を抑制します。コンパイラに応じた属性に展開されます。