2016-12-30 16 views
-2

大規模なオープンソースプロジェクトに新しい機能(たとえばmy_work.c)を追加しようとしています。そのためには、宣言と定義が既存のコードベース全体に広がっているフィールドにアクセスする必要があります。大きなC/C++プロジェクトの既存のフィールドへのアクセス

インクルードステートメントの数が膨大になるため、すべてのフィールドに「インクルード(ヘッダファイルへのパス)」を含めることはできません。どのようにして、たくさんのインクルードなしですべてのフィールドにアクセスすることができますか?私は私の関数my_work.cをMakefileに追加することでこのアクセス権を得ることができると思うが、どこにこれを入れる必要があるのか​​分からない。

+2

あなたの質問には、混乱があります。あなたがここで言ったのとは反対に、**は '#include'を使用し、コンパイル時に-Iフラグを使用する必要があります。 – Dovahkiin

+2

構造体のフィールドにアクセスするには、構造体の定義にアクセスする必要があります。構造体の定義には、#構造体を含むヘッダが含まれている必要があります。 –

+0

はい、わかりました。しかし、私はアクセスが必要な構造がたくさんある場合、ヘッダーを含める必要性を回避する方法はありますか? – marc

答えて

0

複数のインクルードなしですべてのフィールドにアクセスする方法を教えてください。

あなたはありません。これは、外部コードへのアクセスを得るためのものです。

しかし、いくつかのコンパイラ、たとえば。 man gccから

-include <filename> 
      Adds an implicit #include into the predefines buffer which is read 
      before the source file is preprocessed. 

man clangから

:クランとGCC、暗黙の#include秒を挿入するために使用することができますフラグをサポートし、この方法はまだ含めるしようとしていること

-include file 
     Process file as if "#include "file"" appeared as the first line of the 
     primary source file. However, the first directory searched for file 
     is the preprocessor's working directory instead of the directory 
     containing the main source file. If not found there, it is searched 
     for in the remainder of the "#include "..."" search chain as normal. 

     If multiple -include options are given, the files are included in the 
     order they appear on the command line. 

注意をこれらのファイルは通常の方法でやるほうがよいでしょう。

0

C++がうまく書かれている場合は、すべてのインクルードを独自に含めることができます。それにはコンパイルに依存するすべてが含まれます。今では、あなたのデータが大規模なコードベース上に無作為に広がっている可能性は低いです。上位のオブジェクトを#includeしてみてください。運があれば、それは下位レベルのものの大半を引っ張ります。コンパイルが中断した場合は、長期的に「1つのインクルード」ポリシーに移行することをお勧めします。

関連する問題