1

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 実装ファイルでこの関数を使用したい場合、関数プロトタイプを再宣言する必要がありますか? または、#include を介してリンクされているため、ヘッダー ファイルに既に含まれているため、fmttime.cc に含まれているためにスキップできます。

したがって、基本的に .CC ファイルに char* formatTime (struct timeval*.....) を追加したいのですが、プロトタイプを .CC で宣言する必要があるのか​​、fmttime.h で処理する必要があるのか​​ わかりませんファイル。

4

3 に答える 3

6

#includeファイルの作成は、文字通りテキスト置換操作です。ヘッダーの内容は、ヘッダーを含むファイルに直接貼り付けられます。

だから、あなたは自分で質問に答えることができます。ヘッダーファイルのコードが実際には実装ファイルにもあると想像してみてください(そうなっているため)。

于 2013-03-14T00:45:24.553 に答える
1

ヘッダー ファイルは、ソース ファイルにのみ #include されます。それらはリンクされていません。#include などのプリプロセッサ ディレクティブを処理した後、コンパイラはソース コードをオブジェクト ファイル (.o) にコンパイルします。次に、オブジェクト ファイルがリンカに渡されてリンクされます。

最後の質問ですが、#include ディレクティブを使用せずに .CC ファイルをコンパイルしてから、ヘッダー ファイルを #include して再度コンパイルすることをお勧めします。

于 2013-03-14T00:49:14.827 に答える
0

覚えて:

.h / hpp->関数プロトタイプ、変数/構造体/列挙型の定義

.c / .cpp->関数の実装(.c / .cppには、対応するヘッダーを含める必要があります)

于 2013-03-14T01:21:01.280 に答える