在讀k&r版的the c programming language一書時,我在[介紹,第3頁]看到這樣一條說明:
因為c語言提供的資料型別和控制結構可以直接被大部分計算機系統所支援,所以在實現自包含程式時所需要的執行庫檔案一般很小。這段黑體說明了什麼?能否找到乙個例子來說明c語言中的某種資料型別或控制結構不被某種計算機系統直接支援呢?
事實上,c語言中確實有不被直接支援的資料型別。
在許多嵌入式系統中,硬體上並沒有浮點運算單元。因此,如果你寫出下面的**:
floatx =
1.0f,y
=2.0f
;
returnx +
y;可能會被轉化成下面這種形式:
unsignedx =
0x3f800000,y
=0x40000000
;
return
_float_add(x
,y);
然後編譯器或標準庫必須提供'floatadd()'的具體實現,這會占用嵌入式系統的記憶體空間。依此去計算**在某個微型系統(譯者注:也就是指微型嵌入式系統)的實際位元組數,也會發現有所增加。
另乙個常見的例子是64位整型數(c語言標準中'long long'型別是2023年之後才出現的),這種型別在32位系統上也不能直接使用。古董級的sparc系統則不支援整型乘法,所以在執行時必須提供乘法的實現。當然,還有一些其它例子。
其它語言
相比起來,其它程式語言有更加複雜的基本型別。
比如,lisp中的symbol需要大量的執行時實現支援,就像lua中的table、python中的string、fortran中的array,等等。在c語言中等價的型別通常要麼不屬於標準庫(c語言沒有標準symbol或table),要麼更加簡單,而且並不需要那麼多的執行時支援(c語言中的array基本上就是指標,以null結尾的字串實現起來也很簡單)。
控制結構
異常處理是c語言中沒有的一種控制結構。非區域性的退出只有'setjmp()'和'longjmp()'兩種,只能提供儲存和恢復某些部分的處理器狀態。相比之下,c++執行時環境必須先遍歷函式呼叫棧,然後呼叫析構函式和異常處理函式。
複數型是c語言的資料型別嗎?
錯,複數型不是c語言的資料型別。在c語言中,資料型別可分為基本資料型別 構造資料型別 指標型別 空型別4大類。其中基本型別 字元型 整型 實型 單精度型和雙精度型 列舉型別 構造型別 陣列 結構體 公用體。相關推薦 c語言 教程 下列選項中不屬於c語言的資料型別是 a 複數型 b 邏輯型 c 雙精度...
C語言如何根據資料型別來處理不同的資料?
位指的是短小的二進位制數字,是乙個二進位制的賦值變數。乙個單一的位只能代表兩個值所以我們要把他們組織到一起才能表示更廣範圍的數字。位的最常組織方式是位元組,它是乙個八位的位組數列。將這些位組織到一起後,有一些方法可以用來對他們進行解釋。我們將每一種解釋方法稱為位模式。1.純數字位模式 最簡單的位模式...
乙個式子資料型別是C語言 c語言算術運算子
算術運算子 算術運算子非常地簡單,就是小學數學裡面的一些加減乘除操作。不過呢,還是有一些語法細節需要注意的。1.加法運算子 1 int a 10 3 int b a 5 在第3行利用加法運算子 進行了加法運算,再將和賦值給了變數b,最終變數b的值是15 2.減法運算子 或 負值運算子 1 int b...