下面的C++代碼能編譯么?

字號:

#include
    #define NUM getnum()
    int getnum()
    {
    int x = 0;
    scanf("%d", &x);
    printf("%d\n", x);
    return x;
    }
    int main(char** argc, int argv)
    {
    int array[NUM];
    printf("array size =%d\n",sizeof(array));
    return 0;
    }
    在g++中居然可以編譯。
    輸入10,返回array size=40
    輸入20,返回array size=80
    輸入-1,返回array size =-4!!
    問題:
    1.Examda提示: 這樣的做法符合C++標準么?連sizeof成了運行期計算
    2.這個array的空間應(yīng)該分配在heap上,而不是stack上。g++做了什么手腳?