那些主流编程语言的知识,C语言

对于编程语言来说,经常看到有因为各自支持的语言阵营而互怼的,其实根本没那个必要,都只是一种工具而已 。当多数主流语言都会使用时也许你就不会有偏见了,本质不过都是用来描述计算机的一个任务,只是每门语言设计时考虑的侧重点不一样而已 。大家最好不要停留在语言层面去争执,不如把时间花在计算机实现原理和结构的本质上,这样更能理解编程语言每一行描述的东西在计算机是干什么的 。本系列将总结现在IT领域主流的那些编程语言的相关知识 。
 

那些主流编程语言的知识,C语言

文章插图
 
 
关于C语言C语言是最经典的语言,很多其他语言的运行环境也是用C来写的,对于写程序的人则能不懂C语言呢!提到C首先必然会让人关联到指针,当年在大学让你困惑的指针却是C语言威力无穷的基础 。C语言可能从更高层面的设计和编写效率上有所欠缺,但却足够经典且容易操控底层 。指针虽然风险不小,但却十分强大 。此外ANSI C也增强了C程序在不同操作系统的迁移性,下面列一些C语言的一些基础知识 。
 
那些主流编程语言的知识,C语言

文章插图
 
 
翻译阶段编写好的C程序需要先编译成可执行的机器指令才能运行,这便是翻译工作 。翻译的主要步骤是编译和链接,编译就是源代码到目标代码,而链接是将各个目标文件链接起来从而形成一个可执行的程序,当然链接器也会引入被程序所用到的所有标准C函数库的函数 。有时编译过程还会将预处理作为一个阶段,它主要是对源文件进行一些处理,比如将#define替换成实际值、将#include指定的文件内容填充进来 。下面是使用gcc来编译并链接的例子,经过编译和链接后得到可执行程序,这两个步骤通过gcc来完成,命令为gcc hello.c -o hello,最终运行./hello会输出“hello world” 。
#include<stdio.h>int main(){printf("hello world");}复制代码 
那些主流编程语言的知识,C语言

文章插图
 
 
假如我们编写了多个c文件,则编译器会分别编译成多个obj目标文件,然后再通过链接器将所有目标文件链接起来生成可执行文件 。
 
那些主流编程语言的知识,C语言

文章插图
 
 
关于扩展名注意windows系统的目标文件扩展名为obj,一般链接完成后也不会被删除 。而unix-like系统的目标文件扩展名为o,一般在链接完成后会被删除 。windows系统的可执行文件扩展名为exe,而unix-like系统的可执行文件名可以任意命名 。此外,C语言源文件一般后缀为c,而头文件后缀为h,虽然没有强制规定但大家都会去遵守这个约定 。
关于编译器翻译阶段需要将C语言代码变为可执行程序,这些工作由C编译器完成 。C编译器也有很多,常见的如下:
  • GCC,GCC即(GNU Compiler Collection,GNU编译器套件),由GNU开发的GPL许可的编译器自由软件 。刚开始只作为C语言编译器,但后来发展成多种语言编译器,比如C、C++、JAVA、Android、Objective-C和Fortran等等 。现在很多unix-like操作系统自带GCC,将其作为标准编译器 。
  • MS C,与微软的Visual Studio一起集成发布,由微软提供的一套完整的集成开发环境,编译后能在微软的所有操作系统上运行 。比如VS一般会使用CL编译器 。
  • Clang,它是一个基于LLVM的C/C++/Objective-C轻量级编译器,常用于mac系统下 。
  • Turbo C,这是一个比较流行的C编译器,小巧快速 。
  • cc,即C Compiler,这是一个unix系统古老的编译器,很多经典书籍会看到这个编译器 。为保持兼容,现在的linux系统会将cc作为一个符号连接指向gcc,即/usr/bin/cc -> gcc 。
gcc编译例子以linux系统的gcc为例,看几个编译例子 。假如hello.c的代码如下,
#include<stdio.h>int main(){printf("hello world");}复制代码我们直接使用如下的gcc命令对其进行编译,而且不带任何参数,此时将生成一个名为out.a的可执行文件,通过./a.out能够输出“hello world” 。
gcc hello.c复制代码假如添加name.h/name.c和adder.h/adder.c两对头文件和源文件,而且将hello.c稍作修改,三个文件代码分别如下 。
//name.hchar* get_name();//name.cchar* get_name() { char* name = "seaboat : "; return name;}复制代码//adder.hint add(int a, int b);//adder.cint add(int a, int b) { return (a + b);}复制代码


推荐阅读