gcc 和 g++ 的區別

Undefined443發表於2024-05-22

gccg++ 是 GNU 編譯器集合(GNU Compiler Collection,簡稱 GCC)中的兩個不同命令,用於編譯 C 和 C++ 程式碼。儘管它們都屬於同一個編譯器集合,但在處理 C 和 C++ 程式碼時有一些重要的區別。

主要區別

  1. 預設語言處理

    • gcc:主要用於編譯 C 語言程式碼。對於副檔名為 .c 的原始檔,gcc 會將它們作為 C 程式碼處理。
    • g++:主要用於編譯 C++ 語言程式碼。對於副檔名為 .cpp.cxx.cc 等的原始檔,g++ 會將它們作為 C++ 程式碼處理。
  2. 連結階段行為

    • gcc:在連結階段不會自動連結 C++ 標準庫。如果你需要編譯和連結 C++ 程式碼,你需要手動指定連結 C++ 標準庫。
    • g++:在連結階段會自動連結 C++ 標準庫。使用 g++ 編譯和連結 C++ 程式碼時,無需手動指定連結 C++ 標準庫。
  3. 檔名副檔名的處理

    • gcc:對於 .c 檔案,會將其視為 C 程式碼進行編譯。對於其他副檔名(如 .cpp、.cxx),需要使用 -x 選項指定語言型別。
    • g++:對於 .cpp、.cxx、.cc 檔案,會將其視為 C++ 程式碼進行編譯。對於 .c 檔案,會將其視為 C++ 程式碼進行編譯。

示例

使用 gcc 編譯 C 程式碼

假設有一個簡單的 C 程式 hello.c

#include <stdio.h>

int main() {
    printf("Hello, C World!\n");
    return 0;
}

編譯和執行:

gcc hello.c -o hello
./hello

輸出:

Hello, C World!

使用 g++ 編譯 C++ 程式碼

假設有一個簡單的 C++ 程式 hello.cpp

#include <iostream>

int main() {
    std::cout << "Hello, C++ World!" << std::endl;
    return 0;
}

編譯和執行:

g++ hello.cpp -o hello
./hello

輸出:

Hello, C++ World!

使用 gcc 編譯 C++ 程式碼(需要手動連結 C++ 標準庫)

也可以使用 gcc 編譯 C++ 程式碼,但需要手動指定連結 C++ 標準庫:

gcc hello.cpp -o hello -lstdc++
./hello

總結

  • gcc:主要用於編譯 C 程式碼,不會自動連結 C++ 標準庫。可以使用 gcc 編譯 C++ 程式碼,但需要手動指定連結 C++ 標準庫。
  • g++:主要用於編譯 C++ 程式碼,會自動連結 C++ 標準庫,簡化了編譯和連結 C++ 程式碼的過程。

根據你的專案型別和程式碼語言選擇適當的編譯器命令,以確保編譯和連結過程正確無誤。

相關文章