很多初學者以為 max() 是 C 標準庫函數,**實際上 C 標準庫沒有 max()**。代碼中出現的 max() 皆為**程序員自定義函數**。
// 函數原型聲明(通常放頭文件或文件頂部)
int max(int a, int b);
// 函數定義
int max(int a, int b) {
return (a > b) ? a : b;
}
// 調用
int m = max(3, 5); // m = 5
int max(int a, int b)| 部分 | 含義 |
|---|---|
第一個 int | 返回值類型:函數調用表達式的類型 |
max | 函數名:標識符,可任意合法命名(如 my_max、get_larger) |
(int a, int b) | 參數列表:兩個 int 類型的**形式參數**,調用時傳入實參 |
{ return ...; } | 函數體:執行邏輯,return 將值傳回調用處 |
fmax、fmaxf、fmaxl 需 math.h、僅限浮點)。#include <math.h>
// 浮點數最大值(C99)
double fmax(double x, double y);
float fmaxf(float x, float y);
long double fmaxl(long double x, long double y);
// 整數無標準庫函數,常用宏(有副作用風險)
#define MAX(a,b) ((a)>(b)?(a):(b))
⚠️ 宏參數多求值問題:MAX(x++, y) 導致 x 增加兩次。**優先用內聯函數**。
// C11 _Generic 實現編譯期多態(類似 C++ 模板)
#define MAX(x, y) _Generic((x), \
int: max_int, \
double: max_double, \
default: max_int \
)(x, y)
static inline int max_int(int a, int b) { return a > b ? a : b; }
static inline double max_double(double a, double b) { return a > b ? a : b; }
// 使用
int m1 = MAX(3, 5); // 調用 max_int
double m2 = MAX(3.1, 2.9); // 調用 max_double
main 是**程序入口**,由運行環境(OS/啟動代碼)調用,**不可由用戶代碼調用**。int main(void) 或 int main(int argc, char *argv[])。max() **不是**庫函數,是**自定義函數**典型教學例題。int max(int a, int b) 定義了:返回 int、名為 max、接收兩個 int 參數的函數。fmax 族,泛型用 _Generic 封裝。