2

C++、VS 2012 (ただし、以前のバージョンの VS でも同じことが起こりました)。

場合によっては、Intellisense は実際には問題ではない "問題" を検出し、完全に有効なコードの下に赤い波線を配置します。

例:

class A {
  A(const A&);
  A& operator=(const A&);
public:
  A(const wchar_t*, const wchar_t*, int);
#define AMsg(x) A(x, __FILEW__, __LINE__)
};

...

throw AMsg(L"abc");

AMsg マクロは ctor 呼び出しに変換され、明らかな最後の 2 つのパラメーター値を入力する必要がなくなります。コードは期待どおりに機能しますが、Intellisense は AMsg の下に A::A(const A&) にアクセスできないことを示す赤い波線を表示します。A::A(const A&) にはアクセスできませんが、AMsg は別の ctor を呼び出し、Intellisense はそれを認識できません。

Intellisense が AMsg を無視するようにする方法はありますか? たとえば、ファイルに保存されているエディターのキーワード リストを編集できることを覚えています。制御に役立つファイルまたはマクロ (たとえば、「この特定のファイルの内容を解析しない」など) があるかもしれません。インテリセンス?

4

1 に答える 1

1

「問題」は、Intellisense コンパイラが MSVC 自体ではなく、EDG のコンパイラの上に構築されていることです。EDG のコンパイラは標準にはるかに近いため、MSVC が来年検出する可能性のある問題を現在検出できます。

コード ベースの一部で Intellisense をオンまたはオフにすることはできません。それは意味がありません。それが無視int foo(int)され、コンパイラがint foo(int)オーバーロードの解決に含めると仮定します。プログラム全体が変更される可能性があります。

于 2013-08-13T08:04:54.180 に答える