簡體   English   中英

鏈接 .c 和 .h 文件

[英]Linking .c and .h files

對於我的程序,我總共鏈接了 3 個文件。 main.c、sortfile.c 和 my.h(頭文件)。 對於我的 sortfile.c,我正在實施 OddEven Sort。 我不確定我的編碼算法是否正確。 還想知道頭文件中通常包含哪些信息。 是否只有其他兩個 c 文件視頻 #include?

#include <stdio.h>


void swap(int *, int *);
void Odd_Even_Sort(int *);


/* swaps the elements */
void swap(int * x, int * y)
{
    int temp;

    temp = *x;
    *x = *y;
    *y = temp;
}

/* sorts the array using oddeven algorithm */
void Odd_Even_Sort(int * x)
{
    int sort = 0, i;

    while (!sort)
    {
        sort = 1;
        for (i = 1;i < MAX;i += 2)
        {
            if (x[i] > x[i+1])
            {
                swap(&x[i], &x[i+1]);
                sort = 0;
            }
        }
        for (i = 0;i < MAX - 1;i += 2)
        {
            if (x[i] > x[i + 1])
            {
                swap(&x[i], &x[i + 1]);
                sort = 0;
            }
        }
    }

我沒有在 sortfile.c 中包含 main,因為我打算將 main 放在 main.c 文件中。

你看起來很困惑。 首先閱讀有關鏈接器編譯器的維基頁面。 您不鏈接文件,而只鏈接目標文件

(我猜測並假設並希望您使用的是 Linux)

您還可以將翻譯單元編譯為目標文件。

頭文件用於預處理器(編譯的第一個“階段”)。 預處理是一個文本操作。 請參閱此答案以獲取一些提示。

所以你可能想把你的main.c編譯成main.o

gcc -Wall -g -c main.c -o main.o

-Wall要求提供所有警告,所以永遠不要忘記這一點; -g要求提供調試信息; -c要求將一些源代碼編譯成某個目標文件; gcc程序參數順序非常重要)。

同樣,您希望將sortfile.c編譯為sortfile.o 我離開作為練習來獲得正確的命令。

最后,您希望通過鏈接兩個目標文件來獲得一個可執行程序myprogsort 這樣做

gcc -g main.o sortfile.o -o myprogsort

但是你真的想使用一些構建自動化工具。 了解GNU make 編寫你的Makefile (注意, tab在其中很重要)。 請參閱示例。 不要忘記嘗試make -p來理解(並利用) make知道的所有內置規則。

還想知道頭文件中通常包含哪些信息。

通常,您只需要公共頭文件中的聲明(您將在組成翻譯單元的每個源文件中#include )。 您還可以添加static inline函數的定義 閱讀有關內聯函數的更多信息(一開始您可能不需要它們)。

不要忘記學習如何使用gdb調試器 你可能會跑

gdb ./myprogsort

不止一次。 不要忘記在更改源代碼后重建你的東西​​。

還可以查看github上一些用 C 編碼的中型自由軟件項目的源代碼。 你會學到很多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM