2017-02-04 66 views
0

我目前使用ARM GCC編譯器編譯我的代碼。我的代碼有一個RTOS,它有一個types.h文件,它將clock_t定義爲unsigned long。由於ARM GCC編譯器也有clock_t的typedef,所以我得到了相同的衝突類型問題。typedef的衝突類型錯誤(timer_t)

我已經嘗試過,包括GCC的.h文件,並且在某些論壇中提出了相同的定義,但它也不起作用。我沒有看到GCC的time.h文件也包含在我的任何項目源文件中。

+0

您不能取消定義類型,只有宏。 – Barmar

+0

如果你(ab)在包含'types.h'之前用'#define'預處理器怎麼辦? – 3442

回答

2

一個簡單的解決方法是

typedef unsigned long int custom_clock_t; 
#define clock_t custom_clock_t 

這樣編譯器將取代clock_t每次發生編譯文件,custom_clock_t之前和同時保持熟悉的clock_t語法完好的矛盾就會消失。

0

你可以嘗試做一些預處理魔術要解決它:

#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或類似的東西。