LINUX.ORG.RU

Знатокам стандарта Си

 


1

3

Есть ли undefined behavior в нижеприведённом коде (C99)?

#include <string.h>
#include <stdio.h>

char *
foo(char *s)
{
    strcpy(s, "hello");
    return s;
}

int
main()
{
    puts(foo((char [64]) {'\0'})); // будет ли этот char[64] жив после возврата foo?
}

будет ли этот char[64] жив после возврата foo?

Почему бы и нет? Будет жив до следующей }.

anonymous
()

Да, будет жив, т.к. стандарт устанавливает для compound literals такое же время жизни, как для локальных переменных, т.е. до конца блока.

Sorcerer
()

До конца блока доживёт.

будет ли этот char[64] жив после возврата foo?

А блок ограничен «}». Сами по себе compound literals введены в С99 (6.5.2.5 Compound literals (стр. 75-77).

Цитата оттуда:

The value of the compound literal is that of an unnamed object initialized by the initializer list. If the compound literal occurs outside the body of a function, the object has static storage duration; otherwise, it has automatic storage duration associated with the enclosing block.

Moisha_Liberman
()

Кстати, а как автор будет рисовать классы, их иерархии ?! Ладно, простую функцию с аргументами нарисовать можно. Но вот что то сложное уже заебешься рисовать. Недаром человечество в своё время отошло от рисование рисунков, пиктограмм и перешло к алфавитной записи.

anonymous
()
Ответ на: комментарий от anonymous

Пардон, снесите, не туда запостил

anonymous
()
Ответ на: комментарий от anonymous

а как автор будет рисовать классы, их иерархии ?!

как в риновском Grasshopper.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.