在C语言头文件中

可能重复:
定义和声明有什么区别?

我对头文件中声明的函数感到困惑。 这与java一样,在一个文件上声明函数,该文件中有函数也有方法。 在C中做,在两个不同的文件中做功能和方法? 这里是一个例子:

song.h

 typedef struct {
   int lengthInSeconds;
   int yearRecorded;
 } Song;

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

song.c

 #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 %in", theSong.yearRecorded);
 }

我可以在一个文件上写这两个函数吗?

谢谢。 我是新来的C.

问候。 本。


C中的函数以两种形式存在

  • 声明:签名是指定的,但不是实现
  • 定义:定义了实现和签名
  • 声明最好是可视化的,作为后面函数定义的承诺。 它声明了函数的外观,但不会告诉你它实际上做了什么。 通常的做法是在头文件中添加文件之间共享的函数声明。

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

    现在其他文件可以通过包含Song.h来使用make_song 。 他们不需要知道它的签名是什么。 这些定义通常放置在一个.h文件中,其名称与定义它们的.h文件相同。

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

  • 只有一个定义。 如果有一个函数只用在一个.c文件中,那么它就没有理由需要在.h中声明。 它可以完全存在于.c文件中
  • 只有一个声明。 声明一个函数并且从来没有给它一个定义是合法的,但是令人困惑。 该函数不能被调用,但代码将编译得很好
  • 只有在.h文件中有定义。 这里有很多链接警告,但可以在.h文件中完全定义一个函数。

  • 你可以在一个文件中做所有事情。 头文件是你需要在一些.c文件之间共享的东西。

    #include实际上是 - 预处理器用song.h的内容替换那一行)

    例如,如果你有另一个使用display_song函数的文件,你应该在其中包含song.h ,所以当编译器编译它时,它会知道这个函数及其参数。

    链接地址: http://www.djcxy.com/p/40627.html

    上一篇: In C language head file

    下一篇: Is it a definition or a declaration?