[英]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
不止一次。 不要忘記在更改源代碼后重建你的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.