How can I define macros for the C++ intellisense engine?

Kamil Kisiel picture Kamil Kisiel · Sep 26, 2017 · Viewed 15.6k times · Source

When using the "Default" intellisense engine, some of the symbols in my C++ project cannot be resolved. It turns out that it's because they are in headers where they are guarded by an #ifdef that depends on a macro passed to gcc with the -D flag by the makefile. How can I tell the intellisense engine about these defines so that it is able to compile those parts of the header?

Answer

jws picture jws · May 6, 2019

Project makefile defines are set in .vscode/c_cpp_properties.json.

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

Here are some methods to open c_cpp_properties.json:

  1. Find a green squiggle on something like an include statement that Intellisense can't resolve. Hover around and click the lightbulb that appears (which is tiny and a bit of a game to click). It will open the project config file in the editor.

  2. Same as above, but put cursor on the green squiggle line and press Ctrl+..

  3. Use the command pallet: ctrl+shift+P, then select C/C++: Edit configurations (JSON).

  4. If the file already exists in your .vscode folder, open it with File->Open.

Although vscode will reprocess the settings after c_cpp_properties.json is modified, I found a restart is sometimes required when changing values.

There is basic and incomplete information here: https://code.visualstudio.com/docs/languages/cpp

This is a good link about the c_cpp_properties.json file itself: https://code.visualstudio.com/docs/cpp/c-cpp-properties-schema-reference