2016-01-22 65 views
0

我將AIX代碼移植到Linux。我遇到了一些將AIX xlc編譯器中的char與NULL進行比較的代碼。相同的代碼給Linux編譯錯誤。在AIX(xlc)上比較char和NULL的含義是什麼?

有代碼將NULL與NULL進行比較(d!= NULL)。

有人可以解釋在AIX(xlc)上比較char或double與NULL的語義。

+1

「char」是指變量聲明爲char而不是像char *一樣的指針嗎?你會得到什麼錯誤?編譯器告訴你什麼信息說明? XLC編譯器只編譯C代碼,還是C++代碼? –

+0

AIX/xlC上的NULL沒有什麼特別之處。只是糟糕的代碼。 –

+0

Lorinczy的含義是什麼covener的答案 - NULL是鬆散的而不是嚴格定義的。所以你和char的比較只是檢查'd!='\ 0''的等價物,這就是你應該改變你的代碼來使用。 –

回答

3

使用AIX上的xlc,「NULL」是「0」而不是「(void *)0」的宏,所以預處理器運行後的比較對於char/int/double是有效的。

您可以在代碼中使用xlc -E或gcc -E來查看。

千萬不要使用它 - 這只是瑣事。修正你的代碼在非指針上下文中不使用NULL。