簡體   English   中英

如何編寫與編譯器無關的通用代碼?

[英]How to write generic compiler-independent code?

在我的工作中,我使用用於許多平台(Windows,嵌入式微控制器,Arduino等)的許多不同的編譯器。 現在,我想編寫一個通用例程,該例程應適用於所有這些例程,但是我與數據類型發生沖突。 它主要是低級的東西,所以我想使用'byte','word','bool'等類型。

對於某些編譯器,尚未定義這些類型,但對於某些編譯器,則已定義它們,在這種情況下,這將導致類型沖突的錯誤。

我了解到typedef比#define更受青睞。 這個問題中 ,很明顯沒有辦法進行條件typedef。

我已經考慮過使用唯一類型,例如:

typedef unsigned char mybyte
typedef unsigned short int myword
etc...

但這會使我的源代碼看起來非常丑陋,恕我直言。

所有平台均應支持bool因為它是C ++中內置類型的保留關鍵字。

我知道的唯一具有byteword是Arduino。 它們分別是uint8_tunsigned int typedef別名。 來源

如果您已有使用byteword Arduino代碼,最簡單的解決方案是檢查您的代碼是否在Arduino環境中運行,如果不是,請自行定義Arduino類型:

#ifdef ARDUINO
#include <Arduino.h>
#else
#include <cstdint>
typedef uint16_t word; // or unsigned int, depending on your needs
typedef uint8_t byte;
#endif

但是,我的首選解決方案是在需要特定位數時直接使用stdint.h的標准整數。 使用byteword只會增加混亂,因為它是非標准的。 uint16_t告訴您確切的含義,您會確切知道最大的可能值,以及是否已簽名。

暫無
暫無

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

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