無法實現。C 語言陣列參數傳遞本質是首元素位址,編譯後元素僅存在於連續記憶體中,不保留任何名稱資訊。
arr[i] 編譯為 *(arr + i),純粹位移運算。a, b...) 在編譯後符號表中可能被優化掉,運行期不可查。| 需求 | C 語言實現方式 |
|---|---|
| 命名參數 / 鍵值對 | 結構體 struct { const char* key; int value; } params[] |
| 可變參數列表 | stdarg.h (va_list) + 格式字串約定 |
| 物件導向屬性包 | 不透明結構體 + Setter/Getters 函式 |
| 配置檔解析 | JSON/INI 解析庫 (cJSON, inih) 載入為結構體 |
typedef struct { int id; double threshold; char mode[16]; } Config;
void applyConfig(const Config* cfg) {
if (cfg) {
printf("ID=%d, Threshold=%.2f, Mode=%s\n", cfg->id, cfg->threshold, cfg->mode);
}
}
int main() {
Config c = { .id=1, .threshold=0.5, .mode="auto" }; // C99 指定初始化器
applyConfig(&c);
return 0;
}
若需「依名稱傳值」,請改用結構體或鍵值陣列,這是 C 語言慣用且型別安全的做法。