我有一個關於鏈接C++文件的特殊問題。說我有一個名爲頭文件fmttime.h,我要鏈接它fmttime.cc(執行文件)繼承人什麼我迄今所做將頭文件鏈接到C++中的實現文件
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文件。
哦,我明白了。感謝外行人稱爲編碼受損的解釋,例如我:)其實我還有一個問題,如果任何人都可以回答....在函數localtime()是我的邏輯在這裏正確的函數如何工作? 首先,我將指針傳遞給etime結構體。因此,我可以編輯擴展時間結構的字段內的對象....然後通過說「return etime」,我將該結構的編輯版本返回給main? – PresidentRFresh 2013-03-14 00:50:00
@ user2163350:是的,你的推理是正確的。但是......爲什麼從函數中返回呢?只要明確指出'etime'應該是一個指向分配的'ExpandedTime'對象的指針,然後它將被填充並且不返回任何東西。通過一個預期會發生變異的爭論並接受它的一個副本是非常奇怪的。 – 2013-03-14 00:55:22
是的,我認爲這很奇怪......因爲我不是編碼最好的,所以更多的是形式。我發現奇怪的是我編輯了ExpandedTime結構的內容然後再次返回。正如你所說,它已經改變了結構的領域。 但是,函數原型期望返回的參數是ExpandedTime *,所以很自然地我返回了etime。所以你說的只是刪除返回語句? 我的印象是,除非函數是無效的,否則不需要返回... – PresidentRFresh 2013-03-14 01:00:37