Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Syntastic抱怨文件丢失 我正在使用QT来研究C++项目。我已经使syntastic能够通过我的vimrc检查头文件,它的检查器(gcc、clang_check和clang_tidy)在我的项目中都抱怨同一件事:它们找不到特定的头文件_C++_Qt_Vim_C Preprocessor_Syntastic - Fatal编程技术网

Syntastic抱怨文件丢失 我正在使用QT来研究C++项目。我已经使syntastic能够通过我的vimrc检查头文件,它的检查器(gcc、clang_check和clang_tidy)在我的项目中都抱怨同一件事:它们找不到特定的头文件

Syntastic抱怨文件丢失 我正在使用QT来研究C++项目。我已经使syntastic能够通过我的vimrc检查头文件,它的检查器(gcc、clang_check和clang_tidy)在我的项目中都抱怨同一件事:它们找不到特定的头文件,c++,qt,vim,c-preprocessor,syntastic,C++,Qt,Vim,C Preprocessor,Syntastic,所讨论的头文件是“QtCore/qconfig-64.h”。他们认为这个文件不存在是正确的。问题是,此文件不应加载到项目中,因为它是一个32位的项目。”QtCore/qconfig.h'有一个预处理器方向,通知项目要包括什么: #if __WORDSIZE == 32 #include "QtCore/qconfig-32.h" #elif __WORDSIZE == 64 #include "QtCore/qconfig-64.h" #else #error "unexpected valu

所讨论的头文件是“QtCore/qconfig-64.h”。他们认为这个文件不存在是正确的。问题是,此文件不应加载到项目中,因为它是一个32位的项目。”QtCore/qconfig.h'有一个预处理器方向,通知项目要包括什么:

#if __WORDSIZE == 32
#include "QtCore/qconfig-32.h"
#elif __WORDSIZE == 64
#include "QtCore/qconfig-64.h" 
#else
#error "unexpected value for __WORDSIZE macro"
#endif

有没有合适的方法让syntastic识别预处理器指令,选择要包含的头文件?如果没有,还有什么其他的解决方法可以使这些错误静音,同时最大限度地减少实用程序的损失?

请参见
:h'syntastic\u quiet\u messages'
,针对您的情况尝试此方法

let g:syntastic_c_gcc_quiet_messages = {
        \ "regex": ['\mQtCore/qconfig-64\.h']
        \}

注意:
QtCore/qconfig-64\.h
可以扩展为完整的错误消息,以避免丢失具有相同字符串的其他消息

使编译器对丢失的包含文件保持沉默可能是处理此问题的最糟糕方法。除此之外,
gcc
将跳过任何进一步的错误。这是一个潜在的问题。可以对Regex进行扩展以避免出现这种情况。缺少头对于
gcc
,是一个致命错误,之后它将停止运行<代码>g:syntastic\u c\u gcc\u quiet\u消息按它所说的做,它使一些消息安静下来。它无法说服
gcc
在检测到丢失的头后重新启动解析。请阅读
:h syntastic debug
:h syntastic cpp gcc
,并尝试使syntastic运行与编译文件相同的命令行。由于Vim和syntastic的工作方式,这可能是一个后遗症,但这是唯一有意义的方法。@SatoKatsura:我将在下一次机会研究syntastic调试信息。至于syntastic是否运行与我的编译器相同的命令,我指示syntastic使用插件附带的cc_args.py脚本生成的.clang_完整文件。我觉得——如果不是精确的话——对于大多数实际用途来说,它与同一个命令非常接近。根据我目前的信息,我最好的推测是Syntastic在代码中搜索include语句的方式要么不考虑#if语句,要么不考虑应用于它们的环境变量。Syntastic不关心
#if
s,也不关心文件的内容。syntastic所做的是运行linter,在本例中是
gcc
clangcheck
,和
clangtidy
(附带说明:
clangtidy
完成了
clangcheck
所做的一切,所以您不需要同时运行这两个)。如果您不向这些过梁提供所有相关的
-Dfoo=bar
,您将得到无用的错误,并且/或者他们将在不检查任何内容的情况下退出。除非你特别擅长ESP,否则这就是图中出现的
:h syntastic debug
。好的,我现在看到了。似乎
clang_complete
的cc_args.py忽略了几种类型的编译器标志。我注意到它关闭了
-O2
,这导致了与“加强”源相关的警告。似乎它还取消了通知程序32位性质的
-m32
标志。在这一点上,将这些标志传递到
syntastic\u cpp\u compiler\u options
可以解决
gcc
的问题,但是
clang\u check
clang\u tidy
mkprg
命令似乎没有被这个变量更改。然而,这个问题可能属于它自己的问题(如果还没有涉及的话)或者可能是一个bug报告。在提交bug报告之前,您可以考虑阅读手册(<代码>:H SytasASC-C-Cangang-Tydiy < /代码>等)。耸肩