在Vim w/Syntastic上的C文件中使用NULL时出现问题

在Vim w/Syntastic上的C文件中使用NULL时出现问题,c,gcc,vim,editor,syntastic,C,Gcc,Vim,Editor,Syntastic,嗨 我已经使用Syntastic语法检查器插件有一段时间了,我真的很享受这种体验,除了一个恼人的bug,我似乎不知道如何消除它 每次我尝试在我的C程序中使用NULL时,我都会得到一个由红色“>”表示的错误和一个错误气泡,上面写着“使用未声明的标识符'NULL'[undefined:]” >问题的屏幕截图链接问题似乎是Syntastic没有访问stddef.h文件,因为它位于gcc文件夹(见上文)的深处,而不在/usr/include中。复制stddef.h并将其放入/usr/include似乎已

我已经使用Syntastic语法检查器插件有一段时间了,我真的很享受这种体验,除了一个恼人的bug,我似乎不知道如何消除它

每次我尝试在我的C程序中使用NULL时,我都会得到一个由红色“>”表示的错误和一个错误气泡,上面写着“使用未声明的标识符'NULL'[undefined:]”


>问题的屏幕截图链接问题似乎是Syntastic没有访问
stddef.h
文件,因为它位于
gcc
文件夹(见上文)的深处,而不在
/usr/include
中。复制
stddef.h
并将其放入
/usr/include
似乎已经解决了我在使用
NULL
时遇到的问题。希望这不会产生任何进一步的问题;D


再次感谢所有人的投入,我希望这能在将来帮一些人省去一些头痛:)

你能列出一个复制这个的完整的小程序吗?您是否有明确的
#include
?如果没有,您可以添加它并查看它是否修复了警告吗?如果您构建的代码传递了一个额外的
-Wall
标志,您会看到相同的警告吗?Syntastic的默认设置没有意义,您确实需要根据您的项目调整它们。对于
gcc
,您需要告诉syntastic使用与编译文件相同的选项。有关详细信息,请参见
:h syntastic debug
。@filbranden嘿!谢谢你的回复!我是否包括stddef.h没有区别。即使使用-Wall标志,程序编译也没有问题。编译器中没有警告或错误。这似乎是syntastic的问题。例如,我可以在VisualStudio代码中打开同一个文件,但没有看到任何语法错误。我甚至可以窥视NULL的引用,看到它是在中定义的。@lcd047嘿!感谢您的快速响应。我之前确实读过调试文档,现在正在重新阅读。在编译我的程序时,我没有使用任何编译器标志,因为它们只是用于实践的小程序。在我的.vimrc文件中,我有推荐的配置行,并在尝试修复此问题时添加了更多的配置行(包括自动刷新、检查标题和std=c11)。根据我的SyntasticInfo报告,它似乎很好地识别和使用了gcc。是否需要配置更具体的内容?对不起,如果我没有正确解释你的回答。请不要把标签放在标题中;它是完全冗余的:这就是标记的用途。如果您可以编译文件而不出错,问题仍然是syntastic构建的命令行与您用于该文件的命令行不同。也就是说,你可能会再次遇到同样的问题。shrugI意识到了这一点,我很快就会用不那么懒惰的方式去做。
let g:syntastic_c_compiler_options= '-std=c18'

Syntastic version: 3.10.0-7 (Vim 802, Linux, GUI)
Info for filetype: c
Global mode: active
Filetype c is active
The current file will be checked automatically
Available checkers: gcc make
Currently enabled checkers: gcc

"Syntastic settings

let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0

"C Settings

let g:syntastic_c_compiler = 'gcc'
let g:syntastic_c_checkers=['gcc']
let g:syntastic_c_include_dirs=['/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include']
let g:syntastic_c_auto_refresh_includes = 1
let g:syntastic_c_compiler_options= '-std=c18'
let g:syntastic_c_check_header = 1


let g:syntastic_c_compiler_options= '-I/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include -Wall -std=c18'