Всем привет!
Совершенно обескуражен вот чем (g++ 4.1.2):void f(int& a)
{
a=10;
}....
int a=0;
f(a);
char buf[a];
int i=sizeof buf; // i будет равно 10
// и мало того, размерность указывает не const !!!!
// прежние версии gcc помоему вообще не скомпилили бы такую финтифлюшкуили еще:
void f(int a)
{
char buf[a];
int i=sizeof buf; //i будет равно a !!!!!
}Дизассембляция показывает
получается что sizeof перенесен со времени компиляции на время выполнения???
... или нас дурят....
>
>получается что sizeof перенесен со времени компиляции на время выполнения???http://gcc.gnu.org/onlinedocs/gcc-4.2.2/gcc/Variable-Length....
ISO C99, однако :)
>или еще:
>void f(int a)
>{
>char buf[a];
>int i=sizeof buf; //i будет равно a !!!!!А ты как хотел? Чтоб i = a * sizeof(char); ????
>>или еще:
>>void f(int a)
>>{
>>char buf[a];
>>int i=sizeof buf; //i будет равно a !!!!!
>
>А ты как хотел? Чтоб i = a * sizeof(char);
> ????Но если сделать так то
a=5;
int buf[a];for (i=0, i < a, i++)
{
buf[i]=0;
}i=sizeof(buf);
получиться 0; т.е. массив есть, размера нет. :)
Упс...buf[i]=0