C 语言编译器简介


C 语言编译器的作用是将 C 程序的源码翻译成特定计算机硬件上可执行的二进制文件。

在默认 C 程序的编译与运行发生在同一环境的前提下,根据可执行文件运行的环境可以将 C 语言编译器分为桌面操作系统和嵌入式操作系统两大类。

桌面操作系统上的 C 语言编译器

桌面操作系统上常用的 C 语言编译器有:

  1. Visual C++
  2. GCC
  3. Clang

当前主流的三类桌面操作系统及其上常用的编译器为:

  1. Windows: Visual C++ / GCC / Clang
  2. Unix/Linux: GCC / Clang
  3. OS X/iOS: Clang

Visual C++ (简称 MSVC ) 是微软开发的 C 编译器,只能用于 Windows 系统。
MSVC 是非开源软件,个人用户可以通过社区版 Visual Studio 免费使用该编译器。
但是未经微软授权, MSVC 不能应用到商业化产品。

GCC(GNU Compiler Collection/GNU 编译器套件) 是由 GNU 开发的编译器。
GNU 编译器套件包括 C、C++、 Objective-C、 Fortran、Java、Ada 和 Go 语言前端, 也包括了这些语言的库。
GCC 的初衷是为 GNU 操作系统专门编写的一款编译器。

Clang 编译器是 LLVM 项目的一部分,由于该项目是在 Apple 主推下发展的,所以在 OS X 系统中,Clang 编译器又被称为 Apple LLVM 编译器。

GCC 和 Clang 可用于 Windows 系统,但主要用于 Unix/Linux 系统。
GCC 与 Clang 编译器编译出的可执行程序一般没有任何限制,应用程序可以随意发布和商用。

嵌入式系统上的 C 语言编译器

不同型号的嵌入式设备常常需要对应的配套编译器,常见的有:

  1. Keil C51: Keil公司的 51 系列单片机
  2. AVR GCC: Arduino 开发板
  3. ADS、RVDS、DS-5 Studio: ARM 架构设备
  4. CCS: TI 公司的 DSP 设备
  5. Visual DSP++: ADI 公司的 DSP 设备

Windows 系统安装 GCC 的方法

GCC 的初衷是为 GNU 操作系统专门编写一款编译器, 现已被大多数类 Unix 操作系统(如 Linux、BSD 等)采纳为标准的编译器。
在 Windows 系统上使用 GCC 编译器需要借助 MinGW(Minimalist GCC for Windows) 提供一组包含文件和端口库,好让控制台模式的程序能够使用微软的标准C运行时库(C Runtime/MSVCRT.DLL)。

MinGW Download 可以下载 MinGW-get 程序。
MinGW-get 是 MinGW 的一个包管理程序, 用来管理各类包含文件与端口库。
安装好需要的包后即可在 Windows 终端上调用 GCC 来编译指定源码。

GCC 的基本使用方法

GCC 的详细用法可以参考 GCC Manual 。此处简单介绍 GCC 的基本用法。

GCC 编译的基本语法为:
gcc [options] [filenames]
其中[options]是输入参数,[filenames]是各输入/输出文件名。

GCC 编译的常用参数包含:

  • [-c]只编译, 不链接成可执行文件; 输入源代码*.c文件, 输出*.o目标文件; 常用于编译不含主程序的子程序文件。

  • [-o OUTPUT_FILENAME]GCC 默认输出的可执行文件名为a.out; 此参数可将输出文件名设置为OUTPUT_FILENAME,GCC 要求设置文件名不能和源文件同名。

  • [-g]产生符号调试工具 (GDB) 所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。

  • [-O]编译过程中对程序进行优化; 在编译、链接采用这个选项,源代码会在编译、链接过程中被编译器优化处理,以产生执行效率更高的可执行程序; 但编译、链接的速度会相应降低。

  • [-O2]编译器会执行比-O更深度的优化, 同时编译速度也更慢。

  • [-I DIRNAME]DIRNAME指示的目录加入到程序头文件目录列表中;用于预编译过程。

  • [-v]打印出 GCC 相关程序的版本号以及编译器执行时的详细过程信息; 此参数可用于查看 GCC 搜索头文件及库文件时使用的搜索路径。

(注)
C 程序有两种预编译指令可用于包含头文件
#include <stdio.h>
#include "stdio.h"
使用尖括号包含头文件时, 编译器在预编译时会在系统路径包含的目录中搜索该文件; 使用双引号包含头文件时,编译器会在源码文件所在的文件夹中搜索该文件。

GCC 相关文件

  • *.h程序所包含的头文件;
  • *.cC 源代码文件;
  • *.iC 源代码文件且不应进行预处理;
  • *.o编译后的目标文件(Object File);
  • *.a目标文件构成的档案库文件;
  • *.out链接后输出的可执行文件;
  • *.C / *.cc / *.cxxC++ 源代码文件且必须要经过预处理;
  • *.iiC++ 源代码文件且不应进行预处理;
  • *.mObjective-C 源代码文件;
  • *.mmObjective-C++ 源代码文件;
  • *.s汇编语言源代码文件;
  • *.S经过预编译的汇编语言源代码文件。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM