最近我在使用vscode+c/c++插件的环境来查看以前同事写的stm32单片机代码,使用vscode直接添加文件夹到工作区后在vscode的"问题"窗口中有好多错误,并且结构体变量没有语法提示功能,更不用说结构体成员变量的语法提示了。
通过不断测试,最终得出结论:语法不提示问题是因为c/c++插件遇到了问题,解决掉"问题"窗口中的错误后,语法提示问题就不存在了。
(1)首先,导入文件夹后的现象和问题:


(2)解决"问题"窗口中遇到的问题。
可以参考我的另外一篇文章:
https://mp.csdn.net/mp_blog/creation/editor/148357000
需要增加"c_cpp_properties.json"的配置文件。

问题依旧:

根据我的文章中内容复制最终的c_cpp_properities.json中的内容,不过需要修改部分选项。
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**"
//"D:\\Program Files (x86)\\MDK\\ARM\\ARMCC\\include" // 需要添加系统头文件路径
],
"defines": [
"USE_HAL_DRIVER", // 根据具体情况修改
"STM32F103xE", // 根据具体情况修改
"__CC_ARM",
"__arm__",
"__align(x)=",
"__ALIGNOF__(x)=",
"__alignof__(x)=",
"__asm(x)=",
"__forceinline=",
"__restrict=",
"__global_reg(n)=",
"__inline=",
"__int64=long long",
"__INTADDR__(expr)=0",
"__irq=",
"__packed=",
"__pure=",
"__smc(n)=",
"__svc(n)=",
"__svc_indirect(n)=",
"__svc_indirect_r7(n)=",
"__value_in_regs=",
"__weak=",
"__writeonly=",
"__declspec(x)=",
"__attribute__(x)=",
"__nonnull__(x)=",
"__register=",
"__breakpoint(x)=",
"__cdp(x,y,z)=",
"__clrex()=",
"__clz(x)=0U",
"__current_pc()=0U",
"__current_sp()=0U",
"__disable_fiq()=",
"__disable_irq()=",
"__dmb(x)=",
"__dsb(x)=",
"__enable_fiq()=",
"__enable_irq()=",
"__fabs(x)=0.0",
"__fabsf(x)=0.0f",
"__force_loads()=",
"__force_stores()=",
"__isb(x)=",
"__ldrex(x)=0U",
"__ldrexd(x)=0U",
"__ldrt(x)=0U",
"__memory_changed()=",
"__nop()=",
"__pld(...)=",
"__pli(...)=",
"__qadd(x,y)=0",
"__qdbl(x)=0",
"__qsub(x,y)=0",
"__rbit(x)=0U",
"__rev(x)=0U",
"__return_address()=0U",
"__ror(x,y)=0U",
"__schedule_barrier()=",
"__semihost(x,y)=0",
"__sev()=",
"__sqrt(x)=0.0",
"__sqrtf(x)=0.0f",
"__ssat(x,y)=0",
"__strex(x,y)=0U",
"__strexd(x,y)=0",
"__strt(x,y)=",
"__swp(x,y)=0U",
"__usat(x,y)=0U",
"__wfe()=",
"__wfi()=",
"__yield()=",
"__vfp_status(x,y)=0"
]
}
],
"version": 4
}
修改c_cpp_properities.json文件后,问题窗口的错误为:

也就是需要制定stdint.h所在系统路径。
如果我们添加的事IAR环境stdint.h头文件所在路径,

发现问题更多了:

说明IAR环境中的头文件路径不能使用。
换成keil MDK的头文件所在路径

问题窗口中的问题消失了,并且结构体变量有了语法提示功能。


总结:
(1)结构体语法不提示问题和vscode的问题窗口存在问题有关,只要将"问题"窗口中的错误解决了,结构体语法提示问题自然解决了。
(2)IAR环境中头文件路径不能使用,需要使用keil MDK环境中头文件所在路径。(太坑了)
bash
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**",
"D:\\Program Files (x86)\\MDK\\ARM\\ARMCC\\include" // 需要添加keil MDK环境系统头文件路径
],
"defines": [
"USE_HAL_DRIVER", // 根据具体情况修改
"STM32F103xE", // 根据具体情况修改
"__CC_ARM",
"__arm__",
"__align(x)=",
"__ALIGNOF__(x)=",
"__alignof__(x)=",
"__asm(x)=",
"__forceinline=",
"__restrict=",
"__global_reg(n)=",
"__inline=",
"__int64=long long",
"__INTADDR__(expr)=0",
"__irq=",
"__packed=",
"__pure=",
"__smc(n)=",
"__svc(n)=",
"__svc_indirect(n)=",
"__svc_indirect_r7(n)=",
"__value_in_regs=",
"__weak=",
"__writeonly=",
"__declspec(x)=",
"__attribute__(x)=",
"__nonnull__(x)=",
"__register=",
"__breakpoint(x)=",
"__cdp(x,y,z)=",
"__clrex()=",
"__clz(x)=0U",
"__current_pc()=0U",
"__current_sp()=0U",
"__disable_fiq()=",
"__disable_irq()=",
"__dmb(x)=",
"__dsb(x)=",
"__enable_fiq()=",
"__enable_irq()=",
"__fabs(x)=0.0",
"__fabsf(x)=0.0f",
"__force_loads()=",
"__force_stores()=",
"__isb(x)=",
"__ldrex(x)=0U",
"__ldrexd(x)=0U",
"__ldrt(x)=0U",
"__memory_changed()=",
"__nop()=",
"__pld(...)=",
"__pli(...)=",
"__qadd(x,y)=0",
"__qdbl(x)=0",
"__qsub(x,y)=0",
"__rbit(x)=0U",
"__rev(x)=0U",
"__return_address()=0U",
"__ror(x,y)=0U",
"__schedule_barrier()=",
"__semihost(x,y)=0",
"__sev()=",
"__sqrt(x)=0.0",
"__sqrtf(x)=0.0f",
"__ssat(x,y)=0",
"__strex(x,y)=0U",
"__strexd(x,y)=0",
"__strt(x,y)=",
"__swp(x,y)=0U",
"__usat(x,y)=0U",
"__wfe()=",
"__wfi()=",
"__yield()=",
"__vfp_status(x,y)=0"
]
}
],
"version": 4
}