2016-04-09 8 views
-1

Я знаю, что Java независима от платформы и C++ зависит. Мне было интересно, могу ли я написать программу на C++ в Windows, могу ли я каким-то образом получить ту же самую программу для работы в разных операционных системах, не переписывая все это. Имейте в виду, что я новичок в программировании.Есть ли способ написать C++-программу на одной платформе без повторной записи для разных операционных систем

+0

Уверенный, что вы можете написать переносимый код C++, который работает, когда он скомпилирован для конкретной целевой платформы. –

+2

«Я знаю, что Java независима от платформы и зависит от C++». Java имеет ** длинную ** историю маркетинговых заявлений, которые, как этот, просто ложны. –

+0

Избегайте использования классов Microsoft Foundation. Используйте стандартную библиотеку. – Logicrat

ответ

2

Да!

Любой разумный программист на C++, у которого нет определенной причины, не будет писать код, совместимый со стандартом и переносимый.

Эти обязательные взаимодействия с платформой, такие как доступ к файловой системе и сети, должны быть абстрагированы за слоем стороннего библиотечного кода (например, Boost), который имеет эквивалентную реализацию на многих платформах. Специфичные для платформы факторы, такие как разная ширина целочисленного типа, могут быть отвлечены за вашим компилятором (для встроенных типов).

Таким образом, вполне приличный код программиста C++ не изменит на разных платформах.

Иногда сложно сделать код полностью портативным, но это цель, и в целом это абсолютно достижимой и правильной вещи.

Однако, как правило, вам необходимо перекомпилировать код для каждой целевой платформы, потому что процессоры и операционные системы сильно отличаются друг от друга и делают программу, написанную машинным кодом (это то, что является вашим исполняемым файлом), переносной - это целый другой чайник рыбы ,

+0

Вы говорите: «вам, как правило, потребуется перекомпилировать свой код для каждой целевой платформы», и это подразумевает, что C++ зависит от платформы, как описано здесь. Я не понимаю, как это ответ. – user34660

+1

@ user34660: Вы должны подумать о различии между _code_ и _an executable_.OP, похоже, спрашивает, может ли код C++ быть переносимым (из вопроса: _ «без переписывания всего» _, а не «без перекомпиляции всего»); как я объясняю выше, ответ: ** да **. Но оговорка заключается в том, что когда вы передаете свой переносимый код на C++ с помощью компилятора C++ (как это обычно бывает), он становится машинным кодом (другим языком), который обычно не переносится. Я не понимаю, как это не ответ. –

+0

Se мой комментарий к вопросу. Вопрос непонятен. Существует разница между переносимостью исходного уровня и исполняемого уровня. Упоминание о Java подразумевает переносимость на уровне исполняемого файла, и я не вижу ничего противоречащего этому. – user34660

-1

Собственный клиент Google (NaCl), как в Technical Overview - Google Chrome, является примером того, о чем вы спрашиваете. См. Portability; он говорит: «Скомпилируйте исходный код C/C++ для портативного исполняемого файла битового кода (pexe)».

Переносимость обычно не определяется языком, она предоставляется компилятором и связанной с ним средой выполнения.

+0

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

+0

О, нет, я точно не ответил на другой вопрос. Собственный клиент Google компилируется в биткод так же, как Java компилируется в байт-код. Вопрос непонятен. – user34660