首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C 語言編譯錯誤 missing function header (old-style formal list?) 含義與修正

     編輯:C 語言問答

錯誤訊息含義

missing function header (old-style formal list?) 直譯:「缺少函數標頭(舊式形式參數表?)」。

觸發場景

  • **函數定義缺少返回型別**(舊式 K&R 風格隱式 int),現代編譯器 (C99+) 拒絕隱式 int。
  • **函數參數列表寫法錯誤**:用舊式 foo(a, b) int a; char b; { ... } 而非標準 foo(int a, char b) { ... }。
  • **前置宣告與定義不匹配**:宣告 int func(); (舊式無參數資訊) 定義 int func(int x) { ... }。
  • **大括號位置錯誤/缺失**:函數體未以 { 開頭。

典型錯誤與修正對照

錯誤代碼問題修正代碼
main() { ... }隱式 int 返回型別int main(void) { ... return 0; }
func(a, b) int a; float b; { ... }K&R 舊式參數宣告void func(int a, float b) { ... }
int add(); 後定義 int add(int x, int y) { return x+y; }宣告未帶參數型別int add(int x, int y); (原型宣告)
void foo() int x = 1; { ... }大括號前有語句void foo(void) { int x = 1; ... }

現代 C 函數定義標準範式


// 1. 原型宣告 (頭檔/檔案頂部)
int add(int a, int b);
void print_msg(const char *msg);

// 2. 定義
int add(int a, int b) {
    return a + b;
}

void print_msg(const char *msg) {
    if (msg) puts(msg);
}

// 3. main 規範
int main(void) {
    printf("%d\n", add(3, 4));
    print_msg("Hello");
    return 0;
}

編譯器旗標建議


gcc -std=c11 -Wall -Wextra -Werror -Wmissing-prototypes -Wstrict-prototypes -Wold-style-definition
cl /std:c11 /Wall /WX /W4
  • -Wmissing-prototypes:警告未前置宣告的非靜態函數。
  • -Wstrict-prototypes:警告 func() 空參數列表(應寫 func(void))。
  • -Wold-style-definition:警告 K&R 風格定義。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved