According to tc-tp-tc-tp-specify-source-file-type specifying /Tc filename on the command line will override the /TP global option.
IntelliSense in a Visual Studio 2019 Makefile project assumes C++ but my files are C
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?