5

最近、オープン ソースの C++ プロジェクトに貢献したいと考えていました。C++ の経験がほとんどなかったため、IDE として Visual Studio を選択し、SP1 で更新しました。比較的簡単にビルドできるソリューションが得られたので、コードを少しナビゲートして概要を把握したいと思いました。

ここで、「定義へ移動」/「宣言へ移動」が機能しない場合があることに気付きました。ソース コード内のシンボルを右クリックすると、両方のオプションを使用できますが、ヘッダー ファイル内で [定義に移動] をクリックすると、関連する関数の宣言が再度表示されるだけです。そして、.cc ファイルにいるときは、常に同じファイル内の定義に移動します。

これに関係する機能について私が気付いたいくつかのことは次のとおりです。

1) 一部の関数では、ヘッダー ファイルから定義に移動できますが、他の方向は壊れています。

2) 宣言が定義と完全に一致するように変更された場合、一部の関数のナビゲーションを修正できます。

header declaration:
    void buche(sint64 betrag, player_cost type);
source definition:
    void karte_t::buche(sint64 const betrag, player_cost const type)

への変更

header declaration:
    void buche(sint64 const betrag, player_cost const type);

-> ナビゲーションは双方向に機能します

3) ソース ファイル内の関連する関数のコード ブロックをクリックすると、上部のスコープ メニューが、右側の小さな矢印 (前方宣言 I の記号) ではなく、「(グローバル スコープ)」に変わります。と思いますか?) とクラス名 (ただし、これらの関数は間違いなくクラス メンバーです)

私はたくさん検索しましたが、これは比較的よく知られている問題のようです。このサイトには次のスレッドがあります: IntelliSense を Visual Studio 2008 で確実に動作させる方法

また、Microsoft フォーラムでいくつかのスレッドを見つけました (ハイパーリンクは 2 つしか投稿できないため、リンクできません) が、バグなどの正式な確認はありませんでした。

私が見つけた返信の真髄は、.ncb ファイル (私が理解しているように VS2010 の .sdf データベースに取って代わられている) を削除するか、ソリューションのロード時にデータベースを再構築するオプションを使用する必要があるというものです。私はそのすべてを何度もやりましたが、役に立ちませんでした。ここの Stackoverflow のスレッドで最も評価の高い返信は、これが単なるバグであることを暗示しているようです (Intellisense の - コード ナビゲーションも担当するのがこのオートコンプリート コンポーネントであると正しく理解できましたか?)。ビジュアルアシストを使用する代わりに、しかし、質問は当時のVS2008に関するものであり、VS2010がこれを改善することを指摘した回答が1つありました。別の返信は再帰参照を非難しましたが、すべてのファイル (確かに、私がチェックして問題に遭遇したいくつかのファイル) にはガードが含まれているため、これはこのプロジェクトの問題ではないと思います。また、そのプロジェクトの 1 人のコーダーによって、彼が同じ問題を抱えていることも確認されています。しかし、私は Visual Assist にお金を使うことにそれほど熱心ではありません。

Eclipse/Java で多くの経験を積んでいる私にとって、IDE のこのような比較的重要な機能が確実に機能しないことは奇妙に思えます。もちろん、Java よりも C++ の方が静的コード解析がはるかに難しいことは理解できます。しかし、繰り返しになりますが、Visual Studio は多くの開発サイクルを経た商用製品です。

この投稿を要約すると、これは避けられないバグですか?

4

1 に答える 1