Отказ от ответственности: этот вопрос строго академичен. Пример, который я собираюсь дать, - это, вероятно, плохой стиль.
Предположим, что в 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. Но опять же, действительно ли это определено стандартом?