QT Creator,用于c++11的语法检查

QT Creator, syntax checking for c++11

本文关键字:语法 检查 c++11 用于 Creator QT      更新时间:2023-10-16

如何为这样的基于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)。