Два этапа создания программ Программа на языке Си, также как и на большинстве современных языков программиро- вания, создается в два этапа 1) трансляция– перевод текста программы в машинные коды; 2) компоновка– сборка частей программы и подключение стандартных функций. Исходный файл: First.cpp Транслятор Объектный файл:first.o Стандартные функции  Компоновщик Исполняемый файл: First.exe Почему же не сделать все за один шаг? Для простейших программ это действительно было бы проще, но для сложных проектов двухступенчатый процесс имеет явные преимущества: • обычно сложная программа разбивается на несколько отдельных частей (модулей), которые отлаживаются отдельно и зачастую разными людьми; поэтому в завершении остается лишь собрать готовые модули в единый проект; • при исправлении в одном модуле не надо снова транслировать (переводить в машинные коды) все остальные (это могут быть десятки тысяч строк); • при компоновке во многих системах можно подключать модули, написанные на других языках, например, на Ассемблере (в машинных кодах). Трансляторы языка Си называются компиляторами: они переводят (транслируют) сразу всю программу в машинный код, а не транслируют строчка за строчкой во время выполнения, как это делают интерпретаторы. Это позволяет значительно ускорить выполнение программы и не ставить интерпретатор на каждый компьютер, где программа будет выполняться. Исходный файл программы на языке Си имеет расширение *.с или *.cpp (расширение *.cpp говорит о том, что в программе могут быть использованы возможности языка Си++). Это обычный текстовый файл, в который записывают текст программы в любом текстовом редакторе, например, в Блокноте. Транслятор переводит исходный файл (вернее, записанную в нем программу) в машин- ные коды и строит так называемый объектный файл с тем же именем и расширением *.o. Хотя в нем уже записан машинный код, объектный файл еще нельзя запускать на компьютере, потому что в нем не хватает стандартных функций (например, для ввода и вывода данных). Компоновщик подключает стандартные функции, хранящиеся в библиотеках (они имеют расширение *.a). В результате получается один файл с расширением *.exe, который и пред ставляет собой готовую программу. Простейшая программа на Си Такая программа состоит всего из 8 символов. Вот она: main() { } Основная программа всегда называется именем main (будьте внимательны – Си различает большие и маленькие буквы, а все стандартные операторы Си записываются маленькими буквами). Пустые скобки означают, что main не имеет аргументов. Фигурные скобки обозначают начало и конец основной программы – поскольку внутри них ничего нет, наша программа ничего не делает, она просто соответствует правилам языка Си, ее можно скомпилировать и получить exe-файл. Вывод текста на экран Составим теперь программу, которая делает что-нибудь полезное, например, выводит на экран слово «Привет». #include <stdio.h> подключение функций стандартного ввода и вывода, описание которых находится в файле stdio.h main() вызов функции { printf("Привет"); вывода на экран } Выводы: • Чтобы использовать стандартные функции, необходимо сказать транслятору, что есть функция с таким именем и перечислить тип ее аргументов – тогда он сможет определить, верно ли мы ее используем. Это значит, что надо включить в программу описание этой функции. Описания стандартных функций Си находятся в так называемых заголовочных файлах с расширением *.h. • Для подключения заголовочных файлов используется директива (команда) препроцессора #include, после которой в угловых скобках ставится имя файла. Внутри угловых скобок не должно быть пробелов. Для подключения еще каждого нового заголовочного файла надо использовать новую команду #include. Препроцессор – это специальная программа, которая обрабатывает текст вашей программы раньше транслятора. Все команды препроцессора начиняются знаком #. • Для вывода информации на экран используется функция printf. В простейшем случае она принимает единственный аргумент – строку в кавычках, которую надо вывести на эк- ран. • Каждый оператор языка Си заканчивается точкой с запятой. Как запустить программу? Чтобы проверить эту программу, надо сначала «напустить» на нее транслятор, который переведет ее в машинные коды, а затем – компоновщик, который подключит стандартные функции и создаст исполняемый файл. Раньше все это делали, вводя команды в командной строке или с помощью так называемых пакетных файлов. На современном уровне все этапы создания, трансляции, компоновки, отладки и проверки программы объединены и выполняются внутри специальной программы-оболочки, которую называют интегрированная среда разработки (IDE – integrated development environment). В нее входят: • редактор текста • транслятор • компоновщик • отладчик В этой среде вам достаточно набрать текст программы и нажать на одну клавишу, чтобы она выполнилась (если нет ошибок). В оболочке, например, Dev-C++ для запуска программы надо нажать клавишу F9. Если в программе есть ошибки, вы увидите в нижней части экрана оболочки сообщения об этих ошибках (к сожалению, на английском языке). Если щелкнуть по одной из этих строчек, в тексте программы выделяется строка, в которой транслятору что-то не понравилось. При поиске ошибок надо помнить, что • часто ошибка сделана не в выделенной строке, а в предыдущей – проверяйте и ее тоже; • часто одна ошибка вызывает еще несколько, и появляются так называемые наведенные ошибки. Остановим мгновение Если запускать рассмотренную выше программу, то обнаружится, что программа сразу заканчивает работу и возвращается обратно в оболочку, не дав нам посмотреть результат ее работы на экране. Бороться с этим можно так – давайте скажем компьютеру, что в конце работы надо дождаться нажатия любой клавиши. #include <stdio.h> #include <conio.h> подключение заголовочного файла conio.h main() { printf("Привет"); // вывод на экран getch(); /*ждать нажатия клавиши*/ } Выводы: • Задержка до нажатия любой клавиши выполняется функцией getch(). • Описание этой функции находится в заголовочном файле conio.h. |