2017-01-01 179 views
2

刪除命令我上定義一個函數時,有時會使用尋找預處理命令代碼

static inline void myfunc(...) 

一個C庫工作。

現在我嘗試將此端口移植到不支持「靜態內聯」的舊C編譯器。這是密件抄送 - 布魯斯的C編譯器。

我可以在替代

static inline void 

void 
在包括這個頭文件的所有程序

頭文件使用一個命令?

+3

我想你可以添加一個void的空定義:#define void。 –

+0

您確定要重新定義'void'關鍵字而不是'inline'關鍵字嗎?另外請查找並閱讀*條件編譯*。 –

+0

對不起,這是一個錯字 - 我想用「void」替換「static inline void」 – Georg

回答

5

當您必須針對不支持某些功能的編譯器時,通常在您的代碼中使用宏而不是試圖用宏修改您的代碼。

在這種情況下,你可以在編譯器相關的方式定義STATIC_INLINE宏,並使用它像這樣:

#ifdef BCC_COMPILER 
#define STATIC_INLINE 
#else 
#define STATIC_INLINE static inline 
#endif 
... 
STATIC_INLINE void myfunc(...) 
+0

這會起作用,但我已經在代碼中有很多ifdef了。我希望用一個#define命令或類似的命令在一個地方定義它會更短。 – Georg

+0

我現在明白了,是的,你可以把這段代碼放到頭文件中。是否有可能讓預處理器用空字符串替換「靜態內聯」?然後我不必更改每個程序代碼。 – Georg

+1

@Georg不幸的是,預處理器可以替代一個令牌,而不是一對彼此相鄰的令牌。這就是爲什麼我見過的許多庫使用這個技巧,儘管它使得其餘的代碼不易讀。 – dasblinkenlight

1

非常感謝所有的幫助。我必須向大家報告,BLUEPIXY了,在他comment工作對我的回答:

#define inline 

顯然BCC不接受static void但不static inline void

+1

更簡單表達方式是'Bcc不支持'內嵌'功能'。即使在C90編譯器中也需要支持'static'和'void'; 'inline'被添加到C99。 –