QT Creator,用于c++11的语法检查
QT Creator, syntax checking for c++11
如何为这样的基于c++11循环范围的运算符关闭错误突出显示(代码下的红色波浪)?
int myint[] = {1,2,3,4,5};
for (auto x : myint){/**/}
悬停提示显示"意外令牌:
"。代码编译得很好。
另一个问题-自动完成在std::
命名空间中没有显示unique_ptr
,尽管编译正常。
- Qt Creator 2.4.0基于Qt 4.7.4(32位)于2011年12月12日在01:10:32
我不明白Andrew的回答中的推理思路。为什么自定义语法检查有意义?给定编译器命令行设置的上下文,语法要么正确,要么错误。如果它是错误的,就应该这样标记,如果不是,就不要。如果正确的代码被标记为错误,那么这是IDE中的一个错误,或者至少是不受支持的功能,它需要修复,而不是"自定义"。
话虽如此,引用的例子
int myint[] = {1,2,3,4,5};
for (auto x : myint){/**/}
在这里运行良好(master分支的最近构建)。
关于Kate的另一条评论:在没有更具体的语法高亮显示可用于文件的情况下,Qt Creator使用Kate的语法突出显示作为后备。在C++(98/03/11)的情况下,使用了一个真实的代码模型,而不是Kate的定义。
有"语法高亮显示"(着色)和"语法检查"(波浪下划线)。语法着色似乎确实与Kate有关,正如@Koying所建议的,你可以修改颜色并将其关闭。从Qt Creator 2.5.0开始,我从网上粘贴的大多数C++11示例似乎都没有问题,尽管你的示例确实仍然有下划线:
http://labs.qt.nokia.com/2012/05/09/qt-creator-2-5-0-released/
同样不幸的是,在撰写本文时(2012年6月13日,也就是发布后大约一个月),最新的集成SDK包仍在默认安装Qt Creator 2.4.1。://
如果这是一艘有人想要尝试最新版本的船,请不要像我所做的那样,使用/opt/QtSDK/SDKMaintenanceTool
清除您的Qt SDK安装!这在重新安装上浪费了时间,之后我执行了sudo rm -r /opt/QtSDK/QtCreator
,然后告诉新的QtCreator版本安装到/opt/QtSDK/QtCreator
。如果我的选择遇到问题,我会更新这篇文章!
http://qt-project.org/wiki/Qt_Creator_Releases
但是尽管它似乎可以与许多C++11构造配合使用,但它对您的示例和我遇到的特定情况(模板的unspaced<nested<syntax>>
)都没有任何作用。
(注意:这似乎是一件小事,但对我来说,这是C++11的一个大功能。我讨厌必须执行tailspaced<nested<syntax> >
……这让我总是在所有模板上执行fullyspaced< nested< syntax > >
,以保持一致。即使是像vector< int >
这样的简单情况。现在他们修复了编译器,我准备消除所有空白噪音。)
似乎没有任何方法可以关闭波浪形下划线(除非重新编译Qt Creator??)。
in qt-creator-2.5.0-srcsrcpluginscpptoolscppmodelmanager.cpp:
QTextCharFormat errorFormat;
/* disable error underline
errorFormat.setUnderlineStyle(QTextCharFormat::WaveUnderline);
errorFormat.setUnderlineColor(Qt::red);
*/
// set up the format for the warnings.
QTextCharFormat warningFormat;
/* disable warning underline
warningFormat.setUnderlineStyle(QTextCharFormat::WaveUnderline);
warningFormat.setUnderlineColor(Qt::darkYellow);
*/
不管怎样,在IDE中复制编译器的工作,而不是让两个共享前端代码,这都是一个疯狂的结果。我们生活在软件的黑暗时代。难道没有人能救我们吗?[/rant]
以下是一些相关代码(我认为):
https://qt.gitorious.org/qt-creator/qt-creator/blobs/master/src/plugins/cppeditor/cpphighlighter.cpp
和lexer,注意成员_cxx0xEnabled
:
https://qt.gitorious.org/qt-creator/qt-creator/blobs/master/src/libs/cplusplus/SimpleLexer.cpp#line80
除了for语法之外,模板间距是我在C++11中发现的唯一导致行数的因素。这对我来说已经足够重要了,我可以建立自己的QtCreator来解决它!
如果您使用C++11编写,您应该从使用QT Creator作为IDE更改为使用Eclipse CDT。至少我是这样解决这个问题的。QT Creator似乎没有任何方法来自定义这种实时语法检查。另一方面,Eclipse在这方面具有广泛的可定制性。
更新:我认为自从给出这个答案以来,QtCreator已经改进了对新版本C++的支持,所以它不再正确。我不能删除它,因为这是一个公认的答案。
Qt Creator使用Kate编辑器(来自KDE)中的语法高亮显示定义。请参见"工具"选项"文本编辑器"常规高亮显示"。
如果Kate对c++11有一个定义,你可以使用它,也可以开发自己的定义。
使用MSVC编译器,您需要添加以下行:
/std:c++11
到项目的project.cxxflags
配置文件,其中project
必须替换为项目名称。此文件位于项目目录的根目录中,如果它还不存在,则可能必须创建它。
备注:此设置是一个MSVC参数,因此其他编译器的语法可能会有所不同。
在Windows上使用Qt Creator 4.15.0-rc1(2021年4月)和Visual Studio 2017进行了测试,其中错误:
`error: no member named 'optional' in namespace 'std'` when trying to use std::optional from header <optional>
添加CCD_ 14时消失(C++17中添加了std::optional)。
- 1d 智能指针不适用于语法 (*)++
- valgrind-hellgrind与泄漏检查的结果不同
- 语法检查器指出一些我不知道为什么的错误
- Antlr4 - 表示检查任意数量的标记的语法谓词
- 如何使Netbean执行语法检查时使用C 14
- Eclipse 在检查语法时看不到包含文件,但在构建或运行应用程序时会看到
- 从C/C++程序调用OpenOffice拼写/语法检查
- Vim/Syntastic C/C++语法检查:可以配置为构建预编译的头文件
- 使用 foreach 语法迭代时如何检查我是否在最后一个元素上
- QT Creator,用于c++11的语法检查
- 使用vim中的语法启用cpp头文件检查
- 在我的解释器上为脚本代码实现语法检查器的最佳方式是什么
- Vim:配置语法c++检查器
- C/ c++和c#语法检查器,可以在文件列表上运行
- 编译后停止和仅检查语法之间的区别
- 为什么引用数组的语法需要(&arr)而不是(arr&)。另外,它如何帮助绑定检查?
- 如何减轻在C++中检查迭代器值的语法开销
- 从编译中排除部分—仍然是语法检查
- c++ lua支持与语法检查和功能完成
- 使用 C++ unit_test_framework语法检查失败的 Eclipse 和 Boost