none
自動的に挿入される#include文 RRS feed

  • 質問

  • お世話になります。sa.yaと申します。
    環境:Visual Studio.NET2003、VisualC++

    ヘッダファイル、ソースファイルに関して、
    プロジェクト外にあるファイルをリンクした場合に
    コード内へ自動的に相対パス付きのinclude文が挿入される場合があります。

    例1)

    Test.hとTest.cppが同じフォルダにある場合に、

    Test.cpp
    #include "Test.h" ←自分で書いた
    #include ".\test.h" ←あとから書かれた

    例2)

    Test.hとTest.cppが別のフォルダにある場合に、

    Test.cpp
    #include "Test.h"  ←自分で書いた
    #include "..\hedder\test.h" ←あとから書かれた

    この機能をOFFにすることは出来ないのでしょうか?
    どなたかご存知の方いらっしゃいましたらアドバイス御願いいたします。

    宜しく御願いします。

    2006年6月7日 5:34

回答

  • 試しに同じような構成で試してみましたが、
    どうやらIDEのクラスビューで関数の追加とやるとこの現象が起こるみたいですね。
    私はこの機能はほとんど使用しないので気にしていませんでした。
    クラスのプロパティからイベントハンドラの追加をする場合はきちんと動いているみたいです。
    要するにIDEのバグと言えば言えなくも無いかなと。
    この辺は致命的といえるほどのバグでは無いので多分、対応は後回しになるのではないかと言う気がします。
    自分でヘッダーファイルとソースファイルを手で編集すれば済む話ですからね。
    個人的にはIDEのこの機能は余計なお世話と言う気がしています。
    この機能でヘッダーファイルを作ると思ったような順番で関数が並ばないので読み辛くなりますから。

    この辺は折衷案になると思いますが、IDEを使うとどうしてもIDEによる制約は出てきますので
    IDEの制約に合わせてフォルダー構成を決めるのか、フォルダー構成を守る為にIDEの機能の使用を
    制限するかのどちらかでしょう。実際の所、IDE側も大きくフォルダー構成を変える事を想定していないと
    思います。コマンドラインでmakeコマンドを使ってビルドするような環境ならどうにでもなりますけれど、
    IDEを使うのであれば、その辺は仕方ないと思いますよ。
    この辺の不具合は昔のVisualStudioにも確かあったと思いますし。

    2006年6月14日 2:58

すべての返信

  • お世話になります。sa.yaです。

    レスが付かないまま追加で質問なのですが、
    下記のような状況を回避する方法はありますでしょうか?
    (おそらく表題の件と同じ原因なのではないかと考えているのですが・・・)

    1.フォルダ構成

    [root]
    |
    |-[Project]
    |  |-test.sln
    |  |-test.vcproj
    |
    |-[Common]
    |  |-ClassA.cpp
    |  |-ClassA.h

    2.この状態でクラスビューからClassAへメンバ関数を追加
    3.下記のようになる

    [root]
    |
    |-[Project]
    |  |-test.sln
    |  |-test.vcproj
    |  |-classa.cpp    <<< 新しい関数の為に新規で作られてしまう
    |
    |-[Common]
    |  |-ClassA.cpp
    |  |-ClassA.h

    状況的には何かパスの指定が足りていないような気がするのですが、
    どなたか原因ご存知の方いらっしゃいましたら
    アドバイスいただければ幸いです。

    宜しく御願いします。

    2006年6月9日 1:02
  • うーん、.NET2003ですよね。
    もともと標準の構成でソリューションを作成するとそんな構成にはならないはずなので、
    こういう変更をしようと思ったら恐らくかなり書き換えないとうまく行かないと思うんですが、
    slnファイルの中とかご自分で書き換えたのでしょうか。
    元々ソリューションのフォルダ構成はある程度IDEで決め打たれている部分もありますから
    あまり大幅に変えるのもどうかと思いますけれど。
    例えば、Testと言うダイアログベースのプロジェクトを作成した場合、既定では以下のような構成になっているはずです。

    適当なフォルダ\Test\Test.sln
    適当なフォルダ\Test\Test\Test.vcproj
    適当なフォルダ\Test\Test\Test.cpp
    適当なフォルダ\Test\Test\Test.h
    適当なフォルダ\Test\Test\Test.rc
    適当なフォルダ\Test\Test\resorce.h
    適当なフォルダ\Test\Test\TestDlg.h
    適当なフォルダ\Test\Test\TestDlg.cpp

    この構成はそれなりにリーズナブルな部分もあるのであまりに変えてしまうと
    たぶん、IDEが対処しきれないと思います。
    ウィザード系が自動で編集する部分に関しても今のフォルダ構成を想定して
    作成されていると思いますし。
    ソースファイルを整理して見やすくしたいのはわかるんですが、
    IDE上の見掛けのフォルダ構成の変更に留めておいた方が
    いろいろ面倒な事に気を使わなくて済むのでお勧めです。
    もし私が構成を変えるとしてもslnやvcprojなどのファイルの位置は動かさず、
    ソースファイルやヘッダファイルの移動にとどめると思います。
    2006年6月9日 5:15
  • お世話になります。sa.yaです。

    PATIOさん早速のレス有難う御座います。

    > 例えば、Testと言うダイアログベースのプロジェクトを作成した場合、
    > 既定では以下のような構成になっているはずです。

    この点ですがソリューションの新規作成時に
    「ソリューションのディレクトリを作成」
    というチェックボックスをはずすことで

    適当なフォルダ\Test\Test.sln
    適当なフォルダ\Test\Test.vcproj
    ・・・

    となります。

    またソース構成はソリューションエクスプローラーから選択追加し、
    プロジェクトのプロパティで必要なインクルードディレクトリを指定しています。

    特に正規の操作から外れているようなことは無いと思うのですが、
    #includeが自動挿入される現象が発生します。

    構成をあまり変えない方が無難なことは承知の上なのですが、
    色々組織のお約束事があるものでして・・・。


    情報をお持ちの方いらっしゃいましたら
    アドバイスいただければ幸いです。
    宜しく御願いします。

    2006年6月12日 0:40
  • 試しに同じような構成で試してみましたが、
    どうやらIDEのクラスビューで関数の追加とやるとこの現象が起こるみたいですね。
    私はこの機能はほとんど使用しないので気にしていませんでした。
    クラスのプロパティからイベントハンドラの追加をする場合はきちんと動いているみたいです。
    要するにIDEのバグと言えば言えなくも無いかなと。
    この辺は致命的といえるほどのバグでは無いので多分、対応は後回しになるのではないかと言う気がします。
    自分でヘッダーファイルとソースファイルを手で編集すれば済む話ですからね。
    個人的にはIDEのこの機能は余計なお世話と言う気がしています。
    この機能でヘッダーファイルを作ると思ったような順番で関数が並ばないので読み辛くなりますから。

    この辺は折衷案になると思いますが、IDEを使うとどうしてもIDEによる制約は出てきますので
    IDEの制約に合わせてフォルダー構成を決めるのか、フォルダー構成を守る為にIDEの機能の使用を
    制限するかのどちらかでしょう。実際の所、IDE側も大きくフォルダー構成を変える事を想定していないと
    思います。コマンドラインでmakeコマンドを使ってビルドするような環境ならどうにでもなりますけれど、
    IDEを使うのであれば、その辺は仕方ないと思いますよ。
    この辺の不具合は昔のVisualStudioにも確かあったと思いますし。

    2006年6月14日 2:58
  • お世話になります。佐山です。

    PATIOさん、レス有難う御座います。

    なるほど確かにクラスビューから関数を追加するとなりますね。
    この操作は無意識にやっていたので気がつきませんでした。(汗

    この辺は折衷案になると思いますが、IDEを使うとどうしてもIDEによる制約は出てきますので
    IDEの制約に合わせてフォルダー構成を決めるのか、フォルダー構成を守る為にIDEの機能の使用を
    制限するかのどちらかでしょう。実際の所、IDE側も大きくフォルダー構成を変える事を想定していないと
    思います。コマンドラインでmakeコマンドを使ってビルドするような環境ならどうにでもなりますけれど、
    IDEを使うのであれば、その辺は仕方ないと思いますよ。


    確かにそうですね。
    便利な物に慣れるとついつい欲が出てしまって・・・。

    とても参考になりました。有難う御座いました。

    2006年6月14日 4:15