includeについて


今書いているプログラムは、関数部分と表示部分に分けていています。  
関数のファイルを`fanc.h`とし表示を`main.cpp`とします。

`fanc.h`では文字列型を扱っているので`"#include <string>`と記述してあります。  
`main.cpp`には、`#include "Fileinfo.h"`ヘッダーの呼び出しと、こちらでも文字列を扱うので`#include
<string>`と記述しているんですが、これは二重定義になってますよね？

二重定義を防ぐために、`main.cpp`では"Fileinfo.h"がきちんと呼び出せていたら`#include
<string>`を実行させないためにはどのように書けばいいですか？

* * *

  * fanc.h
[code]     #include <string>

    
[/code]

  * main.cpp
[code]     #include <string>

    #include "Fileinfo.h"
    
[/code]




結論だけ言うとstring側で二重定義に対するケアが行われておりますので、使用側では対処不要となります。  
string側の実体ファイルで例として以下のような定義になっているはずです。

[code]

    #ifndef _LIBCPP___STRING
    #define _LIBCPP___STRING
    ...(snip)...
    #endif  // _LIBCPP___STRING
    
[/code]

仮に上記のようなケアが行われていないヘッダファイルをincludeする場合は  
以下の様にincludeすればよいです。

[code]

    #ifndef HOGEHOGE
    #define HOGEHOGE
    #include <string>
    #endif /* HOGEHOGE */
    
[/code]




結論だけ言うとstring側で二重定義に対するケアが行われておりますので、使用側では対処不要となります。  
string側の実体ファイルで例として以下のような定義になっているはずです。

[code]

    #ifndef _LIBCPP___STRING
    #define _LIBCPP___STRING
    ...(snip)...
    #endif  // _LIBCPP___STRING
    
[/code]

仮に上記のようなケアが行われていないヘッダファイルをincludeする場合は  
以下の様にincludeすればよいです。

[code]

    #ifndef HOGEHOGE
    #define HOGEHOGE
    #include <string>
    #endif /* HOGEHOGE */
    
[/code]

