Это могло бы работать:
^(\*|\d+(\.\d+){0,2}(\.\*)?)$
На верхнем уровне, "*" особый случай числа действительной версии. Иначе это запускается с числа. Тогда существует нуль, один, или две последовательности ".nn", сопровождаемые дополнительным ".*". Этот regex принял бы 1.2.3.* который может или не может быть разрешен в Вашем приложении.
код для получения подобранных последовательностей, особенно (\.\d+){0,2}
часть, будет зависеть от Вашей конкретной regex библиотеки.
Я считаю, что они совместимы в этом отношении. Это до тех пор, пока материал, против которого вы компилируете, не наступает на какие-либо новые преимущества. Например, если старый код содержит enum bool {false, true};
, значит, у вас проблемы. Как похожий динозавр, я медленно погружаюсь в чудесный новый мир C99. В конце концов, он скрывался всего около 10 лет;)
Тебе следует развиваться. Спасибо за внимание: -)
На самом деле, я расширю это.
Вы правы, что C99 существует уже довольно давно. Вы должны (на мой взгляд) использовать этот стандарт для чего-либо, кроме устаревшего кода (где вы просто исправляете ошибки, а не добавляете новые функции). Вероятно, это не стоит того для унаследованного кода, но вам следует (как и в случае со всеми бизнес-решениями) провести собственный анализ затрат и выгод.
Я уже удостоверяюсь, что мой новый код совместим с C1x - хотя я не использую ни один из новых функций пока нет, я стараюсь быть уверенным, что он не сломается.
Что касается кода, на который следует обратить внимание, авторы стандартов очень серьезно относятся к обратной совместимости . Их задача заключалась не в разработке нового языка, а в систематизации существующих практик.
Фаза, на которой они сейчас находятся, дает им больше свободы в обновлении языка, но они по-прежнему следуют клятве Гиппократа в отношении своих результатов: «прежде всего, не навреди».
В общем, если ваш код нарушен новым стандартом, компилятор вынужден вам сказать. Так что простая компиляция базы кода будет отличным началом. Однако, если вы прочитаете документ с обоснованием C99 , вы увидите, что появляется фраза «тихое изменение» - это то, чего вам нужно остерегаться.
Это поведенческие изменения в компиляторе, которые вы не нуждаются в сообщении и могут стать источником беспокойства и скрежета зубов, если ваше приложение начинает работать странно. Не беспокойтесь о битах "тихого изменения в c89" - если они были проблемой,
С уважением: Попробуйте и узнайте. :-)
Однако имейте в виду, что даже если вам нужно исправить несколько незначительных различий при компиляции, движение вверх, вероятно, того стоит.
Если вы не нарушаете явные функции C99, код c90 будет отлично работать с флагом c99 с другими предыдущими библиотеками c99.
Но в C89 есть некоторые библиотеки на основе dos, например ,, это определенно не сработает.
C99 очень гибок, поэтому не стесняйтесь мигрировать: -)
Соглашения о вызовах между библиотеками C давно не менялись, и я не уверен, что когда-либо менялось.
Операционные системы на данный момент в значительной степени полагаются на вызовы C. соглашений, поскольку API-интерфейсы C, как правило, являются связующим звеном между частями ОС.
Итак, в основном ответ таков: «Да, двоичные файлы будут обратно совместимы. Нет, естественно, код, использующий функции C99, не может быть позже скомпилирован. с компилятором, отличным от C99. "
Он предназначен для обратной совместимости. Он формализует расширения, которые уже реализованы многими поставщиками. Возможно, даже вероятно, что хорошо написанная программа не будет иметь проблем при компиляции с C99.
По моему опыту, перекомпиляция одних модулей, а не других для экономии времени ... тратит много времени.