将头文件链接到C ++中的实现文件

时间:2013-03-14 00:33:29

标签: c++

我有一个关于用C ++链接文件的特殊问题。假设我有一个名为fmttime.h的头文件,我想将它链接到fmttime.cc(实现文件)继承人到目前为止我做了什么

 ExpandedTime* localTime(struct timeval* tv, ExpandedTime* etime);
 int main()
 {
     struct timeval tv;
     struct ExpandedTime etime;
     gettimeofday(&tv, NULL);
     localTime(&tv,&etime);

 }

 ExpandedTime* localTime(struct timeval* tv, ExpandedTime* etime)
 {
     tzset(); // Corrects timezone

     int epochT = (tv->tv_sec) - timezone; // Epoch seconds with
     int epochUT = tv->tv_usec;  // Timezone correction

     int seconds = epochT % 60;
     epochT /= 60;
     etime->et_sec = seconds;
     etime->et_usec = epochUT;

     int minutes = epochT % 60;
     epochT /= 60;
     etime->et_min = minutes;

     int hours = (epochT % 24) + daylight; // Hours with DST correction
     epochT /= 24;
     etime->et_hour = hours;

     printf("%d,%d,%d\n", seconds, minutes, hours);
     printf("%d\n", epochUT);
     printf("%d\n", timezone);
     printf("%d\n", daylight);
     return etime;
 }

所以基本上我已经在标题中包含了fmttime.h。关于整个过程,我有几个问题。在fmttime.h中我只有这个函数原型(实际上我需要的就是这个)。

 // Interface file for fmttime.h which is including the fmttime.c
 // Contains function prototype

 char* formatTime(struct timeval* tv, char* buf, size_t len);

现在,如果我想在我的fmttime.cc实现文件中使用此函数,是否需要重新声明函数原型?或者可以跳过它,因为头文件已经包含它,因此包含在fmttime.cc中,因为它通过#include链接。

所以我基本上想要添加到.CC文件中的char * formatTime(struct timeval * .....)但我不确定我是否还需要在.CC中声明原型或者它在fmttime.h文件。

3 个答案:

答案 0 :(得分:6)

#include文件实际上是文本替换操作。标题的内容只是直接粘贴到包含它的文件中。

所以,你可以自己回答这个问题。试想一下,头文件中的代码实际上也在实现文件中(因为它是)。

答案 1 :(得分:1)

头文件仅包含在源文件中。他们没有联系。在处理预处理器指令(例如#include)之后,编译器会将源代码编译为目标文件(.o)。然后将目标文件传递给链接器以进行链接。

对于你的最后一个问题,我建议你尝试在没有#include指令的情况下编译.CC文件,然后#include头文件并再次编译。

答案 2 :(得分:0)

记住:

.h / hpp - >函数原型,变量/结构/枚举定义

.c / .cpp - >函数实现(.c / .cpp需要包含相应的头文件)