2017-11-10 18 views
0

私は、他の人が使用することを意図した静的ライブラリを作成しています。この静的ライブラリはWindowsヘッダーを使用し、DWORD、PDWORD、LPVOIDなどのWindows定義を使用する多くの関数で使用します。のように厳密にしたいのですが、実際には私のライブラリの関数を定義し、 。しかし、私の静的ライブラリのヘッダーファイルの中にWindowsヘッダーを含めると、私のライブラリを含む人は自動的にWindowsヘッダーをインクルードしますが、これはこのプロセスについて多くの人が正しい方法であるとは思わない私が他のプロジェクトに含めるライブラリの中には、正しいヘッダーファイルを含める必要もあります。では、私のライブラリを使用する人々にもWindowsヘッダーが含まれているか、少なくともWindowsヘッダーが既に含まれているかどうかを確認するためにライブラリをチェックする必要があるのですか?これは他のヘッダーにも当てはまります(iostreamをインクルードする必要がある場合は、iostreamヘッダーが既に含まれているかどうかを確認する必要があります)。静的ライブラリにどのように含める必要がありますか?

私の静的ライブラリは、すべてのユーザーのインクルードよりも優先されるべきですか、ユーザーが既に含まれていた内容に応じて変更する必要がありますか?ユーザーが私の図書館を含む場合は、単に図書館の見出しと他のものを含めるほうが良いですか、それとも私の図書館に加えて必要なものをユーザーが含むようにするための方法がありますか?

いくつかの余分な明確にするために:あなたはWindows.hを含め何度も問題ではありません

#include "MyLibrary.h" 
BOOL WINAPI DllMain(HMODULE hModule, DWORD fdwReason, LPVOID lpvReserved) { 
    // Stuff 
} 

それとも

#include <Windows.h> 
#include "MyLibrary.h" 
BOOL WINAPI DllMain(HMODULE hModule, DWORD fdwReason, LPVOID lpvReserved) { 
    // Stuff 
} 
+1

これがWindowsライブラリの場合は、Windowsヘッダーファイルが必要です。なぜそれが問題になるのでしょうか? 'HWND'を' void * 'と争うことはトラブルを求めています。私は "プログラミングの完全性"がここで何を意味するのか分かりません。ライブラリでWindowsの種類を使用している場合は、そのファイルを含める必要があります。また、ライブラリを使用するすべてのユーザーが必要です。 – tadman

+2

ヘッダーファイルでは、可能な限り最小限のインクルードを使用しようとし、他の多くのヘッダーを取得するヘッダーを使用しないようにしています。ソフトウェアのビルドにはすでに数分かかるため、コンパイル時間を短縮するためにこれを行います。 – drescherjm

+0

右。しかし私はヘッダファイルに#include '' 'をつけています。ヘッダファイルには、ヘッダファイルを含む人のためのウィンドウヘッダが自動的に含まれています。私のヘッダーは、私はまた、Windowsのヘッダーを使用するという事実にもかかわらず。私は自分のライブラリがすでにWindowsヘッダーを含んでいるかどうかをチェックし、そうでない場合はそれを含めますが、Windowsヘッダーが既に含まれている場合はそれを使用します。基本的には、私のライブラリをユーザーのインクルードよりも優先させたくありません。 –

答えて

2

、それはすでに#ifndef内にその内容を囲む - #endif構築物。一度インクルードされた場合、一部のマクロは既に定義されており、ヘッダーのコードは再度インクルードされません。

一方、ライブラリが静的であれば、それは外部コードには依存しません。Windows.hから来るすべてのシンボルは、ライブラリーにとって事実上プライベートであり、他のものには見えません。

EDIT:あなたの最後の編集を明確にする。

パブリックAPIは、あなたのライブラリの.hにある必要があります。 Windows.hが提供しているAPIの一部でない場合は、.cc、したがって、2番目のオプションに入れる方がよいでしょう。逆に、公開APIの定義にWindows.hの定義が使用されている場合は、それを.hに含めます。

+1

APIを 'DWORD 'のようなものにしたい場合は、それらがAPIの一部であると言います。 –

+0

はい、私は同意し、再び質問を読んだ後、それはOPが望んでいると思われる...編集しましょう。 – oxuf

関連する問題