Linux中國

C語言數據類型是如何被大多數計算機系統所支持?

回答:

事實上,C語言中確實有不被直接支持的數據類型

在許多嵌入式系統中,硬體上並沒有浮點運算單元。因此,如果你寫出下面的代碼:

float x = 1.0f, y = 2.0f;
return x + y;

可能會被轉化成下面這種形式:

unsigned x = 0x3f800000, y = 0x40000000;
return _float_add(x, y);

然後編譯器或標準庫必須提供'floatadd()'的具體實現,這會佔用嵌入式系統的內存空間。依此去計算代碼在某個微型系統(譯者註:也就是指微型嵌入式系統)的實際位元組數,也會發現有所增加。

另一個常見的例子是64位整型數(C語言標準中'long long'類型是1999年之後才出現的),這種類型在32位系統上也不能直接使用。古董級的SPARC系統則不支持整型乘法,所以在運行時必須提供乘法的實現。當然,還有一些其它例子。

其它語言

相比起來,其它編程語言有更加複雜的基本類型。

比如,Lisp中的symbol需要大量的運行時實現支持,就像Lua中的table、Python中的string、Fortran中的array,等等。在C語言中等價的類型通常要麼不屬於標準庫(C語言沒有標準symbol或table),要麼更加簡單,而且並不需要那麼多的運行時支持(C語言中的array基本上就是指針,以NULL結尾的字元串實現起來也很簡單)。

控制結構

異常處理是C語言中沒有的一種控制結構。非局部的退出只有'setjmp()'和'longjmp()'兩種,只能提供保存和恢復某些部分的處理器狀態。相比之下,C++運行時環境必須先遍歷函數調用棧,然後調用析構函數和異常處理函數。

via:stackoverflow

作者:Dietrich Epp 譯者:KayGuoWhu 校對:wxy

本文由 LCTT 原創翻譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國