Существуют ли реализации Visual C ++ для других платформ? - PullRequest
0 голосов
/ 18 февраля 2010

Подразумевает ли среда выполнения Visual C ++ платформу Windows? Я имею в виду, если я напишу программу, которая напрямую использует только функции, специфичные для среды выполнения VC ++, и не вызывает напрямую функции Windows API, можно ли ее перекомпилировать и запустить на любой ОС, кроме Windows? Я не имею в виду системный эмулятор Windows, я имею в виду готовую реализацию среды выполнения VC ++ для некоторых других ОС.

Ответы [ 5 ]

4 голосов
/ 18 февраля 2010

Среда выполнения Visual C ++ содержит стандартную библиотеку C ++ и специфичные для платформы вспомогательные функции. Windows API является частью Windows SDK и не входит в среду выполнения Visual C ++.

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

Я имею в виду, если я напишу программу, которая напрямую использует только функции, специфичные для среды выполнения VC ++, и не вызывает напрямую функции API Windows, можно ли ее перекомпилировать и запустить на любой ОС, кроме Windows?

Пока вы используете только стандартные функции и классы C ++, да.

Я не имею в виду системный эмулятор Windows, я имею в виду готовую реализацию среды выполнения VC ++ для некоторых других ОС.

Сама среда выполнения доступна только в Windows, поскольку ее реализация зависит от конкретной платформы. Как я уже упоминал выше, вы получаете совместимость только на уровне исходного кода и только в том случае, если вы не используете функции, специфичные для MS.

2 голосов
/ 18 февраля 2010

«VC ++ Runtime» относится к реализации Microsoft стандартных библиотек C и C ++ поверх Windows, так что да, в этом смысле это подразумевает платформу Windows.(На самом деле, он реализован с точки зрения API Win32, поскольку ОС должна поддерживать все те замечательные вещи, которые стандартная библиотека может сделать для вас).

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

1 голос
/ 18 февраля 2010

Я имею в виду, если я напишу программу, которая напрямую использует только функции, специфичные для среды выполнения VC ++, и не вызывает напрямую функции Windows API, можно ли ее перекомпилировать и запустить на любой ОС, кроме Windows?

Если под «функциями, специфичными для среды выполнения VC ++», вы подразумеваете стандартные библиотечные функции, то ответ - да (но с некоторыми оговорками)

Если вы имеете в виду нестандартные функции, которые находятся во время выполнения VC, но не являются стандартными, например _snprintf(), то ответ, как правило, отрицательный (но другие реализации могут их поддерживать, так что вы можете сойти с рук ).

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

1 голос
/ 18 февраля 2010

Когда-то было возможно (Visual C ++ 4.x?) Нацеливаться на Mac (процессор 68000) с MFC / Visual C ++, но этот проект был заброшен на долгое время.

Microsoft Mobile / Smart Device - это своего рода перекрестная разработка, поддерживаемая в последней версии Visual Studio.

1 голос
/ 18 февраля 2010

Это два разных вопроса.Если вы придерживаетесь переносимых частей C и RTL, вы, конечно, можете перекомпилировать для другой платформы - я делаю это ежедневно.Но сгенерированный VC ++ исполняемый файл может быть запущен только в Windows - это исполняемый файл Windows:)

Однако не думайте, что вся библиотека времени выполнения VC ++ является переносимой.Некоторые функции (например, strlen ()), некоторые существуют, но называются по-разному (strnicmp ()), некоторые просто отсутствуют на других платформах.

...