很抱歉的壞稱號之間的戰鬥,我會盡力來形容我的問題好一點..包括數據類型
我一個實時操作系統的工作。由於我有測試新功能的任務,而我們的主RTOS現在還不支持它,所以我將基於另一個(至今未使用的)RTOS製作原型。 這個新的實時操作系統帶來了自己的頭文件,其中包含許多類型定義以生成像ULONG,BOOL,INT等縮寫...
在我們的代碼庫中有typedefs,例如,可以保證unsigned long正好是4字節。根據我們的styleguide,這些新類型將用於我們生產的任何界面。
不幸的是,這些typedef的命名方式與新RTOS(ULONG,INT,BOOL,...)的命名方式相同。
構建破壞的事情是,BOOL例如曾經被聲明爲unsigned char並且一次被聲明爲int。
這會導致使用BOOL和其他不同類型的某些函數頭的損壞。
我的問題是,我怎樣才能使這兩個「主」頭之一,因此更喜歡它的typedefs其他頭文件?
還有什麼其他方式可以將這兩個標題分開?
因爲我只在新的RTOS上實現了一個原型,所以改變我們的基類型被認爲是一個不太受歡迎的解決方案。 任何幫助表示讚賞,如果您需要進一步澄清,只是讓知道!
編輯:
好吧,這裏作進一步澄清一些代碼:
RTOS_typedefs.h現在
...
typedef void VOID;
typedef unsigned char BOOL;
typedef int INT;
...
ownCodeBase_typedefs.h
...
#define void VOID
typedef int BOOL;
typedef int INT;
,你可以看到, INT typedef是相同的,不會造成麻煩。
該空隙限定碰撞在一些文件中的空隙的typedef和預處理器產生以下:
typedef void void;
...產生一個編譯錯誤。
Bool typedef破壞了我的函數頭,因爲在一個文件中使用了RTOS版本,而在另一個文件中使用了我們代碼庫中的typedef。編譯器生成兩個不同的簽名,並且鏈接器無法找到其中一個的定義。 - >其他錯誤被拋出
與其試圖用文字牆來描述您的代碼,向我們展示說明您的問題的代碼片段要容易得多。 – CoryKramer
typedefs應該存在於單獨的命名空間內,如果這樣的話你不會遇到問題 – user463035818
將你的基於代碼的typedef放到你的命名空間中。 –