簡體   English   中英

我可以稍后將我的 Visual C++ win32 項目轉換為跨平台項目嗎?

[英]Can I convert my Visual C++ win32 project into a crossplatform later?

有誰知道是否可以在跨平台中使用來自 win32 靜態庫的代碼? 我知道我必須對代碼進行一些更改,但我認為 C++ 代碼在所有平台上都是相同的,除了類。 對於簡單類型,有人告訴我使用 int16_t 或 int16_fast_t 代替或例如短。 我可以從visual studio復制頭文件和文件,並使用例如code lite為mac編譯它們是否正確 - 如果代碼本身是跨平台的?

此致,

這取決於該庫中的內容。 它是一個 Visual C++ Win32 靜態庫項目這一事實告訴我們您的庫是如何編譯的。 它沒有告訴我們什么代碼進入了那個庫。 它可能都是完全可移植的標准 C++ 代碼。 它也可能是每兩行都是一個顯然不可移植的 Windows API 函數調用的代碼。

庫的代碼是否可移植完全取決於代碼。 int16_tint_fast16_t替換short不會增加代碼的可移植性(除非short的原始使用假定了一些實現定義的屬性)。 所以我不確定用int16_t一攬子替換short應該實現什么。 short是語言中內置的基本類型。 int16_t是標准庫定義的類型,如果目標平台支持它。 因此,在某種程度上, int16_t實際上不如short便攜。 雖然int_fast16_t總是被定義,但也是short 如果您需要它們提供的語義,請使用標准庫的固定寬度整數類型。 如果您不這樣做,則沒有理由使用它們。 請注意,要在 C++ 中使用固定寬度的整數類型,請包含 C++ 頭文件<cstdint>而不是<stdint.h> ,后者不能保證出現在 C++ 中。 另請注意, <cstdint>只能保證在命名空間std放置聲明。 因此,為了獲得最大的可移植性,請使用std::int16_t因為不能保證::int16_t可用。

如果庫的代碼是可移植的,那么在另一個平台上構建該庫所需的只是該平台的構建系統。 所以是的,如果代碼是可移植的,那么您需要做的就是使用您在另一個平台上使用的任何工具在另一個平台上編譯該代碼是正確的......這就是代碼含義的定義便攜的… ;-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM