gcc
和 g++
是 GNU 編譯器集合(GNU Compiler Collection,簡稱 GCC)中的兩個不同命令,用於編譯 C 和 C++ 程式碼。儘管它們都屬於同一個編譯器集合,但在處理 C 和 C++ 程式碼時有一些重要的區別。
主要區別
-
預設語言處理:
gcc
:主要用於編譯 C 語言程式碼。對於副檔名為.c
的原始檔,gcc
會將它們作為 C 程式碼處理。g++
:主要用於編譯 C++ 語言程式碼。對於副檔名為.cpp
、.cxx
、.cc
等的原始檔,g++
會將它們作為 C++ 程式碼處理。
-
連結階段行為:
gcc
:在連結階段不會自動連結 C++ 標準庫。如果你需要編譯和連結 C++ 程式碼,你需要手動指定連結 C++ 標準庫。g++
:在連結階段會自動連結 C++ 標準庫。使用g++
編譯和連結 C++ 程式碼時,無需手動指定連結 C++ 標準庫。
-
檔名副檔名的處理:
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++ 程式碼的過程。
根據你的專案型別和程式碼語言選擇適當的編譯器命令,以確保編譯和連結過程正確無誤。