[[ Tested on GCC 4.x ]]
static void
test01_00(char buf[TEST01_SZ]) {
printf("In func: %lu\n", sizeof(buf));
}
static void
test01(void) {
char buf[TEST01_SZ];
printf("In local: %lu\n", sizeof(buf));
test01_00(buf);
}
int
main(int argc, const char *argv[]) {
test01();
return 0;
}
<< Run on 64bit linux >>
$ ./a.out
In local: 16 <== array size
In func: 8 <== pointer size
'sizeof(<array>)' works as expected in the scope where it is declared. But, array that is declared as parameter, is regarded same as 'pointer' (as you can see above).
I don't think this is defined in C specification.
So, I think it is just one of special characteristics of GCC.
Is it interesting,isn't it?
즉 array를 선언한 곳에서 sizeof(<array>)는 기대한 대로 동작하는데, argument로 넘긴 array의 경우, pointer와 동일하게 취급하는 것을 알 수 있다.
개인적인 생각으로, 이것이, C spec 사항일 것 같지는 않다.
그러니, 그냥 GCC 특성 중 하나라고 생각한다....
꽤나 재미있는 내용이라, 일단 적어 둔다. ^_^
'Language > C&C++' 카테고리의 다른 글
[C/C++] Small tip - Argument passed to main() function. (0) | 2015.10.19 |
---|---|
[C/C++] Template with value (0) | 2015.04.28 |
[Macro] '##' macro operator (0) | 2015.02.11 |
'malloc' and 'Segmentation fault' (0) | 2014.07.25 |
[GCC] Initialize array... (0) | 2014.07.25 |