2014-03-02 6 views
-1

我测试地看到,NULL常量确实占据了指针的大小尺寸比较:NULL宏的大小与炭

ASSERT(sizeof NULL == sizeof(char*)); 

不过,我不小心写的,而不是执行以下操作:

ASSERT(sizeof NULL == sizeof char); 

这应该编译,而是它给了我下面的错误:

error: expected expression before ‘char’ 

同样happene d我括在括号NULL

ASSERT(sizeof(NULL) == sizeof char); 

不是空常数通常假设由其所关联到一个指针,它是等于0的宏被定义?声明显然是错误的,但据我所知,没有语法错误。 如果这是真的,为什么我收到编译错误?

+0

NULL是0,所以其为int大小。 –

+1

类型名称必须用“sizeof”的操作数括在括号中。 –

+0

在C中NULL通常是(void *)0。 –

回答

1

“当操作数是一个类型的名字,它必须括在括号”:C sizeof operator

在C中,NULL通常被定义为

#define NULL ((void*)0) 
+0

我想你的意思是'#define NULL((void *) 0)' –

+0

@FilipeGonçalves - 是的,当然。 –