Какие части C наиболее переносимы?

Я недавно прочитал интервью с соавторами Lua Луисом Х. де Фигередо и Роберто Иерусалимши, в котором они обсуждали дизайн и реализацию Lua. Это было, мягко говоря, очень интригующе. Однако одна часть обсуждения кое-что напомнила мне. Роберто назвал Lua « автономным приложением » (то есть это чистый ANSI C, который ничего не использует из ОС). Он сказал, что ядро ​​Lua было полностью переносимым, и из-за его ] purity стало легче переносить на платформы, которые даже не рассматривались (такие как роботы и встроенные устройства).

Теперь это заставляет меня задуматься. C вообще очень переносимый язык. Итак, какие части C (а именно те, что находятся в стандартной библиотеке) являются наиболее непереносимыми? и какие из них могут работать на большинстве платформ? Следует ли использовать только ограниченный набор типов данных (например, избегать short и, возможно, float )? А как насчет ФАЙЛА и системы stdio ? malloc и бесплатно ? Кажется, что Lua избегает всего этого. Это доводит дело до крайности? Или они являются корнем проблем с переносимостью? Помимо этого, что еще можно сделать, чтобы сделать код чрезвычайно переносимым?

Я спрашиваю обо всем этом потому, что в настоящее время я пишу приложение на чистом C89, и оптимально, чтобы оно было настолько переносимым, насколько возможное. Я' Я хочу пойти по середине пути в его реализации (достаточно портативным, но не настолько, чтобы мне пришлось писать все с нуля). В любом случае, я просто хотел посмотреть, что в целом является ключом к написанию лучшего кода C.

Как Последнее замечание, все это обсуждение относится только к C89.

15
задан Trinidad 15 February 2011 в 00:31
поделиться