为什么我需要标题?

时间:2016-01-12 09:18:01

标签: c gcc header-files

我有两个单元的简单程序:

count_words.c:

int main( int argc, char ** argv )
{
    printf("starting\n");
    int i =  aaa(55555);
    printf("%d",i);
    printf("ending\n");
    return i;
}

clean.c:

int aaa(int i)
{
    printf("aaa\n");
    return 5;
}

生成文件:

count_words:  clean.o count_words.o  -lfl
        gcc count_words.o clean.o -lfl -ocount_words 

%.o:%.c
        gcc -c -o $@ $<

程序构建正常并运行,但在count_words.c我没有包含来自int aaa(int)的函数clean.c声明的头文件。为什么我需要有头文件,因为没有它们编译程序没问题?

1 个答案:

答案 0 :(得分:1)

头文件通常包含用作前向声明的函数声明。如果没有函数转发声明,则对函数的任何调用都被视为函数的隐式声明。

C99标准之后,函数的隐式声明已经变为非标准。编译器可能支持遗留代码支持,但不保证将来会这样做。

所以最重要的是,你需要在每个源文件中都有函数声明。使用头文件时,我们可以使用每个源文件的所有前向声明和一个包含语句,我们可以将它们全部包含在每个源中。

因此,从可用性的角度来看,当您包含头文件时,不需要在每个源文件中重复单个声明。这支持DRY principle,所以很好。