$ gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.6/lto-wrapper Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu Thread model: posix gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) |
$ vi void.c #include <stdio.h> void main() { void *fp; int a = 0; fp = &a; printf("sizeof(void) %d\n",sizeof(void)); printf("fp %8X\n",fp); fp++; printf("fp %8X\n",fp); } |
(남자니까) 경고따윈 무시한다!
$ gcc void.c void.c: In function ‘main’: void.c:9:2: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long unsigned int’ [-Wformat] void.c:10:2: warning: format ‘%X’ expects argument of type ‘unsigned int’, but argument 2 has type ‘void *’ [-Wformat] void.c:12:2: warning: format ‘%X’ expects argument of type ‘unsigned int’, but argument 2 has type ‘void *’ [-Wformat] |
어? 연산이 되네? ㄷㄷㄷ 일단은 byte로 간주..
어? 게다가.. 왜 void의 sizeof가 1?
$ ./a.out sizeof(void) 1 fp E9F5689C fp E9F5689D |
+
6.23 Arithmetic on void- and Function-Pointers In GNU C, addition and subtraction operations are supported on pointers to void and on pointers to functions. This is done by treating the size of a void or of a function as 1. A consequence of this is that sizeof is also allowed on void and on function types, and returns 1. The option -Wpointer-arith requests a warning if these extensions are used. [링크 : https://gcc.gnu.org/onlinedocs/gcc/Pointer-Arith.html] |
+
Compiler Error CS0242 The operation in question is undefined on void pointers Incrementing a void pointer is not allowed. For more information, see Unsafe Code and Pointers (C# Programming Guide). [링크 : https://msdn.microsoft.com/en-us/library/dhyat531(v=vs.90).aspx] |
'Programming > C Win32 MFC' 카테고리의 다른 글
rand()와 RAND_MAX (0) | 2015.10.05 |
---|---|
Cppcheck (0) | 2015.09.30 |
가변인자를 다시 넘겨주기 (2) | 2015.07.07 |
printf 가변인자의 비밀? (0) | 2015.06.18 |
gcc 컴파일러 -D 옵션 (0) | 2015.05.19 |