• Linux下C/C++ IDE推荐


    如果是windows下,不用考虑了,直接visual studio,免费,功能强大。

    linux下有很多ide,但是都不太好用,这里就个人使用,并且针对特定工程做一下介绍。

    每种ide,如果用习惯了,肯定都可以胜任工作,这是个人习惯问题。因为不可能对每一种ide都在项目中长时间使用,本人就以个人上手以及某几个测试用例来说一下体验。

    测试场景就是,常见的公司项目,代码量比较大,头文件引用比较多,各种宏定义和指针。比如有一个结构体,很多源文件都在用,定义在一个公共头文件中,结构体中有指针,还有宏定义的内容,还有根据宏定义来确定是否加载的成员变量。开发过程中,难免会遇到这样的结构体,并且需要跟踪查看其定义,还需要编写的时候智能提示。

    测试示例一

    可以打开文件夹,因为项目中肯定不可能依赖某种ide开发,所以都是配置文件加各种编译脚本,所以ide必须可以直接导入或者打开对应文件夹,然后就可以阅读代码,进行开发

    测试示例二

    可以识别任意函数,也就是在当前窗口,有一个列表可以查看所有的函数,并且可以点击定位到函数,即使函数参数中有宏定义的内容,也可以正确识别

    测试示例三

    可以配置快捷键。因为我们都有自己的爱好,主要就是有的IDE既不提供自定义快捷键,还把常用的快捷键定义的很复杂,简直反人类。

    测试示例四

    复杂的嵌套结构,可以准确识别变量类型,并且可以正常跳转到定义位置。
    阅读代码的时候需要可以跳到定义内容,悬停可以查看变量类型,编写代码可以直接提示。

    union U1
    {
    #ifdef D5
        struct S3 v6;
    #endif
        int v7;
    };
    
    struct S2
    {
        union U1  v8;
        int v6;
    };
    #define D1 \
        int v5; \
        struct S2 v4;
    
    #define D3 \
        int v3;
    
    struct S1
    {
        D1
    #ifdef D2
        D3
    #endif
    
    #ifdef D4
        int v1;
    #endif
        int v2;
    };
    
    struct S1* test;
    

    对于test变量,可以直接使用.访问到以上的任何变量,不能因为嵌套就无法访问;不能因为宏定义就无法访问,比如v1,不能因为没有定义D4就无法访问;不能因为是宏定义中的内容就无法访问,比如D1中的v5 v4,并且D1中嵌套的v4 v8 v6都可以访问到;不能因为定义了宏中的宏替换的内容而无法访问,比如D3指定的v3。

    常见排除的ide

    vim emacs sublime text

    这些文本编辑器很好用,但并不适合做ide。有些人为了显示自己多牛,张口就来,说vim/emacs配置好多么无敌,或者说某某大神都是这样开发。本人并不认同这样的观点,首先,为什么需要这么复杂的配置一个文本编辑器?其次,配置完也并不好用。
    很多大神这样开发有可能是因为大神都是入行早,那时候并没有这些好用的ide,没办法只能强行对当前的工具改造。等后续新的ide出来了,自己也习惯了原来的工具,不想折腾了。
    还有有人说在服务器上开发没有图形界面,就个人经验,感觉是非常不负责任。真正项目,没人会在服务器上直接开发,线上服务器肯定不肯能直接开发,本地服务器都是用作编译测试的,这么多人开发项目,都在一个服务器上?版本管理器也不用吗?服务器能受得了?在服务器上开发顶多是临时应急或者排查问题。正常流程都是本地开发,推送到服务器编译测试。在服务器上直接开发,出了问题算谁的?既然本地开发为什么自己找罪受,非要弄一个无图形界面的环境。不是用的东西越古怪就越厉害,不要把精力浪费在无用的事情上面。

    eclipse

    当时写jsp的时候就不是特别喜欢它,随着现在各种专业的ide越来越便捷智能,eclipse慢慢就被淘汰了。工具庞大,启动缓慢,配置复杂,背靠IBM的eclipse并没有给大家带来惊喜。

    Code::Blocks

    虽然很多推荐都把这个放在首位,个人感觉就是赶紧放弃。简陋,功能少,不好用

    NetBeans CodeLite

    这两个也常常出现在推荐上,也赶紧放弃,比Code::Blocks还简陋。CodeLite与文本编辑器差不多。而NetBeans是基于java的,本来就不怎么样,还是用java开发,打开缓慢,占用资源多。

    其他

    其他的比如KDevelop Geany等就不用看了,要么早就不维护了,要么依赖固定的桌面环境,并且都是功能简陋。

    上面的这些ide主要的缺点就是

    • 无法正常打开文件夹工程。要么有的根本没有对应的功能,要么就非常复杂,要各种转换。绝大部分都是需要创建一个对应的工程,然后把自己的目录再添加进去,非常麻烦,还不好用
    • 测试示例四都无法通过,包括eclipse。这个是所有上面提到的ide都挂掉的一个case,这是绝对不考虑的。作为开发者,大部分时间都在与ide打交道,做开发,结果写代码没有提示,需要各种翻变量名,手写,无法忍受
    • 功能简陋。比如代码自动格式化,快捷键编辑,定义跳转,引用查询等都没有

    可能有人会说有的ide可以满足需求,是因为不会配置。首先系统上已经安装了gcc clang cmake等工具,正常来说一个专门针对某种语言的ide,如果最基本的配置-必须依赖相关语言的工具,安装后没有默认附带,没有提示安装,同样没识别到系统中已经安装的信息,配置起来还很麻烦,配置完后也不好用,我何必用它呢。

    3个选择

    CLion

    Jetbrains的口碑一直不错,CLion在linux下使用起来体验也可以。唯一缺点是java开发,可能启动慢,占用资源多。但是快捷键可编辑,代码提示优秀,上面的四个测试全部通过。可配置性高,如果入了Jetbrains全家桶,使用习惯统一,非常不错。不过还有一个需要考虑的是,它是付费的。

    Visual Studio Code VS Code

    vs code社区比较活跃,对应的各种插件都齐全,并且支持不需要保存文件修改而直接退出,下次打开会直接定位到上次开发的位置。使用中遇到的问题就是有时候代码解析有问题,跳转不了,重启可以解决。还有就是不能多种语言编码格式混合使用,有时候会覆盖冲突。可能有人介意其底层是js实现的,属于一个前端的工具。不过也正式由于这个原因,自定义内容非常丰富,与Jetbrains系列一样的可以自动识别文件语言,提示加载对应的插件。

    Qt Creator

    虽然这个是针对于qt而开发的ide,但是也非常适合作为c/c++的ide。不过其打开文件夹必须要创建一个其对应的工程,虽然创建的过程比较友好,但是不如上面两个方便。还有一点就是打开的文件不是平铺在上面,而是在一个下拉列表中选,可能用习惯了那种平铺的,有点不适应。但是qt creator是c++开发的,启动相对快速。其默认是一个light主题,代码开上去也很舒服。不过下载安装很难找到离线安装包,在线安装必须要有qt的账号。

    总结

    新增测试一

    main.c引用一个头文件a.h,a.h中声明了一个extern int a[10];,a.c中定义了int a[10];,在main.c中使用memset(a, 0, sizeof(a));进行初始化数组,这时在main.c的memset中需要可以定位到a.c中真正定义的地方,也可以定位到a.h中声明的地方。

    CLion Visual Studio Code Qt Creator
    付费 免费 免费
    下载方便 下载方便 下载麻烦,官网没有明显下载Qt Creator的指引,需要在下载Qt比较深的目录再选择Qt Creator
    必须登录账户 不必登录账户 必须登录账户
    下载的是官方安装工具,需要再次选择安装 直接安装 下载的是官方工具,需要再次选择安装
    可以直接打开目录 可以直接打开目录 需要创建工程->导入->创建工程名->指定目录
    可以配置快捷键 可以配置快捷键 可以配置快捷键
    可以后退上一个位置 可以后退上一个位置 可以后退上一个位置
    支持不同文档Split View 支持不同文档Split View 支持不同文档Split View
    支持同一文档Split View 支持同一文档Split View 支持同一文档Split View
    测试示例四通过 测试示例四通过 测试示例四通过
    默认代码格式化功能丰富 默认代码格式化功能正常 默认代码格式化简单
    配置代码格式化简单,提供了选项配置 配置代码格式化相对简单,有对应选项配置,也可以自己设置 配置代码格式化相对复杂,需要安装插件,然后选择格式化工具,默认功能简单,需要手动配置
    粘贴代码自动格式化 粘贴代码自动格式化 粘贴代码不会格式化
    编写代码自动格式化,包括;}等 编写代码自动格式化(;有作用)(}不起作用) 编写代码不能格式化
    支持保存格式化 支持保存格式化 支持保存格式化
    新增测试一不通过,会定位到memset函数,无法定位到变量真正的位置 新增测试一通过,因为vs code最终使用gcc或者clang进行解析,目前所有的代码解析基本都依托于gcc/clang,猜测clion是使用gcc/clang后,自己做了一些工作,反而导致代码关联有问题,不如vs code直接使用gcc/clang的效果好 未测试
  • 相关阅读:
    Java——spring入门
    Java日志管理之logback
    Java之MyBatis
    Java之JDBC
    Java核心类——BigDecimal
    Java核心类——BigInteger
    Java核心类——枚举类
    Java核心类——JavaBean
    Java核心类——包装类型
    Java核心类——StringJoiner
  • 原文地址:https://www.cnblogs.com/studywithallofyou/p/16716043.html
Copyright © 2020-2023  润新知