为什么说C语言是直接对硬件操作的语言?

2024-11-20 14:23:55
推荐回答(5个)
回答(1):

  1. 首先,C语言不能够直接对硬件进行操作。从本质上来说,连汇编语言都不可以。只有机器语言能够直接操作硬件。

  2. 其次,C语言要操作硬件是必须经过一系列的编译转换。最终它会成为0101的机械码,这个时候它根本不是我们所能够理解的C语言了。

    以GCC编译器为例,这个可以分为四步。
    第一步是预处理,包括语法检查等工作。
    gcc -P abc.c
    第二步由源程序生产汇编语言代码。
    gcc -S abc.c
    会生成abc.s文件,这个文件里就是汇编代码。
    第三步编译器生成目标代码,一个源文件生成一个目标代码。
    gcc -c abc.c
    会生成abc.o
    第四步连接器从目标代码生成可执行文件。
    gcc abc.o

  3. 最后,相对来说,C语言在高级语言当中是最贴近物理层面的语言。它也被称作高级语言里面的低级语言。因为它很多方面都非常贴近硬件。典型的就是指针,这是一种通过物理地址直接操作内存的变量。

回答(2):

楼上的描述不准确,C语言直接对硬件操作的例子比如直接通过C语言写入芯片的控制寄存器,配置芯片的工作模式,达到用户希望的效果,如定时器。这一点类似于单片机。 对内存的操作事实上还是由更低级的存储器控制芯片完成的。

回答(3):

其它语言最终对硬件操作并不是这种语言完成的,而是由计算机操作系统(如windowsxp)来完成的。
如int a=5;并不是对地址在操作,而是由操作系统自动分配了个地址来存放a,你也不知道这个地址确切是多少

c语言接近硬件是指它可以直接用指针访问硬件地址。如:malloc,new函数
int *p; p = new int; //返回类型为int* 类型(整数型指针),分配大小为 sizeof(int);
int* p; p = (int *) malloc (sizeof(int));

然后就可以对这个指针指向的内存地址进行赋值等操作

回答(4):

VB不行
语言从低级到高级,语义功能越来越完善(意思是写出来的程序越来越接近人类语言),但是同时失去了对硬件的直接操纵能力,而且执行效率越来越低。
比如最低级的机器语言(全部是各种数字),没学过根本看不出是什么意思,但是对硬件操纵能力最强,想怎么让硬件做硬件就会怎么做。执行效率为百分之百。
其次是汇编语言,汇编语言稍微向英语迈进了一点,但是很有限,一般人也看不明白的,比如这句
mov a,b
谁知道什么意思!其操纵硬件能力也极强,随心所欲,执行效率基本也是百分之百。
而C语言介于高级和低级之间,代码容易理解,还可以用指针操纵硬件(不过还是很局限的,CPU就无法之间操纵了),执行效率为80%,对于一直语言来说很不错了。
Basic语言完全是高级语言,代码简单,但是不具备操纵硬件能力,也就是你想写个代码直接让内存怎么怎么样,内存不听你的,只听编译好的程序的。而且执行效率也很低了。

回答(5):

按你举的例子 写int a=5 都是分配一个空间
但是你有没有想过 到底是谁给我们分配的这个空间?计算机是怎么理解到的?
举一个不恰当的例子吧 : 一只小狗叫一声表示 你好 一个人用一门很复杂的语言 说了一句 你好 对于同样接收到这两个信息的对象而言那个更直白呢更容易理解呢?