奇怪的代码,分析一下为什么
时间:2010-04-26 来源:BIRDCHILD
奇怪的代码.
今天发现了一段奇怪的代码.这段代码竟然可以在GNU GCC/G++下编译通过,并且能够运行.但是运行结果却在想象之中意料之外.
#include <stdio.h>
#define NUM getnum()
int getnum(){
int x=0;
scanf("%d", &x);
printf("%d\n", x);
return x;
}
int main(int argc, char** argv){
int array[NUM];
printf("array size = %d\n", sizeof(array));
return 0;
}
在GCC/G++下可以编译通过,运行结果如下:
10
10
arraay size = 40
20
20
arraay size = 80
-1
-1
arraay size = -4
现在的问题是:
1.sizeof是在运行期计算的么?
2.array的空间到底是分配到哪儿了,heap or stack?