链接.c和.h文件

时间:2017-01-28 22:35:00

标签: c

对于我的程序,我总共链接了3个文件。一个main.c,sortfile.c和my.h(头文件)。对于我的sortfile.c我正在实现OddEven排序。我不确定我的编码算法是否正确。还想知道头文件中通常包含哪些信息。是否只有其他两个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文件中。

1 个答案:

答案 0 :(得分:1)

你看起来很困惑。首先阅读linkerscompilers上的wikipage。您没有关联source个文件,只关联object fileslibraries

(我猜测并假设您正在使用Linux)

您还可以将translation units编译为目标文件。

Header files用于preprocessor(编译的第一个“阶段”)。 preprocessing是一个文本操作。有关提示,请参阅this answer

因此,您可能希望使用

main.c编译为main.o
gcc -Wall -g -c main.c -o main.o

-Wall要求所有警告,所以永远不要忘记; -g要求调试信息; -c要求将一些源编译成某个目标文件; {{1}的顺序3}} gcc非常重要。

同样,您希望将sortfile.c编译为sortfile.o。我作为练习离开,以获得正确的命令。

最后,您希望通过链接两个目标文件来获取可执行程序myprogsort。用

做到这一点
gcc -g main.o sortfile.o -o myprogsort

但你真的想使用一些program arguments工具。了解build automation。写下你的GNU make(注意,标签是很重要的)。请参阅Makefile示例。不要忘记尝试make -p来理解(并利用)make所知的所有内置规则。

  

还想知道头文件中通常会包含哪些信息。

传统上您只需要在公共头文件中使用声明(在构成翻译单元的每个源文件中都需要#include)。您还可以添加static inline函数的定义。阅读有关this的更多信息(您最初可能不需要它们)。

不要忘记学习如何使用inline functions。你可能会运行

gdb ./myprogsort
不止一次。不要忘记在更改源代码后重建您的东西。

另请参阅gdb debugger中以C编码的某个中型free software项目的源代码。你会学到很多东西。