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

C++ 轉 C 語言:語法差異對照表與學生管理系統遷移實戰

     編輯:程式設計綜合問答

核心語法差異速查表

C++ 特性C 語言替代方案
`class` / 封裝/繼承/多態`struct` + 函數指針模擬 OOP / 純過程式設計
`new` / `delete``malloc` / `free` (需強轉、檢查 NULL)
`iostream` / `cout` `cin` `<<` `>>``stdio.h` / `printf` `scanf` `%d` `%s` `%f`
`string` 類`char[]` / `char*` + `string.h` (`strcpy` `strlen` `strcmp`)
`vector`/`list`/`map` STL 容器手寫動態數組/鏈表/哈希表 / 第三方庫 (CVector, uthash)
`bool` / `true` `false``int` / `1` `0` (C99 `` 支持 `bool` `true` `false`)
引用 `Type&`指針 `Type*`
函數重載 / 默認參數不同函數名 / 手動處理可選參數
命名空間 `namespace`前綴命名法 `Module_Function()`
異常 `try/catch/throw`返回錯誤碼 / `setjmp`/`longjmp` / 全局錯誤變量
模板 `template`宏 `#define` / 類型特化函數 / `void*` 通用指針
`const` 修飾變量`const` (C90+ 支持,但不可用於數組長度)
內聯函數 `inline``inline` (C99 支持) / 宏
單行註釋 `//`C99 支持,C89 僅 `/* */`
變量聲明可延後C89 必須在塊開頭聲明,C99 可延後

學生管理系統 C++ → C 遷移關鍵點

1. 類 → 結構體 + 操作函數


// C++ 原始
class StudentManager {
    vector students;
public:
    void add(Student s) { students.push_back(s); }
    void display() { for(auto& s: students) cout<

2. `iostream` → `stdio.h` 格式化輸入輸出


// C++
cout << "姓名: " << student.name << " 平均分: " << avg << endl;
cin >> name >> score;

// C
printf("姓名: %s 平均分: %.2f\n", student.name, avg);
scanf("%19s %f", name, &score); // %19s 防溢出

3. `string` → `char[]` + `string.h`


// C++
string name = "張三";
if (name == "李四") ...

// C
char name[20] = "張三";
if (strcmp(name, "李四") == 0) ... // strcmp 返回 0 表相等
strcpy(name, "李四"); // 賦值

4. `bool` → `int` (或 C99 `stdbool.h`)


// C++
bool flag = true;
if (flag) ...

// C (C89)
int flag = 1;
if (flag) ...

// C (C99 推薦)
#include 
bool flag = true; // 實際是宏展開為 _Bool/1

5. 內存管理 `new/delete` → `malloc/free`


// C++
Student* p = new Student();
delete p;

// C
Student* p = (Student*)malloc(sizeof(Student));
if (p == NULL) return; // 必須檢查
free(p);
p = NULL; // 防野指針

6. 文件操作 `fstream` → `FILE*`


// C++
ofstream fout("data.txt");
fout << student.name << " " << student.score;
fout.close();

// C
FILE* fp = fopen("data.txt", "w");
if (fp) {
    fprintf(fp, "%s %.2f", student.name, student.score);
    fclose(fp);
}

完整遷移示例:菜單驅動主循環


// C 版主函數
int main() {
    int choice;
    while (1) {
        printf("\n1.添加 2.顯示 3.查找 4.刪除 5.排序 6.保存 7.退出\n選擇: ");
        if (scanf("%d", &choice) != 1) { scanf("%*s"); continue; }
        
        switch (choice) {
            case 1: inputStudent(); break;
            case 2: displayStudents(); break;
            case 3: searchStudent(); break;
            case 4: deleteStudent(); break;
            case 5: sortStudents(); break;
            case 6: saveToFile(); break;
            case 7: return 0;
            default: printf("無效\n");
        }
    }
}

遷移檢查清單

  1. 所有 `.cpp` → `.c`,`.hpp` → `.h`。
  2. 頭文件去除 `using namespace std;`、`class`、`template`、`namespace`。
  3. 引入 `` `` `` `` (C99)。
  4. 全局 `cout/cin` → `printf/scanf` 格式化串。
  5. `string` → `char[]` + `strcpy/strcmp/strlen`。
  6. `vector/list` → 固定數組/手寫鏈表 + 計數器。
  7. `new/delete` → `malloc/free` + NULL 檢查。
  8. `bool` → `int` / `stdbool.h`。
  9. 異常處理 → 錯誤碼返回 / 全局 `errno`。
  10. 編譯:`gcc -std=c99 -Wall -Wextra -o prog main.c` (指定 C 標準、開啟警告)。

總結

C++ 轉 C 核心是 **「去特性、留邏輯」**:用結構體+函數替代類、用格式化輸入輸出替代流、用手動內存管理替代 new/delete、用錯誤碼替代異常。**C99 標準 (`stdbool.h`、`inline`、`//`、變量延後聲明) 大幅縮小差距**。遷移時保持業務邏輯不變,逐模塊替換語法設施,充分測試邊界條件 (內存、字符串、文件)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved