为什么nullptr在C中未声明?

时间:2017-07-27 11:06:28

标签: c pointers gcc

我正在使用nullptr,因为它很方便,使我的代码更具可读性。但是编译器在下面给出了错误。

我的问题是必须包含头文件才能解决问题。

这是一段代码:

FILE *fptr;
fptr=fopen("E:\\text.txt","w");
if(fptr==nullptr)
{
   perror("open()");
   return  EXIT_FAILURE;
}

错误

 ||=== Build: Debug in 1 (compiler: GNU GCC Compiler) ===|
 E:\COOP\1\main.c||In function 'main':|
 E:\COOP\1\main.c|12|error: 'nullptr' undeclared (first use in this function)|
E:\COOP\1\main.c|12|note: each undeclared identifier is reported only once for each function it appears in|
 E:\COOP\1\main.c|27|error: expected declaration specifiers or '...' before

1 个答案:

答案 0 :(得分:2)

nullptr is C++ only;在C中不需要它,因为在C ((void*)0)中可以转换为任何其他没有强制转换的指针类型。

如果您真的非常想在C中键入nullptr,可以使用

#define nullptr ((void*)0)

然后它的工作方式基本相同。

请注意,C具有来自<stddef.h>的{​​{3}}宏;它也是可读的,但它的扩展是实现定义的,所以它可能是((void*)0)0(或者非常奇怪的东西);如果它扩展到0,您将无法从

获得任何诊断
int a = NULL;