IntelliSense in a Visual Studio 2019 Makefile project assumes C++ but my files are C

Renishug 1 Reputation point
2021-10-14T08:41:56.85+00:00

Visual Studio 2019, V16.11.4

If I create a Makefile project, then add a C file, say main.c, to it, IntelliSense teats that file as a C++ file, not a C file, which is leading to IntelliSense squiggles that really should not be there.

I can tell that the file is being treated as C++ because if I enable Diagnostic Logging, with Level 5 and Filter 8, the output is:

<9448> [IntelliSense] command line options:
/c
/W1
/WX-
/DWIN32
/D_DEBUG
/EHsc
/MDd
/fp:precise
/Zc:wchar_t
/Zc:forScope
/ifcOutputDebug\
/FoDebug\
/Gd
/errorReport:prompt
/TP
/IC:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30133\include
/IC:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30133\atlmfc\include
/IC:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\VS\include
/IC:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt
/IC:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um
/IC:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared
/IC:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\winrt
/IC:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\cppwinrt
/IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\Include\um
/AIC:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30133\atlmfc\lib\x86
/AIC:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30133\lib\x86
/AIC:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30133\lib\x86
/AIC:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30133\atlmfc\lib\x86
/AIC:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\VS\lib\x86
/AIC:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\ucrt\x86
/AIC:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86
/AIC:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\lib\um\x86
/BCDC:\Users\xxxxxxxx\source\repos\MakefileProjectTest
C:\USERS\xxxxxxxx\SOURCE\REPOS\MAKEFILEPROJECTTEST\MAIN.C
/AutoPCHC:\Users\xxxxxxxx\source\repos\MakefileProjectTest.vs\MakefileProjectTest\v16\ipch\AutoPCH\c899e3138a898b7c

Key in these command line options is "/TP", which means 'treat all files as C++'.

If I open the project Properties, go to the NMake Configuration Property, and add /TC /std:c11 to the "Additional Options" entry for IntelliSense, then the above becomes,

<9448> [IntelliSense] command line options:
/c
/W1
/WX-
/DWIN32
/D_DEBUG
/EHsc
/MDd
/fp:precise
/Zc:wchar_t
/Zc:forScope
/ifcOutputDebug\
/FoDebug\
/Gd
/errorReport:prompt
/TC
/std:c11
/TP
/IC:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30133\include
/IC:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30133\atlmfc\include
/IC:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\VS\include
/IC:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt
/IC:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um
/IC:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared
/IC:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\winrt
/IC:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\cppwinrt
/IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\Include\um
/AIC:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30133\atlmfc\lib\x86
/AIC:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30133\lib\x86
/AIC:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30133\lib\x86
/AIC:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30133\atlmfc\lib\x86
/AIC:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\VS\lib\x86
/AIC:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\ucrt\x86
/AIC:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86
/AIC:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\lib\um\x86
/BCDC:\Users\xxxxxxxx\source\repos\MakefileProjectTest
C:\USERS\xxxxxxxx\SOURCE\REPOS\MAKEFILEPROJECTTEST\MAIN.C
/AutoPCHC:\Users\xxxxxxxx\source\repos\MakefileProjectTest.vs\MakefileProjectTest\v16\ipch\AutoPCH\c899e3138a898b7c

The "/TC /std:c11" has appeared, as expected, but the "/TP" is still there and appears to 'win'. A keyword of C11, _Noreturn, is being given a squiggly when I use it (correctly) in main.c. I would like to get rid of the "/TP" command line option but it is being added behind the scenes. Is there a way for me to be able to alter this?

Developer technologies | Visual Studio | Other
{count} votes

1 answer

Sort by: Most helpful
  1. RLWA32 49,666 Reputation points
    2021-10-14T13:26:39.653+00:00

    According to tc-tp-tc-tp-specify-source-file-type specifying /Tc filename on the command line will override the /TP global option.


Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.