Действительно ли C99 обратно совместим с C89?

Это могло бы работать:

^(\*|\d+(\.\d+){0,2}(\.\*)?)$

На верхнем уровне, "*" особый случай числа действительной версии. Иначе это запускается с числа. Тогда существует нуль, один, или две последовательности ".nn", сопровождаемые дополнительным ".*". Этот regex принял бы 1.2.3.* который может или не может быть разрешен в Вашем приложении.

код для получения подобранных последовательностей, особенно (\.\d+){0,2} часть, будет зависеть от Вашей конкретной regex библиотеки.

15
задан Ciro Santilli 新疆改造中心法轮功六四事件 23 May 2017 в 05:36
поделиться

6 ответов

Я считаю, что они совместимы в этом отношении. Это до тех пор, пока материал, против которого вы компилируете, не наступает на какие-либо новые преимущества. Например, если старый код содержит enum bool {false, true}; , значит, у вас проблемы. Как похожий динозавр, я медленно погружаюсь в чудесный новый мир C99. В конце концов, он скрывался всего около 10 лет;)

9
ответ дан 1 December 2019 в 02:46
поделиться

Тебе следует развиваться. Спасибо за внимание: -)

На самом деле, я расширю это.

Вы правы, что C99 существует уже довольно давно. Вы должны (на мой взгляд) использовать этот стандарт для чего-либо, кроме устаревшего кода (где вы просто исправляете ошибки, а не добавляете новые функции). Вероятно, это не стоит того для унаследованного кода, но вам следует (как и в случае со всеми бизнес-решениями) провести собственный анализ затрат и выгод.

Я уже удостоверяюсь, что мой новый код совместим с C1x - хотя я не использую ни один из новых функций пока нет, я стараюсь быть уверенным, что он не сломается.

Что касается кода, на который следует обратить внимание, авторы стандартов очень серьезно относятся к обратной совместимости . Их задача заключалась не в разработке нового языка, а в систематизации существующих практик.

Фаза, на которой они сейчас находятся, дает им больше свободы в обновлении языка, но они по-прежнему следуют клятве Гиппократа в отношении своих результатов: «прежде всего, не навреди».

В общем, если ваш код нарушен новым стандартом, компилятор вынужден вам сказать. Так что простая компиляция базы кода будет отличным началом. Однако, если вы прочитаете документ с обоснованием C99 , вы увидите, что появляется фраза «тихое изменение» - это то, чего вам нужно остерегаться.

Это поведенческие изменения в компиляторе, которые вы не нуждаются в сообщении и могут стать источником беспокойства и скрежета зубов, если ваше приложение начинает работать странно. Не беспокойтесь о битах "тихого изменения в c89" - если они были проблемой,

8
ответ дан 1 December 2019 в 02:46
поделиться

С уважением: Попробуйте и узнайте. :-)

Однако имейте в виду, что даже если вам нужно исправить несколько незначительных различий при компиляции, движение вверх, вероятно, того стоит.

2
ответ дан 1 December 2019 в 02:46
поделиться

Если вы не нарушаете явные функции C99, код c90 будет отлично работать с флагом c99 с другими предыдущими библиотеками c99.

Но в C89 есть некоторые библиотеки на основе dos, например ,, это определенно не сработает.

C99 очень гибок, поэтому не стесняйтесь мигрировать: -)

2
ответ дан 1 December 2019 в 02:46
поделиться

Соглашения о вызовах между библиотеками C давно не менялись, и я не уверен, что когда-либо менялось.

Операционные системы на данный момент в значительной степени полагаются на вызовы C. соглашений, поскольку API-интерфейсы C, как правило, являются связующим звеном между частями ОС.

Итак, в основном ответ таков: «Да, двоичные файлы будут обратно совместимы. Нет, естественно, код, использующий функции C99, не может быть позже скомпилирован. с компилятором, отличным от C99. "

2
ответ дан 1 December 2019 в 02:46
поделиться

Он предназначен для обратной совместимости. Он формализует расширения, которые уже реализованы многими поставщиками. Возможно, даже вероятно, что хорошо написанная программа не будет иметь проблем при компиляции с C99.

По моему опыту, перекомпиляция одних модулей, а не других для экономии времени ... тратит много времени.

1
ответ дан 1 December 2019 в 02:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: