什麼是C語言的可移植?

2021-09-24 16:27:40 字數 1202 閱讀 9316

什麼是可移植?

如何才能可移植?

c語言是如何做到可移植的?

對於初學者,可移植可能是乙個經常遇到卻很神秘的詞。今天,我想通過這篇文章來表達對於可移植性的一些想法。

下面我就來說說可移植,可移植顧名思義就是可以從乙個平台移植到另外乙個平台,但是大家一定要清楚,移植是基於作業系統的。但是這個時候,我們需要注意一點:基於各種作業系統平台不同,應用程式在二級制級別是不能直接移植的。我們只能在**層去思考可移植問題,在api層面上由於各個作業系統的命名規範、系統呼叫等自身原因,在api層面上實現可移植也是不大可能的。那怎麼才能實現可移植呢?

我們首先來看看現在主流的windows和linux平台下**可移植性。有什麼辦法解決這個問題呢?

答案是:在各個平台之間,基於大部分需求抽象出乙個中間層。在中間層中,中間層用了遮蔽底層細節,在我們程式設計師看來c言語庫就是這樣乙個中間層的作用。在各個平台下,我們預設c標準庫中的函式都是一樣的,這樣基本可以實現可移植。但是對於c庫本身而言,在各種作業系統平台下其內部實現是完全不同的,也就是說c庫封裝了作業系統api在其內部的實現細節。

因此,c語言提供了我們在**級的可移植性,即這種可移植是通過c語言這個中間層來完成的。

當然,大家都可以看出上面的可移植是有條件的,c語言本身不能實現完全的可移植,為什麼呢?因為,在我們程式中,我們經常會呼叫系統api,由於這些api在c語言中沒有對其封裝,所以我們只能用使用其原始的api,對於原始的api在各個作業系統中他們命名不同,就不能跨平台移植。所以,我們要寫出完完全全的跨平台的程式,還是需要其他的一些手段。例如在我們的**中下功夫。以下**可以幫助我們實現各平台之間的可移植:

#ifdef windows

createthread(); //windows下執行緒的建立

#else

pthread_create(); //linux下執行緒的建立

#endif

對於標頭檔案,也使用同樣的預編譯巨集來實現。如:

#ifndef windows

#include

#else

#include

#endif

這樣就可以實現**的可移植了。在編譯的時候只要通過#define就可以選擇在那個平台下完成程式的編譯。

綜上所述,我們都是將c,c++等各種語言當作中間層,以實現其一定程度上的可移植。如今,語言的跨平台的程式都是以這樣的方式實現的。但是在不同的平台下,仍需要重新編譯。更多交流可以薇我13260562029

C語言 char Bool和可移植int型別

非列印字元 有一些字元無法列印出來不如何表示有兩種方法表示,一是用ascll碼,二是用轉義字元 義字串行在下方 列印字元的int值 includeint main void 結果 bool也屬於int型別,因為c語言中用1代表true用0代表false 這兩個標頭檔案定義了精確寬度整數型別 例如in...

C語言概述 什麼是C語言?

一提到語言這個詞語,自然會想到的是像英語 漢語等這樣的自然語言,因為它是人和人交換資訊不可缺少的工具。而今天計算機遍布了我們生活的每乙個角落,除了人和人的相互交流之外,我們必須和計算機角落。用什麼的什麼樣的方式和計算機做最直接的交流呢?人們自然想到的是最古老也最方便的方式 語言,而c語言就是人和計算...

什麼是可靠 可擴充套件 可維護的系統?

一,可靠性的挑戰 1,人為故障是線上系統故障的首要原因,應該怎麼避免 1.1簡化設計,易於測試 1.2充分測試,覆蓋場景 1.3快速回滾,降低損失 1.4完善監控 1.5規範流程,這點最重要 2,軟體故障 2.1簡單架構,降低複雜度帶來的不可控 2.2選擇穩定的軟體,包括開源 2.3要有自動恢復機制...