Отказ от ответственности: Этот вопрос носит чисто академический характер. Пример, который я собираюсь привести, вероятно, плохой стиль.
Предположим, что в C я пишу подпрограмму этого вида:
char *foo(int x)
{
static char bar[9];
if(x == 0)
strcpy(bar, "zero");
else
strcpy(bar, "not zero"),
return bar;
}
Затем в другом месте я использую foo
следующим образом:
printf("%i is %s\n", 5, foo(5));
Моя ментальная модель указателей и статических переменных предсказывает, что на практике вывод этого printf будет
5 не ноль
... но действительно ли это требуется стандартом C, или я нахожусь на территории носовых демонов?
Что еще хуже, что-то вроде
strcpy(foo(5), "five");
Моя ментальная модель говорит, что это должно "работать", если это явно не незаконно, хотя это несколько бессмысленно, поскольку это не влияет на вывод foo
. Но опять же, это на самом деле определяется стандартом?