Годы развития сделали язык C++ весьма популярным, хоть и существующем во многих разных формах из-за множества различий компиляторов, каждый из которых имеет собственные особенности. Эта популярность и различия в доступных версиях привели к большому количеству проблем совместимости и переносимости кода. Следовательно, появилась потребность стандартизировать все это.
В 1998 году первая стандартная версия языка C++ была ратифицирована международной организацией по стандартизации ISO Committee в виде стандарта ISO/IEC 14882:1998. Затем, в 2003 году, последовала версия ISO/IEC 14882:200). Текущая версия стандарта языка C++ была ратифицирована в августе 2011 года. Официально она называется С++11 (ISO/IEC 14882:2011) и содержит некоторые из самых честолюбивых и прогрессивных изменений, которые когда-либо видел стандарт.
Создание приложения C++
Когда вы запускаете Блокнот (Notepad) или редактор vi на своем компьютере, вы фактически указываете процессору запустить исполняемый файл этой программы. Исполняемый файл (executable) — это готовый продукт, который может быть запущен и должен сделать то, чего намеревался достичь программист.
Этапы создания исполняемого файла
Написание программы C++ является первым этапом создания исполняемого файла, который в конечном счете может быть запущен на вашей операционной системе. Основные этапы создания приложений C++ приведены ниже.
1. Написать (или запрограммировать) код C++, используя текстовый редактор.
2. Откомпилировать код, используя компилятор C++, который преобразовывает его в версию машинного языка и запишет в объектный файл (object file).
3. Скомпоновать результат работы компилятора, используя компоновщик, и получить исполняемый файл (.ехе в Windows, например).
Обратите внимание, что микропроцессор не может использовать текстовые файлы, которые вы, по существу, и создаете, когда пишете программы. Компиляция (compilation) — этап, на котором код C++, содержащийся обычно в текстовых файлах с расширением . срр, преобразуется в бинарный код, который может быть понят процессором. Компилятор (compiler) преобразует по одному файлу кода за раз, создавая объектный файл с расширением . о или . obj и игнорируя зависимости, которые код в этом файле может иметь с кодом в другом файле. Распознавание этих зависимостей и объединение кода является задачей компоновщика (linker). Кроме объединения различных объектных файлов, он устанавливает зависимости и в случае успешной компоновки создает исполняемый файл, который можно выполнять и в конечном счете распространять.
Анализ и устранение ошибок
Большинство сложных приложений, особенно разработанных коллективом программистов, редко компилируются и начинают хорошо работать сразу. Большое или сложное приложение, написанное на любом языке (включая C++), зачастую требует множества запусков и перезапусков, чтобы проанализировать проблемы и обнаружить ошибки. Затем ошибки исправляются, программа перекомпилируется и процесс продолжается. Таким образом, кроме трех этапов (программирование, компиляция и компоновка), разработка зачастую подразумевает этап отладки (debugging), на котором программист анализирует аномалии и ошибки в приложении, используя инструментальные средства просмотра и отладчики, а также построчное выполнение.