2010-07-26 70 views
0

我想在SunOS上編譯時取消定義變量。因此,我試圖把ifdef&solaris

#ifdef SunOS 
#undef FOO 
#endif 

但它不起作用。問題出在#ifdef sunos上?我應該宣佈它,還是編譯器自己做?

問候 S.

回答

3

你的編譯器將包括一些預定義變量。查看你的編譯器文檔來找出那個列表是什麼。

如果您試圖製作一個可在多個(unixlike)平臺上構建的軟件,請查看autoconf。它有一點學習曲線,但從長遠來看,它會帶來非常大的收益。

此外: 此外,您的編譯器可能有一種列出預定義的宏的方法。例如,使用gcc,touch foo.h; cpp -dM foo.h產生了一個所有的列表,其中包括119個在OS X上使用gcc。但是文檔可能會給出該編譯器的推薦的宏的一些指示(但autoconf仍然是一種更好的技術這一般)。

+0

C/C++缺少一個指令:#ifndef(:: int sum(vector )),或其他。結果,數百萬開發者不得不維護數百萬行hacky autoconf垃圾。解決這個問題將導致全球和平。 – 2015-02-02 14:56:37

-1

沒有什麼不對,cpp接受這個片段就好了。你看到什麼問題?

6

我不知道Solaris的任何編譯器爲您預先定義SunOS

Sun編譯器列出他們在「抄送」手冊頁預定義下的-D選項說明宏,包括__sun__SunOS_5_10(爲「5.10」使用uname -r),但不只是普通SunOS