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