C语言新手用什么 IDE 好 - 除了 Visual Studio、VSCode、CLion 还有什么其他选择?
回答这样的问题之前,我们需要先了解一下,究竟什么是 IDE?
IDE 即Integrated Development Environment,是集成开发环境的英文缩写。顾名思义,IDE 就是一个集代码编写、分析、编译、调试等功能为一体的应用程序。
第一个真正意义上的 IDE 是 1964 年发布的 Dartmouth BASIC IDE(即 Basic 的前身)。当时的 IDE 采用命令列的方式来操作,而且仅具有一些简单的功能。
今天距离第一个 IDE 诞生已将近 60 年,市面上早已出现层出不穷的各种 IDE。在编译器琳琅满目的今天,开发人员可以根据自己的喜好和 IDE 的特点来选择不同的IDE作为开发工具。根据 PYPL 网站(https://pypl.github.io/IDE.html)的调查,谷歌下载搜索率排行前三的 IDE 分别是:Visual Studio、Eclipse、Visual Studio Code。

这些榜前的 IDE 都各有其优缺点,大家大可对比一下,选择适合自己的 IDE 来进行开发:
Visual Studio
Visual Studio 是微软开发的一款 IDE,广泛用于 Windows 平台。Visual Studio 可以根据用户需要,选择和安装多个语言的编译环境,比如C++、C#、VB。正因为如此,其安装包一般都比较大,安装时间也会比较长。Visual Studio 很多操作都是图形化页面,易于理解。安装完毕后即可开始新建项目并进行编码。
划重点:

VSCode
VSCode 严格来说并不完全是 IDE,它是微软推出的一款可扩展的轻量级编辑器。也就是说,使用 VSCode 开发 C 语言时,用户还得额外下载和安装本地编译器(GC/VC++/Clang)并配置环境变量后,才能编译运行代码。有兴趣动手的下伙伴可以查看官网进行操作(https://code.visualstudio.com/docs/cpp/config-mingw)。
划重点:

CLion
CLion 是 JetBrains 旗下的一款跨平台 C/C++ IDE 开发工具。这款开发工具提供智能编辑器、自动代码重构、代码分析、评估表达式等多种功能。同时,CLion 还支持 GCC、clang、MinGW、Cygwin 编译器以及 GDB 调试器。使用CLion开发C语言,开发者需要下载和安装本地编译器,并配置环境变量。CLion免费试用30天后需要付费,每月需要支付$8.9。
划重点:

对于新手而言,在学习编程初期其实无需为选择 IDE 过于烦恼,反而应该专注与直接上手尝试编写代码,完成简单的项目试验(不然学习动力很快就被冗长的安装过程浇灭了)。
除了需下载安装的编译器,网络上其实也一些文本编辑器可以选择,TeamCode 甚至还推出了线上 IDE,解决了网络文本编辑器无法在线编译代码以及安装各类软件和环境变量的麻烦。
Lightly
Lightly 是 TeamCode 旗下的一款 IDE,除了在线版以外,强迫症用户同样也可以下载客户端线下使用。使用 Lightly 时,用户不需要配置任何编译运行环境,选择开发语言后即可开始写代码。代码和项目文件可以实时保存在云端,即便从上机室(暴露年代.jpg)回到宿舍后也能继续编码,再也不用因为奇怪的原因重写代码了。和下载版的众多 IDE 相似,Lightly 的页面简洁明了,同时还支持跨平台和多人实时在线协作编码。
Lightly 在线版使用流程
https://zhuanlan.zhihu.com/p/478582724
划重点:

各 IDE 功能对比
| Visual Studio | VSCode | CLion | Lighty | |
| 安装 | >30分钟 | <2分钟 | <2分钟 | <2分钟 |
| 环境配置 |
|
|
|
|
| 高亮显示 |
|
|
|
|
| 智能提示 |
|
|
|
|
| 自动补全 |
|
|
|
|
| 运行单文件 |
|
|
|
|
| 运行整个项目 |
|
|
|
|
| 快捷键 |
|
|
|
|
| 跨平台 |
|
|
|
|
| 云端存储 |
|
|
|
|
| 多人协作 |
|
|
|
|
| 费用 |
|
|
|
|
写在最后
实际上,每个 IDE 在自己的领域里都有自己的亮点。使用不同语言编程的程序员会推荐各自熟悉的 IDE,例如:写 Java 代码的会推荐 IDEA、PyCharm 就是 Python 最好的编译器等等。
对于刚开始接触 C 语言的开发者而言,老话还是——先上手最重要!与其在纠结中浪费时间,直接使用 Lightly 这样的 IDE 上手尝试更有效率:
最后,其实无论选择哪个IDE,最重要的还是自己用的顺心 …… 谁能想到当初我还用微软自带的笔记本写代码呢?
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返
它不等于主线程的binding,这个toplevel作用域是什么?此作用域与主线程中的binding有何不同?>ruby-e'putsTOPLEVEL_BINDING===binding'false 最佳答案 事实是,TOPLEVEL_BINDING始终引用Binding的预定义全局实例,而Kernel#binding创建的新实例>Binding每次封装当前执行上下文。在顶层,它们都包含相同的绑定(bind),但它们不是同一个对象,您无法使用==或===测试它们的绑定(bind)相等性。putsTOPLEVEL_BINDINGput
我可以得到Infinity和NaNn=9.0/0#=>Infinityn.class#=>Floatm=0/0.0#=>NaNm.class#=>Float但是当我想直接访问Infinity或NaN时:Infinity#=>uninitializedconstantInfinity(NameError)NaN#=>uninitializedconstantNaN(NameError)什么是Infinity和NaN?它们是对象、关键字还是其他东西? 最佳答案 您看到打印为Infinity和NaN的只是Float类的两个特殊实例的字符串
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象