如果在头文件中声明函数,则C中的单独编译会出错

时间:2012-12-03 15:44:45

标签: c module compilation linkage

我在使用gcc:

编译C中的单独模块时遇到问题 基本上,我有我的标题,common.h:

#ifndef COMMON_M
    #include<stdio.h>
    #define COMMON_M
    void print_array(int *a,int n);
    void swap(int *v,int i,int j);
#endif

我的functions.c以及上面函数的实现:

#include "common.h"
void print_array(int *a,int n) {
    int i=0;
    for(;i<n;++i)
        printf( (i==n-1) ? "%d\n" : "%d ", a[i]);
}
void swap(int *v,int i,int j) {
    int t=v[i];
    v[i]=v[j];
    v[j]=t;
}

和我的主要:

#include "common.h"
void main() {
    int a[10]={6,2,0,12,4,3,7,-4,12,7};
    print_array(a,10);
    qsort_c(a,0,10);
    print_array(a,10);
}

如果我尝试将funcionts.c编译为模块(gcc -c functions.c),我会收到此错误:

错误:重新定义'swap' 错误:重新定义'print_array'

有人会帮助我理解为什么吗? 我在common.h中声明一个函数并在functions.c中定义它!我不明白为什么这在理论上不起作用。

提前致谢,

1 个答案:

答案 0 :(得分:0)

从上面的代码中,我看到的是:你包括common.h两次。一个在myfunction.c,另一个在你的文件中,你有main()。