NULLのサイズ

ある若い方とリアルやfacebookなどでお話しした中で、NULL文字とかNULLの話で、「NULL文字」という言い方は個人的にしないとか、NULLの定義とかの話をした。

たしか、CでNULLは

#define NULL ((void*)0)

のはずなので、「voidポインタへキャストしたゼロ」とか言う話に。
オイラの記憶で、sizeof(NULL)は4だったか8だったか記憶があいまいだったので「4以上だはず」とにごしておいたw。

数日前に、Mac OS Xで、以下のソースを書いてたが、blogに晒すのを忘れていた。

#include <stdio.h>
#define X(A) printf("%s %lu\n",#A, sizeof(A))
int main() {
  X(NULL);
  X(long);
  X(long long);
  X(int);
  X(char);
  return 0;
}

実行結果は以下。

NULL 8
long 8
long long 8
int 4
char 1

ちなみに環境。

$ uname -a
Darwin **** 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun  7 16:33:36 PDT 2011; root:xnu-1504.15.3~1/RELEASE_I386 i386
$ gcc -v
Using built-in specs.
Target: i686-apple-darwin10
Configured with: /var/tmp/gcc/gcc-5666.3~123/src/configure --disable-checking --enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin10 --program-prefix=i686-apple-darwin10- --host=x86_64-apple-darwin10 --target=i686-apple-darwin10 --with-gxx-include-dir=/include/c++/4.2.1
Thread model: posix
gcc version 4.2.1 (Apple Inc. build 5666) (dot 3)