none
インテリセンス時に表示される候補について RRS feed

  • 質問

  • こんにちは。

    例えば、Test1.cppとTest2.cppの二つのソースファイルをプロジェクトに追加し、Test1.cppの方で、test1()という関数を定義したとします。

    続いてTest2.cppの方でコーディングする際、ヘッダファイルを何もインクルードしていないにも関わらず、インテリセンスの候補にtest1()が表示されます。

    (もちろん、このままコンパイルすれば当然test1は定義されていないというエラーが出ます。)

    このように、そのソースファイルから参照不可能な項目まで表示してしまうのはVisual C++ Express Editionの動きとして正しいのでしょうか?

    2007年7月13日 5:07

回答

  •  NZ-000 さんからの引用

    このように、そのソースファイルから参照不可能な項目まで表示してしまうのはVisual C++ Express Editionの動きとして正しいのでしょうか?

     

    はい.

    C++ はコード補完に向かない言語であるため,IntelliSense の高速化のために様々なトリックが利用されています.私も Visual C++ 6.0 の頃から使っていますが,ここ 10 年で Visual C++ の IntelliSense は精度・パフォーマンス両面で改善があったものの,依然として完全にコンテキストを考慮したコード補完を実現できていないようです.

     

    C# などの新しい言語では,初期バージョンから非常に安定した IntelliSense  によるコード補完が実現されていますので,基本的には言語仕様に起因する問題ではないかと思います.C++ の言語特性上,今後も C++ の IntelliSense にはあまり期待できないと予想していますが,VC チームが C++ 用に新しい IntelliSense のエンジンを開発しているようなので,ひょっとしたら今後改善がみられるかもしれません.

    c.f. Testing the IntelliSense engine

    2007年7月13日 8:00

すべての返信

  •  NZ-000 さんからの引用

    このように、そのソースファイルから参照不可能な項目まで表示してしまうのはVisual C++ Express Editionの動きとして正しいのでしょうか?

     

    はい.

    C++ はコード補完に向かない言語であるため,IntelliSense の高速化のために様々なトリックが利用されています.私も Visual C++ 6.0 の頃から使っていますが,ここ 10 年で Visual C++ の IntelliSense は精度・パフォーマンス両面で改善があったものの,依然として完全にコンテキストを考慮したコード補完を実現できていないようです.

     

    C# などの新しい言語では,初期バージョンから非常に安定した IntelliSense  によるコード補完が実現されていますので,基本的には言語仕様に起因する問題ではないかと思います.C++ の言語特性上,今後も C++ の IntelliSense にはあまり期待できないと予想していますが,VC チームが C++ 用に新しい IntelliSense のエンジンを開発しているようなので,ひょっとしたら今後改善がみられるかもしれません.

    c.f. Testing the IntelliSense engine

    2007年7月13日 8:00
  • そうでしたか。参考になりました。
    ありがとうございます、NyaRuRuさん。

    ただ、英文読んでいるとがんばってるんだよってことは伝わってきますが、できない理由としては釈然としませんね。
    現にEclipseではできてますし。

    パフォーマンスが申し分ないだけにちょっと残念です。

    2007年7月17日 5:56