Есть ли функции/семантика, введенные или удаленные в C99, которые сделали бы хорошо определенную программу, написанную на C89, либо
- недействителен (т.е. не компилируется больше, в соответствии со стандартом C99)
- компиляция, но имеющая разную семантику.
Мои выводы до сих пор касались явно недействительных программ:
- неявный int (C89 §3.5.2)
- Объявление неявной функции (C89 §3.3.2.2)
- не возвращается из функции, ожидающей возвращаемого значения (C89 §3.6.6.4)
- с использованием новых ключевых слов в качестве идентификатора (например,
restrict
,inline
и т.д.) - hacks с участием
//
, которые теперь рассматриваются как комментарии. Однако почти никогда не встречался в производственном коде.
Тонкие изменения, что делает тот же код с другой семантикой:
- Целочисленное деление было четко определено, например, 3/2 теперь должно усекать в направлении нуля (C99 §6.5.5/6) вместо определения реализации (C89 §3.3.5/6)
-
strtod
получила возможность анализировать шестнадцатеричные числа в C99, анализируя0x
или0x
Что я пропустил?