2016-08-12 51 views
0

本網站有幾個關於此問題的問題和意見。我試過給出的答案(包括頭文件),它們不能解決我的問題。NULL未聲明的標識符

我將我的項目從VS2013遷移到VS2015。編譯後,我收到錯誤:「C2065'空':未聲明的標識符」。這在VS2013中沒有發生。當我轉到我的代碼並將鼠標懸停在「NULL」上時,將顯示一個窗口「#define NULL 0」。我可以右鍵單擊NULL並打開「窺視定義」。 vcruntime.h文件打開並顯示NULL的定義。 (此文件被標記爲只讀。)

爲什麼我每次發生NULL(+200次)都會收到此錯誤?

編輯:

#ifndef NULL 
    #ifdef __cplusplus 
     #define NULL 0 
    #else 
     #define NULL ((void *)0) 
    #endif 
#endif 
+0

@Serhio它是完全有效的C.你從哪裏得到這個想法? – Lundin

+0

@Serhio IIRC'#define NULL 0'是C的標準。爲什麼它不是? – Magisch

+1

@Lundin [7.17](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf)「...它擴展爲一個實現定義的空指針常量... 「。這不意味着這樣的常量應該有類似'((void *)0)'的指針類型嗎? – Sergio

回答

1

也許你不包括.h文件,或者編譯器不求相應的文件夾。看看https://msdn.microsoft.com/en-us/library/d69tdh6e.aspx

+0

我包含的目錄(VC++目錄:.../Windows Kits \ 10 \ Include \ 10.0.10586.0 \ ucrt \)是MSDN文章中建議的頭文件之一:CRTDBG.H。在這個頭文件中有「#include 」。這個頭文件包含NULL的定義。問題是這個頭文件已經包含在我的項目中,我仍然得到錯誤...然而,這個定義是灰顯的(在ifndef NULL之後),這可能意味着它已經在其他地方定義了。 – pistach