ANSI C(又稱 C89 或 C90)是由美國國家標準協會(ANSI)於 1989 年制定的 C 語言標準,隨後被國際標準化組織(ISO)採納為 ISO/IEC 9899:1990。它確立了 C 語言的統一規範,解決了早期各編譯器實現不一致的問題,奠定了現代 C 語言開發的基礎。
const、enum、signed、void、volatile;移除 entry 關鍵字。unsigned char、unsigned short、unsigned long 等;傳統 C 僅有 unsigned int。U/u(無符號)、F/f(float)、L/l(long double)後綴。long double;廢除 long float 作為 double 同義詞。\a(響鈴)、\v(垂直製表)、\?(問號)及十六進制轉義 \xhh。sizeof 返回類型:從 int 改為 size_t(無符號整數類型)。double square(double x)),編譯器可檢查參數個數與類型;傳統 C 使用分離式聲明(double square(x) double x {…}),無參數檢查,僅做整數提升與 float→double 轉換。void 類型:標準 C 引入 void 表示無返回值、無參數或通用指針(void*);傳統 C 通用指針用 char*。int 改為 ptrdiff_t。void* 與其他指針隱式轉換,其他需強制轉換;傳統 C 允許任意指針混合。pf(...) 與 (*pf)(...) 兩種形式;傳統 C 僅支持後者。enum;傳統 C 無此機制。#elif、#error、#pragma 指令。#、連接運算符 ##、defined 運算符。n 個字符(無需預留 \0 位置)。L'...'、L"...")與三字符序列(??= 等)。stdarg.h 機制(va_list、va_start 等),取代傳統 C 不可移植的實現。const(只讀)、volatile(易變)提供更精確的語義控制。ANSI C 統一了語言語義,使代碼具備跨平台可移植性。現代編譯器(GCC、Clang、MSVC 等)均以 ANSI C 為基線,後續的 C99、C11、C17、C23 標準皆在其上演進。理解 ANSI C 與 K&R C 的差異,有助於維護舊代碼、編寫標準合規的新代碼,並深入掌握 C 語言的設計哲學。
ANSI C 確立了函數原型、完整類型系統、結構化預處理器等核心機制,將 C 語言從「可移植的組合語言」提升為嚴謹的標準化程序設計語言。無論是嵌入式開發、系統編程還是高性能計算,遵循 ANSI C 及其後繼標準,都是編寫健壯、可維護 C 代碼的前提。