Linux下C/C++ IDE推荐

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

linux下有很多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中声明的地方。

新增测试二

开发新模块,从另一个现有的模块复制对应的代码,然后修改。修改过程中肯定会有与原来模块相似的变量名,或者临时删除定义,但是代码中还在使用的结构体等。期望能够正常跳转定义,而不会出现无法定位变量位置,或者定位错误的现象。
比如有一个mysql模块,定义了很多mysql相关的结构体:mysql_data。现在要开发一个oracle模块,复制过来,修改为oracle_data,在开发过程中可以正常定位,而不会出现查找oracle_data的定义,结果定位到mysql_data。

新增测试三

代码中常见的一些容易导致错误的写法,是否可以提示。比如在判断语句中使用了复制语句;或者在正常复制时误写成==,判断是否相等。因为这些肯定是有问题的,比如本来想写a=1;,结果写成了a==1;,单独写一个判断语句是没有任何意义的,绝大多数情况都是误写,ide应该能提示出来。

CLion Visual Studio Code Qt Creator
付费 免费 免费
下载方便 下载方便 下载麻烦,官网没有明显下载Qt Creator的指引,需要在下载Qt比较深的目录再选择Qt Creator
必须登录账户 不必登录账户 必须登录账户
下载的是官方安装工具,需要再次选择安装 直接安装 下载的是官方工具,需要再次选择安装
可以直接打开目录 可以直接打开目录 需要创建工程->导入->创建工程名->指定目录
可以配置快捷键 可以配置快捷键 可以配置快捷键
可以后退上一个位置 可以后退上一个位置 可以后退上一个位置
支持不同文档Split View 支持不同文档Split View 支持不同文档Split View
支持同一文档Split View 支持同一文档Split View 支持同一文档Split View
测试示例四通过 测试示例四通过 测试示例四通过
默认代码格式化功能丰富 默认代码格式化功能正常 默认代码格式化简单
配置代码格式化简单,提供了选项配置 配置代码格式化相对简单,有对应选项配置,也可以自己设置 配置代码格式化相对复杂,需要安装插件,然后选择格式化工具,默认功能简单,需要手动配置
粘贴代码自动格式化 粘贴代码自动格式化 粘贴代码不会格式化
编写代码自动格式化,包括;}等 编写代码自动格式化(;有作用)(}不起作用) 编写代码不能格式化
支持保存格式化 支持保存格式化 支持保存格式化
新增测试一不通过,会定位到memset函数,无法定位到变量真正的位置。但是如果在memset中,在第三个参数,使用sizeof获取设置变量长度,通过这里可以定位到 新增测试一通过,因为vs code最终使用gcc或者clang进行解析,目前所有的代码解析基本都依托于gcc/clang,猜测clion是使用gcc/clang后,自己做了一些工作,反而导致代码关联有问题,不如vs code直接使用gcc/clang的效果好 未测试
新增测试二通过,可以很好的、及时的同步修改的代码索引 新增测试二通过,需要配置Code Analysis,如果不能及时自动解析,可以在右下角,找到对应的位置,选择立即运行。解析可以选择是针对当前文件,还是打开的文件,还是所有文件 未测试
新增测试三通过,jetbrain全家桶的智能提示都非常好用,使用过goland和clion,都可以针对误写的代码作出提示。 新增测试三不通过,没有任何提示,警告,报错都没有。 未测试

从长时间使用下来看,vs code和clion都不错。目前开发查看代码使用vscode,而编译调试使用clion。

posted @ 2022-09-21 16:21  秋来叶黄  阅读(7919)  评论(2编辑  收藏  举报