URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7069
[ Назад ]

Исходное сообщение
"Нас дурят!!??"

Отправлено dimonna , 25-Дек-07 22:14 
Всем привет!
Совершенно обескуражен вот чем (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 перенесен со времени компиляции на время выполнения???
... или нас дурят....


Содержание

Сообщения в этом обсуждении
"Нас дурят!!??"
Отправлено Michelnok , 25-Дек-07 22:49 
>
>получается что sizeof перенесен со времени компиляции на время выполнения???

http://gcc.gnu.org/onlinedocs/gcc-4.2.2/gcc/Variable-Length....

ISO C99, однако :)



"Нас дурят!!??"
Отправлено pavlinux , 02-Янв-08 17:00 
>или еще:
>void f(int a)
>{
>char buf[a];
>int i=sizeof buf; //i будет равно a !!!!!

А ты как хотел? Чтоб  i = a * sizeof(char);      ????




"Нас дурят!!??"
Отправлено XKAV , 02-Янв-08 22:55 
>>или еще:
>>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; т.е. массив есть, размера нет. :)



"Нас дурят!!??"
Отправлено XKAV , 02-Янв-08 22:57 
Упс...

buf[i]=0