C 的简单概念

一、c 的特性

1.运行高效

  • 1.cpu的运行
  • 我们都知道 cpu 的工作状态就是高速的运行指令,它的性能取决于 运行指令的速度、存库指令的数量…… ,cpu 只能读懂 0和1 组成的机器码指令,
  • 而基本的运算语言就有 编译性语言和解释性语言。举个最典型的例子 C Java Python,他们分别是 编译性语言、半编译半解释性语言、解释性语言。
  • CPU工作原理 … …

  • 2.编译性语言 :
  • 由编译器将 高级语言 转化为 机器语言 ,过程是先编译,编译完成后一次性运行。由于程序在运行前已经全部编译完成,所以明显 速度会更快。
  • 它的特点就很明显,执行效率高。跨平台性稍微差一点。
  • C、 C++ 、golang 都是编译性语言

  • 3.解释性语言 :
  • 或者叫做直译性语言更为合适吧,由解释器将代码一句一句运行。
  • 执行效率低一点,跨平台性好一点。
  • Java、C#、PHP、JavaScript、VBScript、 Perl、Python、Ruby、MATLAB

  • 4.理解
  • 看到了这里我们明白了,为啥c的运行效率,相对于很多其他语言要高。
  • 这里再来理解,为什么编译性语言的跨平台性 不如解释性语言。首先我们要理解一个概念:不是某个语言自身的问题,而是他们编写的程序的跨平台性怎样?
  • 编译性的语言的跨平台性需要依赖编译器。C和C++的源码是跨平台的,但是编译后的目标文件 .tar(linux)/ 可执行文件 .exe(windows),就不是跨平台的了。如linux上的 .tar 文件是不能在 windos 上直接运行的因为操作系统不一样。
  • 所以说编译性语言不是不可以跨平台,而是它的跨平台需要各个平台上的编译器支持啊。
  • 而向 java 这种,跨平台那就轻松了。自身内置的JVM虚拟机 + JDK 。不受到操作系统的限制。java 的跨平台考得就是虚拟机。
  • 它的运行过程简单写一下:我们先去编译写好的 java 源文件 .java 文件,然后生成中间文件 .class 也就是字节码文件。最后通过 JVM 虚拟机的转换。再将.class文件翻译成可以被各平台识别运行的文件。
  • 正是应为 java 自己的jvm虚拟机做了这件事情而没有依靠各平台的,我们才说它的跨平台型好。
  • 就像别人说的一样 c是一次编写(源码一次编写完成),到处编译。而 java 是一次编译,到处运行。jvm起到了一个桥梁的作用,它将java直接放置了在了一个自己制造的平台上了,jvm牛皮。

  • 5.知识补充

  • 上面我们通过解释为什么 C运行高效,进而对编译性语言和解释性语言进行了一个划分。

  • 有时候我们也用 其他的名词对这些计算机语言进行划分。 如 XX是脚本语言 是弱类型语言 是动态语言 等等。哈哈,我说的就是 js 和 php 这样的。
  • 5.1 高级语言和低级语言

  • 常见低级语言:机器语言、汇编语言

  • 常见高级语言:太多了…… C , C++, C#, go, Java, js ,ts, ruby,swift,python,perl
  • 机器语言就是 目前计算机唯一指定合作伙伴,可直接识别,无论你用的一言有多么牛逼反正都要转换成二进制
  • 汇编语言的话作为 二代目 用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址,在不同的设备中有着不同的指令集。代码量比全是机器语言的代码量可少多了。
  • 区别:高级语言不能直接和硬件打交道,这会让程序损失部分运行速度,但更贴近人性化,代码量少,可读性强,利于维护开发效率高。
  • 5.2 静态语言和动态语言 / 强类型语言和弱类型语言

  • 动态语言就是程序运行时才会最终给变量绑定数据类型,而静态语言就会要求我们再编写时就必须制定变量的数据类型。

  • 所以说 静态语言通常也可以强类型语言,动态语言也可以叫做弱类型语言。
  • 很明显静态语言设计的更为严谨,执行的效率会更好,但用起来不如动态语言来的方便来的爽。
  • 最常见的 静态原因 C, C++ ,Java 最常见的 动态语言/脚本 js php oython ruby

2.使用灵活

3.移植性较好