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)