【问题标题】:NULL undeclared identifierNULL 未声明的标识符
【发布时间】:2016-08-12 09:04:42
【问题描述】:

这个网站上有几个关于这个问题的问题和回答。我尝试了给出的答案(包括头文件),它们并没有解决我的问题。

我将我的项目从 VS2013 迁移到 VS2015。编译后出现错误:“C2065 'NULL': undeclared identifier”。这在 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

【问题讨论】:

  • @Serhio 这是完全有效的 C。你从哪里得到这个想法?
  • @Serhio IIRC #define NULL 0 是 C 的标准。为什么不呢?
  • @Lundin 7.17 "... 扩展为实现定义的空指针常量..." 。不是说这样的常量应该有((void *)0)这样的指针类型吗?
  • @Serhio 6.3.2.3/3:“一个值为 0 的整数常量表达式,或这种类型转换为 void * 的表达式,称为 空指针常量 。”
  • @melpomene 是的,我的错。

标签: c visual-studio-2015


【解决方案1】:

可能您没有包含.h 文件,或者编译器没有寻找合适的文件夹。看看这个Microsoft docs article

【讨论】:

  • 在我包含的 de 目录中(VC++ 目录:.../Windows Kits\10\Include\10.0.10586.0\ucrt)是 MSDN 文章中建议的头文件之一:CRTDBG.H .在这个头文件中有 "#include " 。此头文件包含 NULL 的定义。问题是这个头文件已经包含在我的项目中,我仍然得到错误......但是这个定义是灰色的(在 ifndef NULL 之后),这可能意味着它已经在其他地方定义了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-30
  • 1970-01-01
  • 2021-06-07
  • 2016-04-09
相关资源
最近更新 更多