支援,但僅限 C99 (ISO/IEC 9899:1999) 及更新標準。 C89/C90 無 `inline` 關鍵字,需靠編譯器擴展(如 GCC `inline`、MSVC `__inline`、`__forceinline`)。
// 標頭檔或單一編譯單元
inline int add(int a, int b) { return a + b; }
// 若需外部連結(供其他編譯單元呼叫),需在某一 .c 檔提供外部定義
// add.c
extern inline int add(int a, int b); // 或不加 inline 直接定義
int add(int a, int b) { return a + b; }
| 編譯器 | C99 `inline` 支援 | 擴展關鍵字 | 備註 |
|---|---|---|---|
| GCC (≥3.0) | 完整 | `__inline__`, `__attribute__((always_inline))` | 預設 C17 模式 |
| Clang (≥3.0) | 完整 | 同 GCC | 預設 C17 模式 |
| MSVC (VS 2015+) | 完整 (`/std:c11`/`c17`) | `__inline`, `__forceinline` | 舊版僅支援 `__inline` |
| Intel ICC/ICX | 完整 | `__inline`, `__forceinline` | 相容 GCC/MSVC |
| TinyCC (tcc) | 部分 | `inline` | 嵌入式常用 |
#if defined(_MSC_VER)
# define INLINE __inline
#elif defined(__GNUC__)
# define INLINE __inline__
#else
# define INLINE inline
#endif
C 語言**有**內聯函數(C99 起),但語義與 C++ `inline` 有細微差異(連結屬性)。理解標準規則、編譯器行為與 LTO 互動,才能在效能敏感場景正確使用。