我想在SunOS上編譯時取消定義變量。因此,我試圖把ifdef&solaris
#ifdef SunOS
#undef FOO
#endif
但它不起作用。問題出在#ifdef sunos上?我應該宣佈它,還是編譯器自己做?
問候 S.
我想在SunOS上編譯時取消定義變量。因此,我試圖把ifdef&solaris
#ifdef SunOS
#undef FOO
#endif
但它不起作用。問題出在#ifdef sunos上?我應該宣佈它,還是編譯器自己做?
問候 S.
你的編譯器將包括一些預定義變量。查看你的編譯器文檔來找出那個列表是什麼。
如果您試圖製作一個可在多個(unixlike)平臺上構建的軟件,請查看autoconf。它有一點學習曲線,但從長遠來看,它會帶來非常大的收益。
此外: 此外,您的編譯器可能有一種列出預定義的宏的方法。例如,使用gcc,touch foo.h; cpp -dM foo.h
產生了一個所有的列表,其中包括119個在OS X上使用gcc。但是文檔可能會給出該編譯器的推薦的宏的一些指示(但autoconf仍然是一種更好的技術這一般)。
沒有什麼不對,cpp
接受這個片段就好了。你看到什麼問題?
我不知道Solaris的任何編譯器爲您預先定義SunOS
。
Sun編譯器列出他們在「抄送」手冊頁預定義下的-D
選項說明宏,包括__sun
和__SunOS_5_10
(爲「5.10」使用uname -r),但不只是普通SunOS
。
C/C++缺少一個指令:#ifndef(:: int sum(vector)),或其他。結果,數百萬開發者不得不維護數百萬行hacky autoconf垃圾。解決這個問題將導致全球和平。 –
2015-02-02 14:56:37