2011-11-17 55 views
13

舊C編譯器扼流器我試圖將一些相對較新的C代碼移植到較舊的編譯器。#ifndef #define

此編譯器(DICE)來看,扼流圈在第一頭文件和這個成語的第一次出現:

#ifndef SOMETHING 
#define SOMETHING 

... 

#endif /* SOMETHING */ 

它死在第二行中的標頭: DCPP: "../../code/someheader.h" L:2 C:0 Error:39 Syntax Error

更改爲#define SOMETHING 1沒有區別。

所以我真的有兩個問題,我是否在使用DICE時選擇了錯誤的選項或者什麼東西,或者那麼C程序員是否在過去使用了一些與ifndef-define相同的成語?

參考文獻:

+2

如果是[這個DICE編譯器](http://www.obviously.com/amiga/),那麼肯定會用於典型的包括守衛。 – tinman

+1

我的第一版(第21版)K&R在第208頁介紹了#ifndef,所以它已經存在了一段時間。 –

+2

哦,這個問題帶回了記憶!我甚至爲共享軟件版本付費。 :)除此之外,它應該工作,否則所有系統標題也會失敗。 –

回答

16

如果是this C compiler然後通過查看sources(SRC \ DCPP \ cpp.c),你可以看到,新行僅包含回車符,而不是換行字符。

如果你有一行以CRLF結尾的行,那麼當編譯器在行的起始處剝去空白時,它不會在#之前剝離換行符,這是一個語法錯誤,因爲以#開頭的預處理器指令必須是該行中的第一個非空白字符。

+3

嘿,你打我一秒:)我會刪除我的答案,享受代表。 – interjay

+0

@interjay:謝謝你,很體育:) – tinman

+0

謝謝大家,很高興看到這麼多的C精明和Amiga受污染的人。:-) –

3
#if SOMETHING 
#else 




#endif 

可能只是工作處處

+0

aha!將嘗試 –

+0

謝謝!這不是它,但可能有助於另一個編譯器。 –