具有常見命令列選項的 Hello world

對於具有單個原始檔的程式,使用 gcc 很簡單。

/* File name is hello_world.c */
#include <stdio.h>

int main(void)
{
    int i;
    printf("Hello world!\n");
}

要從命令列編譯檔案 hello_world.c:

gcc hello_world.c

然後 gcc 將編譯程式並將可執行檔案輸出到檔案 a.out。如果要命名可執行檔案,請使用 -o 選項。

gcc hello_world.c -o hello_world

然後,可執行檔案將命名為 hello_world 而不是 a.out。預設情況下,gcc 發出的警告不多。gcc 有很多警告選項,最好檢視 gcc 文件以瞭解可用的內容。使用’-Wall’是一個很好的起點,涵蓋了許多常見問題。

gcc -Wall hello_world.c -o hello_world

輸出:

hello_world.c: In function ‘main’:
hello_world.c:6:9: warning: unused variable ‘i’ [-Wunused-variable]
     int i;
         ^

在這裡,我們看到我們現在得到一個警告,即變數’i’被宣告但在函式中根本沒有使用。

如果你打算使用偵錯程式來測試程式,則需要告訴 gcc 包含除錯資訊。使用’-g’選項除錯支援。

gcc -Wall -g hello_world.c -o hello_world

hello_world 現在具有 GDB 支援的除錯資訊。如果使用其他偵錯程式,則可能需要使用不同的除錯選項,以便正確格式化輸出。有關更多除錯選項,請參閱官方 gcc 文件。

預設情況下,gcc 編譯程式碼以便於除錯。gcc 可以優化輸出,以便最終的可執行檔案產生相同的結果但效能更快,並且可能導致更小的可執行檔案。 ‘-O’選項可以進行優化。在 O 之後新增幾個可識別的限定符以指定優化級別。每個優化級別都新增或刪除一組命令列選項。 ‘-O2’,’ - os’,’ - O0’和’-Og’是最常見的優化級別。

gcc -Wall -O2 hello_world.c -o hello_world

‘-O2’是生產就緒程式碼的最常見優化級別。它在效能提升和最終可執行檔案大小之間提供了出色的平衡

gcc -Wall -Os hello_world.c -o hello_world

‘-Os’類似於’-O2’,除了可以通過增加可執行檔案大小來提高執行速度的某些優化被禁用。如果最終的可執行檔案大小對你很重要,請嘗試’-Os’並檢視最終可執行檔案中是否存在明顯的大小差異。

gcc -Wall -g -Og hello_world.c -o -hello_world

請注意,在上面的’-Os’和’-O2’示例中,刪除了’-g’選項。那是因為當你開始告訴編譯器優化程式碼時,某些程式碼行本質上不再存在於最終的可執行檔案中,這使得除錯變得困難。但是,也存在僅在啟用優化時才會發生某些錯誤的情況。如果要除錯應用程式並讓編譯器優化程式碼,請嘗試使用’-Og’選項。這告訴 gcc 執行所有不應妨礙除錯體驗的優化。

gcc -Wall -g -O0 hello_world.c -o hello_world

‘-O0’執行的優化比’-Og’更少。這是 gcc 預設使用的優化級別。如果要確保禁用優化,請使用此選項。