在C语言头文件中


In C language head file

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What is the difference between a definition and a declaration?

我对头文件中的函数declare感到困惑。这与Java一样,在一个文件上声明函数,其中文件有函数也有方法。在C语言中,是否将函数和方法放在两个不同的文件中?下面是一个例子:

歌曲H

1
2
3
4
5
6
7
 typedef struct {
   int lengthInSeconds;
   int yearRecorded;
 } Song;

 Song  make_song    (int seconds, int year);
 void  display_song (Song theSong);

歌曲C

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 #include <stdio.h>
 #include"song.h"

 Song make_song (int seconds, int year)
 {
    Song newSong;

    newSong.lengthInSeconds = seconds;
    newSong.yearRecorded    = year;
    display_song (newSong);

    return newSong;
 }

 void display_song (Song theSong)
 {
    printf ("the song is %i seconds long", theSong.lengthInSeconds);
    printf ("and was made in %i
"
, theSong.yearRecorded);
 }

我能把这两个函数只写在一个文件上吗?

谢谢。我是新来C。

当做。本。


C中的函数有两种形式

  • 声明:已指定签名,但未指定实现
  • 定义:定义实现和签名

声明最好被视为以后函数定义的承诺。它声明了函数的外观,但没有告诉您它实际上做了什么。在头文件中添加共享函数的声明是常见的做法。

1
2
3
4
// Song.h

// make_song declaration
Song make_song(int seconds, int year);

现在,其他文件可以通过包含song.h使用make_song。他们不需要知道它的实现,只需要知道它的签名是什么。定义通常放在与定义它们的.h同名的.c文件中。

这是文件之间共享函数的标准约定,但决不是定义函数的唯一方法。C中的函数可以

  • 只有一个定义。如果函数只在单个.c文件中使用,则无需在.h中声明它。它可以完全存在于.c文件中。
  • 只有一个声明。声明一个函数,却从来没有给它一个定义,这是合法的,但令人困惑。无法调用函数,但代码将编译得很好
  • 只有.h文件中有定义。这里有很多链接警告,但是可以在.h文件中完全定义函数。


您可以在一个文件中完成所有操作。头文件用于一些.c文件之间需要共享的内容。

(#include字面意思是——预处理器用song.h的内容替换该行)

例如,如果您有另一个文件使用了函数display_song,那么您应该在其中包含song.h,因此当编译器编译它时,它将知道这个函数及其参数。