[英]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 ++中內置類型的保留關鍵字。
我知道的唯一具有byte
和word
是Arduino。 它們分別是uint8_t
和unsigned int
typedef別名。 ( 來源 )
如果您已有使用byte
和word
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
的標准整數。 使用byte
和word
只會增加混亂,因為它是非標准的。 uint16_t
告訴您確切的含義,您會確切知道最大的可能值,以及是否已簽名。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.