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

C 語言常見錯誤修正:函數宣告、main 命名衝突與邏輯缺陷

     編輯:程式設計綜合問答

原始碼問題盤點

  1. #include 缺少標頭檔名稱(應為 stdio.h)。
  2. 自訂函數 add main、sub main 使用 main 關鍵字導致命名衝突。
  3. 函數未前置宣告(prototype),編譯器假設回傳 int 並隱式轉型,極易出錯。
  4. if (a + b) 判斷邏輯模糊:未初始化的 a,b 為亂數,且無輸入語句。
  5. c = add main(a,b) 語法錯誤,應為 c = add(a, b)。

修正後完整程式碼

#include <stdio.h>

// 函數原型宣告
int add(int a, int b);
int sub(int a, int b);

int main(void)
{
    int a, b, c;

    // 範例:從標準輸入讀取兩數
    printf("請輸入兩個整數:");
    if (scanf("%d %d", &a, &b) != 2) return 1;

    if (a + b) {                 // 非零視為真
        c = add(a, b);
        printf("c = %d\n", c);
    } else {
        c = sub(a, b);
        printf("c = %d\n", c);
    }
    return 0;
}

// 定義在 main 之後亦可,因有原型宣告
int add(int a, int b) { return a + b; }
int sub(int a, int b) { return a - b; }

關鍵修正說明

  • 函數命名避開 main、printf 等保留/標準庫名稱。
  • 所有自訂函數務必在使用前給出原型宣告(或將定義移至 main 之前)。
  • 變數使用前必須初始化或透過 scanf 等賦值。
  • main 回傳 int,慣例成功回傳 0。

進階建議

  • 開啟編譯器警告:gcc -Wall -Wextra -pedantic -std=c11。
  • 使用靜態分析工具(如 cppcheck、clang-tidy)掃描潛在問題。
  • 採用一致的命名風格(如 snake_case)提升可讀性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved