Чистый C-код + C-компилятор = кросс-платформенный код? - PullRequest
3 голосов
/ 30 августа 2011

Если у меня есть код, полностью написанный на C, с использованием только библиотек, написанных также на C, и у меня есть компилятор, такой как GCC, поддерживающий многие платформы, могу ли я быть уверен, что этот код будет работать для любой архитектура поддерживается компилятором? Например, могу ли я взять Flex или CPython , скомпилировать и использовать его, скажем, на AVR ?

Edit:

  • скомпилируйте и запустите, конечно же
  • без графического интерфейса

Ответы [ 5 ]

5 голосов
/ 30 августа 2011

Нет, трудно сказать, не увидев ваш код. Например, если вы зависите от того, что long составляет 4 байта, это не будет правильно на 64-битной машине.

3 голосов
/ 30 августа 2011

" полностью написано на C " никоим образом не гарантирует, что код является переносимым. Портативный компилятор, такой как GCC, абстрагирует детали архитектуры ЦП, но в тот момент, когда вы используете системный вызов, специфичный для конкретной ОС, ваш код становится непереносимым, если вы не заключите фрагмент в #ifdef WHATEVER_OS. Вот почему такие стандарты, как POSIX, появились для унификации интерфейса системных вызовов в разных операционных системах.

Ограничение вашего кода системными вызовами, определенными POSIX, и использование POSIX-совместимой операционной системы, как правило, должно вас не беспокоить, за небольшими исключениями.

3 голосов
/ 30 августа 2011

переносимость исходного кода и компилируемость должны быть предоставлены в вашем сценарии.

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

2 голосов
/ 30 августа 2011

Простое использование C не гарантирует, что код переносим на любую платформу, поддерживающую C. Существует множество ловушек, в которые нужно вступить, например, зависимость от размеров шрифта, порядка байтов или неопределенного поведения.* На самом деле, нетривиальная программа редко переносима для многих, кроме платформ, на которых вы фактически убедились, что она работает.Но вы, конечно, можете принять меры, чтобы уменьшить вероятность возникновения проблем.

2 голосов
/ 30 августа 2011

Ответ: «Они, вероятно, скомпилируются, но есть вероятность, что они не будут работать».Проблема в доступных вам ресурсах.Допустим, вы программируете для своей машины 2 ГБ.Будет ли ваша программа работать на машине с 256 Мб?Может ли DOS-машина запустить CPython?Но они, вероятно, скомпилируют :-) (технически у вас может быть программа (код), слишком большая, чтобы поместиться в адресном пространстве целевой машины. Если ваш .exe / .out составляет 18 Мб, а у целевой машины есть адреспространство 16 МБ, вы даже не можете скомпилировать)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...