Версии C ++, они автоматически определяют версию exe?

Итак, я знаю, что есть несколько версий C ++. И я не очень много знаю о различиях между ними, но мой вопрос:
Допустим, я сделал приложение на С ++ на языке С ++ 11 и отправил его на другой компьютер. Будет ли возникать ошибка в других версиях С ++ или он автоматически обнаружит его и запустит с этой версией?
Или я ошибаюсь и это определяется во время компиляции? Кто-то, пожалуйста, скажите мне, потому что я еще не нашел ни одного ответа на мой вопрос в Google.

2

Решение

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

C ++ переводится компилятором в машинный код, который работает непосредственно на процессоре. Любой компьютер с совместимым процессором поймет машинный код, но это еще не все. Программа должна взаимодействовать с файловой системой, графическими адаптерами и так далее. Эта часть, как правило, обрабатывается операционной системой по-разному. Даже если часть этого абстрагируется библиотеками C ++, обращения к операционной системе различны и специфичны для нее.

Например, скомпилированный двоичный файл для Ubuntu не будет работать в Windows, даже если оба компьютера имеют одинаковый процессор и оборудование.

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

Версия C ++ имеет значение для компиляции, конечно, вам нужен компилятор с поддержкой C ++ 11, если у вас есть исходный код C ++ 11, но как только программа скомпилирована, это уже не имеет значения.

6

Другие решения

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

Для Java, чтобы привести контрпример, это другое. Там код компилируется в формат байт-кода, который не зависит от машины. Этот формат байт-кода читается / понимается виртуальной машиной Java (JVM). В этом случае JVM должна быть доступна для вашей архитектуры, и должна быть установлена ​​правильная версия.

5

Или я ошибаюсь и это определяется во время компиляции?

Это как раз та идея: код компилируется, и после этого языковая версия практически не имеет значения. Единственный возможный подводный камень был бы, если бы новая версия C ++ включала бы принципиально новые изменения в стандартную библиотеку C ++ (библиотеку, а не сам язык!). Однако, поскольку подавляющее большинство этой библиотеки является шаблоном кода, она все равно компилируется вместе с вашим собственным кодом. Это в основном запекается в вашем .exe файл вместе с вашим собственным кодом, так что он так же переносим, ​​как ваш. Кроме того, дизайнеры C и C ++ проявляют большую осторожность не сломать старый код; так что вы можете ожидать, что даже те части, которые предоставляются самой системой (стандартной библиотекой C), ничего не сломают.

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

5
По вопросам рекламы [email protected]