web-dev-qa-db-ja.com

C ++インテリセンスエンジンのマクロを定義するにはどうすればよいですか?

"Default" intellisenseエンジンを使用すると、C++プロジェクトの一部のシンボルを解決できません。それは、それらが#ifdefによって保護されているヘッダー内にあるためであり、これは、メイクファイルによって-Dフラグでgccに渡されたマクロに依存します。ヘッダーのそれらの部分をコンパイルできるように、これらの定義についてインテリセンスエンジンにどのように伝えることができますか?

13
Kamil Kisiel

プロジェクトのメイクファイルdefinesは_.vscode/c_cpp_properties.json_に設定されています。

_"configurations": [
{
   ...
   "defines":[
       "MYSYMBOL",
       "MYVALUE=1"
   ]
}
], ...
_

_c_cpp_properties.json_を開く方法は次のとおりです。

  1. インテリセンスが解決できないincludeステートメントのようなものに緑の波線を見つけます。カーソルを合わせて、表示される電球をクリックします(これは非常に小さく、少しゲームをクリックするだけです)。エディターでプロジェクト構成ファイルを開きます。

  2. 上記と同じですが、緑色の波線にカーソルを合わせ、Ctrl + _._を押します。

  3. コマンドパレットを使用してください:ctrl + shift + P、次にC/C++: Edit configurations (JSON)を選択します。

  4. ファイルが.vscodeフォルダーに既に存在する場合は、File-> Openで開きます。

_c_cpp_properties.json_が変更された後、vscodeは設定を再処理しますが、値を変更するときに再起動が必要になることがあります。

ここには基本的で不完全な情報があります: https://code.visualstudio.com/docs/languages/cpp

これは_c_cpp_properties.json_ファイル自体に関する適切なリンクです: https://code.visualstudio.com/docs/cpp/c-cpp-properties-schema-reference

8
jws

この機能が追加されました: https://github.com/Microsoft/vscode-cpptools/issues/304

c_cpp_properties.jsonファイルで「defines」を設定できます

1
Daniel

これまでの他の回答には、簡単に修正できない2つの問題があります。

  1. ソースファイルごとに異なるコンパイラフラグが必要になる場合があります。

  2. 必要なコンパイラフラグを手動で見つけて手動で追加するのは、非常に面倒な作業です。

さいわい、VS CodeのC/C++拡張機能は、compile_commands.jsonデータベースをサポートしています。これには、定義、インクルードディレクトリ、その他のコンパイラコマンドラインフラグなど、個々のソースファイルに固有の情報が格納されます。生成してVSコードを取得して使用する方法の詳細な説明をここに投稿しました https://stackoverflow.com/a/59618515/12663912

0
dutchkin