我目前使用ARM GCC編譯器編譯我的代碼。我的代碼有一個RTOS,它有一個types.h文件,它將clock_t定義爲unsigned long。由於ARM GCC編譯器也有clock_t
的typedef,所以我得到了相同的衝突類型問題。typedef的衝突類型錯誤(timer_t)
我已經嘗試過,包括GCC的.h文件,並且在某些論壇中提出了相同的定義,但它也不起作用。我沒有看到GCC的time.h文件也包含在我的任何項目源文件中。
我目前使用ARM GCC編譯器編譯我的代碼。我的代碼有一個RTOS,它有一個types.h文件,它將clock_t定義爲unsigned long。由於ARM GCC編譯器也有clock_t
的typedef,所以我得到了相同的衝突類型問題。typedef的衝突類型錯誤(timer_t)
我已經嘗試過,包括GCC的.h文件,並且在某些論壇中提出了相同的定義,但它也不起作用。我沒有看到GCC的time.h文件也包含在我的任何項目源文件中。
一個簡單的解決方法是
typedef unsigned long int custom_clock_t;
#define clock_t custom_clock_t
這樣編譯器將取代clock_t
每次發生編譯文件,custom_clock_t
之前和同時保持熟悉的clock_t
語法完好的矛盾就會消失。
你可以嘗試做一些預處理魔術要解決它:
#include <sys/types.h> // Or whatever is the other header that defines clock_t
#define clock_t types_clock_t
#include <types.h>
#undef clock_t
clock_t my_variable;
types_clock_t my_other_variable;
考慮到這個解決方案是微妙的,並且將導致某些情況下進一步的問題,比如你沒有一些其他的代碼可以控制使用<types.h>
的clock_t
或類似的東西。
您不能取消定義類型,只有宏。 – Barmar
如果你(ab)在包含'types.h'之前用'#define'預處理器怎麼辦? – 3442