对于我的程序,我总共链接了3个文件。一个main.c,sortfile.c和my.h(头文件)。对于我的sortfile.c我正在实现OddEven排序。我不确定我的编码算法是否正确。还想知道头文件中通常包含哪些信息。是否只有其他两个c文件可以使用#include? p>
#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文件中。
答案 0 :(得分:1)
(我猜测并假设您正在使用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项目的源代码。你会学到很多东西。