ТОП 10:

Зачем нужно программирование?



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

Два этапа создания программ

Программа на языке Си, также как и на большинстве современных языков программиро-

вания, создается в два этапа

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.







Последнее изменение этой страницы: 2016-04-08; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.208.202.194 (0.01 с.)