当前位置: 首页 > news >正文

C语言编译器(C语言编程软件)完全攻略(包含所有平台)

C语言编译器(C语言编程软件)完全攻略(包含所有平台)

在上节《C语言编译和链接》中我们已经讲解了C语言编译器的概念,由于C语言的历史比较久,而且早期没有规范,整个计算机产业也都处于拓荒的年代,所以就涌现了很多款C语言编译器,它们各有特点,适用于不同的平台,本节就来给大家科普一下。

我们分两部分介绍C语言的编译器,分别是桌面操作系统和嵌入式操作系统。

桌面操作系统

对于当前主流桌面操作系统而言,可使用 Visual C++、GCC 以及 LLVM Clang 这三大编译器。

Visual C++(简称 MSVC)是由微软开发的,只能用于 Windows 操作系统;GCC 和 LLVM Clang 除了可用于 Windows 操作系统之外,主要用于 Unix/Linux 操作系统。

像现在很多版本的 Linux 都默认使用 GCC 作为C语言编译器,而像 FreeBSD、macOS 等系统默认使用 LLVM Clang 编译器。由于当前 LLVM 项目主要在 Apple 的主推下发展的,所以在 macOS中,Clang 编译器又被称为 Apple LLVM 编译器。

MSVC 编译器主要用于 Windows 操作系统平台下的应用程序开发,它不开源。用户可以使用 Visual Studio Community 版本来免费使用它,但是如果要把通过 Visual Studio Community 工具生成出来的应用进行商用,那么就得好好阅读一下微软的许可证和说明书了。

而使用 GCC 与 Clang 编译器构建出来的应用一般没有任何限制,程序员可以将应用程序随意发布和进行商用。

MSVC 编译器对 C99 标准的支持十分有限,直到发布 Visual Studio Community 2019,也才对 C11 和 C17 标准做了部分支持。 所幸的是,Visual Studio Community 2017 加入了对 Clang 编译器的支持,官方称之为——Clang with Microsoft CodeGen,当前版本基于的是 Clang 3.8。

C语言从诞生到现在,更新、迭代了多个版本,比如 C99、C11、C17 等。有关这些版本和它们之间的区别,我会在《 C语言的三套标准:C89、C99和C11》一文中做详细地介绍。

也就是说,应用于 Visual Studio 集成开发环境中的 Clang 编译器前端可支持 Clang 编译器的所有语法特性,而后端生成的代码则与 MSVC 效果一样,包括像 long 整数类型在 64 位编译模式下长度仍然为 4 个字节,所以各位使用的时候也需要注意。

为了方便描述,本教程后面涉及 Visual Studio 集成开发环境下的 Clang 编译器简称为 VS-Clang 编译器。

嵌入式系统

而在嵌入式系统方面,可用的C语言编译器就非常丰富了,比如:

  • 用于 Keil 公司 51 系列单片机的 Keil C51 编译器;
  • 当前大红大紫的 Arduino 板搭载的开发套件,可用针对 AVR 微控制器的 AVR GCC 编译器;
  • ARM 自己出的 ADS(ARM Development Suite)、RVDS(RealView Development Suite)和当前最新的 DS-5 Studio;
  • DSP 设计商 TI(Texas Instruments)的 CCS(Code Composer Studio);
  • DSP 设计商 ADI(Analog Devices,Inc.)的 Visual DSP++ 编译器,等等。


通常,用于嵌入式系统开发的编译工具链都没有免费版本,而且一般需要通过国内代理进行购买。所以,这对于个人开发者或者嵌入式系统爱好者而言是一道不低的门槛。

不过 Arduino 的开发套件是可免费下载使用的,并且用它做开发板连接调试也十分简单。Arduino 所采用的C编译器是基于 GCC 的。

还有像树莓派(Raspberry Pi)这种迷你电脑可以直接使用 GCC 和 Clang 编译器。此外,还有像 nVidia 公司推出的 Jetson TK 系列开发板也可直接使用 GCC 和 Clang 编译器。树莓派与 Jetson TK 都默认安装了 Linux 操作系统。

在嵌入式领域,一般比较低端的单片机,比如 8 位的 MCU 所对应的C编译器可能只支持 C90 标准,有些甚至连 C90 标准的很多特性都不支持。因为它们一方面内存小,ROM 的容量也小;另一方面,本身处理器机能就十分有限,有些甚至无法支持函数指针,因为处理器本身不包含通过寄存器做间接过程调用的指令。

而像 32 位处理器或 DSP,一般都至少能支持 C99 标准,它们本身的性能也十分强大。而像 ARM 出的 RVDS 编译器甚至可用 GNU 语法扩展。

下图展示了上述C语言编译器的分类。

C语言编译器的分类

C语言编译器或编程环境是编写、编译和运行C语言程序所必需的。由于C语言是一种跨平台的语言,因此存在多种编译器和集成开发环境(IDE)支持不同的操作系统平台。下面,我将为几个主要平台(Windows、Linux、macOS)提供C语言编译器和编程环境的概述,并给出一个简单的实例程序。

1. Windows 平台
编译器/IDE 选项
GCC(通过MinGW或Cygwin):GCC是GNU Compiler Collection的缩写,是一个开源的编译器集合,支持多种编程语言,包括C。MinGW(Minimalist GNU for Windows)和Cygwin提供了在Windows上运行GCC的方法。
Visual Studio Code + GCC:VS Code是一个轻量级的但功能强大的编辑器,支持通过安装扩展(如C/C++扩展)和配置GCC来编译C程序。
Visual Studio Community:微软提供的免费IDE,内置了对C/C++的支持,包括编译器和调试器。
实例程序

// hello.c  
#include <stdio.h>  int main() {  printf("Hello, World!\n");  return 0;  
}


编译步骤(以GCC为例)
打开命令提示符或PowerShell。
导航到包含hello.c的目录。
输入gcc hello.c -o hello并回车,这将编译hello.c并生成可执行文件hello(在Windows上可能是hello.exe)。
运行程序:输入.\hello(或hello.exe)并回车。
2. Linux 平台
编译器/IDE 选项
GCC:Linux系统通常预装了GCC。你可以通过终端访问它。
Eclipse CDT:Eclipse是一个流行的开源IDE,通过安装C/C++ Development Tooling(CDT)插件,可以支持C语言开发。
CLion:由JetBrains开发的一个跨平台的C/C++ IDE,提供了智能的代码分析、导航和重构工具。
编译步骤(以GCC为例)
打开终端。
导航到包含hello.c的目录。
输入gcc hello.c -o hello并回车。
运行程序:输入./hello并回车。
3. macOS 平台
编译器/IDE 选项
Xcode:Apple提供的官方IDE,支持C/C++等多种编程语言,并提供了强大的代码编辑、编译和调试功能。
Clang:作为Xcode的一部分,Clang是LLVM的前端,用于编译C、C++、Objective-C等语言。
Visual Studio Code + Clang:与Windows相同,VS Code也可以通过安装扩展来支持C/C++开发。
编译步骤(以Clang为例)
打开终端。
导航到包含hello.c的目录。
输入clang hello.c -o hello并回车。
运行程序:输入./hello并回车。
注意
安装编译器或IDE时,请确保按照官方文档或相关教程进行,因为不同版本和平台的安装步骤可能有所不同。
对于大型项目,建议使用IDE,因为它们提供了更多的项目管理、代码分析和调试功能。
编译选项(如-o)可能因编译器而异,但大多数编译器都支持类似的选项。

相关文章:

  • 【分布式微服务云原生】详细介绍下dubbo和springcloud所能支持的微服务特性,为啥能支持的技术原理,以及适用的业务场景,并对两者各方面做个详细的比较
  • Linux基础命令mkdir详解
  • 在CentOS 6上安装BIND DNS服务器的方法
  • 一份冗长的文字
  • Rust赋能前端:为WebAssembly 瘦身
  • 可视化大屏
  • 队列及笔试题
  • IO(Reader/Writer)
  • C#的Socket编程细节
  • 每日一练:从前序遍历与中序遍历序列构造二叉树
  • 这是一个悲惨的故事
  • (十七)、Mac 安装k8s
  • Miniforge详细安装教程(macOs和Windows)
  • mongoDB快速上手
  • vue按钮接收键盘回车事件
  • 345-反转字符串中的元音字母
  • bootstrap创建登录注册页面
  • CentOS 7 防火墙操作
  • CSS中外联样式表代表的含义
  • Java多线程(4):使用线程池执行定时任务
  • learning koa2.x
  • Redash本地开发环境搭建
  • REST架构的思考
  • spark本地环境的搭建到运行第一个spark程序
  • SpiderData 2019年2月25日 DApp数据排行榜
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 分布式熔断降级平台aegis
  • 回顾2016
  • 基于axios的vue插件,让http请求更简单
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 驱动程序原理
  • 试着探索高并发下的系统架构面貌
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • "无招胜有招"nbsp;史上最全的互…
  • #微信小程序:微信小程序常见的配置传值
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (回溯) LeetCode 131. 分割回文串
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (学习日记)2024.02.29:UCOSIII第二节
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (原)Matlab的svmtrain和svmclassify
  • (转)可以带来幸福的一本书
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .form文件_一篇文章学会文件上传
  • .NET Core 版本不支持的问题
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET 简介:跨平台、开源、高性能的开发平台
  • /3GB和/USERVA开关
  • @vue/cli脚手架
  • [15] 使用Opencv_CUDA 模块实现基本计算机视觉程序