Сайт о телевидении

Сайт о телевидении

» » Структура простой программы

Структура простой программы

Сама по себе программа на языке С++ представляет собой текстовый файл, в котором представлены конструкции и операторы данного языка в заданном программистом порядке. В самом простом случае этот текстовый файл может содержать такую информацию:

Листинг 1.1. Пример простой программы.

/* Пример простой программы*/
#include
int main()
{
printf(“Hello World!”);
return 0;
}

и обычно имеет расширение cpp, например, «ex1.cpp».

Следующий шаг – это компиляция исходного кода. Под компиляцией понимают процесс, при котором содержимое текстового файла преобразуется в исполняемый машинный код, понимаемый процессором компьютера. Однако компилятор создает не готовую к исполнению программу, а только объектный код (файл с расширением *.obj). Этот код является промежуточным этапом при создании готовой программы. Дело в том, что создаваемая программа может содержать функции стандартных библиотек языка С++, реализации которых описаны в объектных файлах библиотек. Например, в приведенной программе используется функция printf() стандартной библиотеки «stdio.h». Это означает, что объектный файл ex1.obj будет содержать лишь инструкции по вызову данной функции, но код самой функции в нем будет отсутствовать.

Для того чтобы итоговая исполняемая программа содержала все необходимые реализации функций, используется компоновщик объектных кодов. Компоновщик – это программа, которая объединяет в единый исполняемый файл объектные коды создаваемой программы, объектные коды реализаций библиотечных функций и стандартный код запуска для заданной операционной системы. В итоге и объектный файл, и исполняемый файл состоят из инструкций машинного кода. Однако объектный файл содержит только результат перевода на машинный язык текста программы, созданной программистом, а исполняемый файл – также и машинный код для используемых стандартных библиотечных подпрограмм и для кода запуска.

Рассмотрим более подробно пример программы листинга 1.1. Первая строка задает комментарии, т.е. замечания, помогающие лучше понять программу. Они предназначены только для чтения и игнорируются компилятором. Во второй строке записана директива #include, которая дает команду препроцессору языка С++ вставить содержимое файла ‘stdio.h’ на место этой строки при компиляции. В третьей строке определена функция с именем main, которая возвращает целое число (тип int) и не принимает никаких аргументов (тип void). Функция main() является обязательной функцией для всех программ на языке С++ и без ее наличия уже на этапе компиляции появляется сообщение об ошибке, указывающее на отсутствие данной функции. Обязательность данной функции обусловливается тем, что она является точкой входа в программу. В данном случае под точкой входа понимается функция, с которой начинается и которой заканчивается работа программы. Например, при запуске exe-файла происходит активизация функции main(), выполнение всех операторов, входящих в нее и завершение программы. Таким образом, логика всей программы заключена в этой функции. В приведенном примере при вызове функции main() происходит вызов функции printf(), которая выводит на экран монитора сообщение “Hello World!”, а затем выполняется оператор return, который возвращает нулевое значение. Это число возвращается самой функцией main() операционной системе и означает успешное завершение программы. Фигурные скобки {} служат для определения начала и конца тела функции, т.е. в них содержатся все возможные операторы, которые описывают работу данной функции. Следует отметить, что после каждого оператора в языке С++ ставится символ ‘;’. Таким образом, приведенный пример показывает общую структуру программ на языке С++.

Последнее обновление: 18.05.2017

Программа на языке Си состоит из набора директив препроцессора, определений функций и глобальных объектов. Директивы препроцессора управляют преобразованием текста до его компиляции. Глобальные объекты определяют используемые данные или состояние программы. А функции определяют поведение или действия программы. Простейшая программа на Си, которая была определена в прошлых темах:

#include int main(void) { printf("Hello world! \n"); return 0; }

Инструкции

Простейшим строительным элементом программы на Си являются инструкции (statements). Каждая инструкция выполняет определенное действие. В конце инструкций в языке Си ставится точка с запятой (;). Данный знак указывает компилятору на завершение инструкции. Например:

Printf("Hello world!");

Вызов функции printf, которая выводит на консоль строку "Hello world!" является инструкцией и завершается точкой с запятой.

Набор инструкций может представлять блок кода. Блок кода оформляется фигурными скобками, инструкции, составляющие тело этого блока, помещаются между открывающей и закрывающей фигурными скобками:

{ printf("Hello world!"); printf("Bye world!"); }

В этом блоке кода две инструкции. Обе инструкции представляют вызов функции printf() и выводят определенную строку на консоль.

Директивы препроцессора

Для вывода данных на консоль в примере выше используется функция printf() , но чтобы использовать эту функцию, чтобы она вообще стала нам доступна в программе на Си, необходимо в начале файла с исходным кодом подключать заголовочный файл stdio.h с помощью директивы include .

Директива include является директивой препроцессора. Кроме данной include есть еще ряд директив препроцессора, например, define.

Каждая директива препроцессора размещается на одной строке. И в отличие от обычных инструкций языка Си, которые завершаются точкой с запятой ; , признаком завершения препроцессорной директивы является перевод на новую строку. Кроме того, директива должна начинаться со знака решетки #.

Непосредственно директива "include" определяет, какие файлы надо включить в данном месте в текст программы. По умолчанию мы можем подключать стандартные файлы из каталога так называемых "заголовочных файлов", которые обычно поставляются вместе со стандартными библиотеками компилятора. И файл "stdio.h" как раз является одним из таких заголовочных файлов.

Вообще сам термин "заголовочный файл" (header file) предполагает включение текста файла именно в начало или заголовок программы. Поэтому заголовочные файлы подключаются, как правило, в начале исходного кода. Кроме того, заголовочный файл должен быть подключен до вызова тех функций, которые он определяет. То есть, к примеру, файл stdio.h хранит определение функции printf, поэтому этот файл необходимо подключить до вызова функции printf.

Но в целом директивы препроцессора необязательно должны быть размещены в начале файла.

При компиляции исходного кода вначале срабатывает препроцессор, который сканирует исходный код на наличие строк, которые начинаются с символа #. Эти строки расцениваются препроцессором как директивы. И на месте этих директив происходит преобразование текста. Например, на месте директивы #include вставляется код из файла stdio.h.

Функция main

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

Функция также является блоком кода, поэтому ее тело обрамляется фигурными скобками, между которыми идет набор инструкций.

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

#include void main() { printf("Hello world!"); }

#include int main() { printf("Hello world!"); return 0; }

Использование этих определений не было бы ошибкой, и программа также вывела бы строку "Hello world" на консоль. И для большинства компиляторов это было бы нормально.

Далее мы подробнее рассмотрим определение функций, но здесь надо учитывать следующий аспект. Определение функции в виде int main(void) зафиксировано в стандарте языка С11. Компиляторы прежде всего ориентируются на стандарт языка, его спецификацию. Поэтому если мы используем то определение, которое дано в стандарте языка, то больше шанс, что оно будет поддерживаться всеми компиляторами. Хотя опять же повторюсь, в использовании второго варианта или int main() большой ошибки не будет.

Полностью последний стандарт C11 можно посмотреть по

Структура программы на языке С.

Использование языка программирования С в решении экономических задач

Программы и данные

Достоинства языка С

1) С – современный язык, его структура побуждает программиста использовать в своей работе методы: нисходящего проектирования, структурного программирования, модульную структуру программ.

2) С – эффективный язык. Программы на С отличаются компактностью и быстротой выполнения.

3) С – переносимый или мобильный язык.

4) С – мощный и гибкий язык.

5) Программы написанные на С используються для решения задач различных уровней. С обладает рядом мощных конструкций ассемблера.

6) С – удобный язык, он структурирован и вместе с тем не слишком ограничивает свободу программистам.

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

Программирование деятельность по составлению программы.

Программа -это описание алгоритма решения задачи, заданной на языке ЭВМ.

Команда предписание, определяющее очередной шаг.

Пример команды : С=А+В, где А, В-операнды, +- операция.

Операция -это то, что должна сделать ЭВМ согласно каждой команде.

Операнды -участники операции, то над чем и с чем выполняется операция. Набор элементарных операций из способов их описаний образуют систему команд языка программирования.

Пример №1:

# include

{void main(void) //заголовок головной функции программы

сout << “Здравствуй, С!\ n”;

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

2 строка: заголовок головной функции программы. Cout-оператор вывода информации << – помещение в класс данных, \n-переход к новой строке вывода.

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

Использование С.

1. Программы и данные.

2. Схема выполнения программы на ЭВМ:

Пример №1:

# include < stdio.h>

printf ("Я учусь в БГУИР\ n");

1 строка: команда препроцессора include, включающая файл stdio.h, который описывает библиотечную функцию printf.

2 строка: определение функции с именем main, не получающей никаких аргументов. Инструкция main заключается в фигурные скобки. Функция main обращается к библиотечной ф-ции printf для печати, заданной в последовательности литер. Наклонная черта (\ n) - литера новая строка, переход к новой строке.

Для выполнения программы на ПВЭМ, необходимо сделать следующие действия:

1) Составить программу на языке программирования.

2) Транслировать ее в стандарте этого языка.

3) Связать ее с необходимыми программами и функциями.

4) Загрузить в оперативную память.

5) Выполнить и получить результат.


СХЕМА КОМПЕЛЯЦИИ

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

Структура программы на языке С.

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

а) Общая структура программы на С без обращения к подпрограмме:

б) Общая структура программы на С с обращением к подпр-ме:

Аргументы являются одним из механизмов взаимодействия между функциями. Список аргументов в круглых скобках идет следом за именем функции. Фигурные скобки обрамляют начало и конец программы. Инструкции, из которых состоит тело программ из операторов и операндов. В С каждый оператор и каждая строка с обращением к функции заканчивается точкой с запятой. Исключение составляют команды препроцессора и имена функции, стоящие в начале программной единицы. Целью большинства программ является решение задачи путем различных преобразований исходных данных. Для этого необходимо.

Прежде чем приступить к написанию программ, необходимо изучить структуру программ на языке программирования С++. Своими словами, структура программ это разметка рабочей области (области кода) с целью чёткого определения основных блоков программ и синтаксиса. Структура программ несколько отличается в зависимости от среды программирования. Мы ориентируемся на IDE Microsoft Visual Studio, и по этому примеры программ будут показаны именно для MVS. Если вы используете другую IDE, то вам не составит труда перенести код из MVS в другие среды разработки, и вы поймете со временем, как это сделать.

Структура программ для Microsoft Visual Studio.

// struct_program.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" //здесь подключаем все необходимые препроцессорные директивы int main() { // начало главной функции с именем main //здесь будет находится ваш программный код }

В строке 1 говорится о точке входа для консольного приложения, это значит, что данную программу можно запустить через командную строку Windows указав имя программы, к примеру, такое struct_program.cpp . Строка 1 является однострочным комментарием, так как начинается с символов // , подробнее о комментариях будет рассказано в следующей статье. В строке 2 подключен заголовочный файл "stdafx.h" . Данный файл похож на контейнер, так как в нем подключены основные препроцессорные директивы (те, что подключил компилятор, при создании консольного приложения), тут же могут быть подключены и вспомогательные (подключенные программистом).

include — директива препроцессора, т. е. сообщение препроцессору. Строки, начинающиеся с символа # обрабатываются препроцессором до компиляции программы.

Препроцессорные директивы также можно подключать и в строках, начиная после записи #include "stdafx.h" до начала главной функции. Причём такой способ подключения библиотек является основным, а использование "stdafx.h" — это дополнительная возможность подключения заголовочных файлов, которая есть только в MVS. С 4-й по 6-ю строки объявлена функция main . Строка 4 – это заголовок функции, который состоит из типа возвращаемых данных (в данном случае int), этой функцией, и имени функции, а также круглых скобок, в которых объявляются параметры функции.

int — целочисленный тип данных

Между фигурными скобочками размещается основной программный код, называемый еще телом функции. Это самая простая структура программы. Данная структура написана в Microsoft Visual Studio. Все выше сказанное остается справедливым и для других компиляторов, кроме строки 2. Контейнера "stdafx.h" нигде кроме MVS нет.

Структура программы для C++ Builder.

При создании консольного приложения мастер создания проектов создает автоматически следующий код:

//препроцессорная директива, автоматически подключённая мастером создания проектов #include int main() { return 0; }

Мы видим, что у функции тип данных — int . Это говорит о том что по завершении работы функция вернет какое-то целочисленное значение, в нашем случае 0. Целочисленное потому, что int – это тип данных для целых чисел, таких как 4, 5, 6, 456, 233 и т. д.

Главное помнить, что если тип возвращаемых данных у функции main — это int или любой другой, кроме void , то следует писать строку типа этой: return <возвращаемое значение>;

В строке 2 подключена библиотека vcl.h – её автоматически подключает мастер создания приложений, поэтому удалять её не следует, иначе проект не будет рабочим.

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

Например:

Int main(int argc, char* argv) { return 0; }

Такой пример структуры генерируется мастером в MVS2010. Данный main немного отличается. Подробнее рассмотрим позже, но скажу, что данный main имеет такой вид, так как изначально рассчитан на поддержку юникода.

Юникод — стандарт кодирования символов, позволяющий представить знаки практически всех письменных языков. Подробнее о юникоде поговорим позже.

Существуют разные версии main , но в этом нет ничего страшного, так как main была главной функцией, так она ей и остается, поэтому все выше сказанное остается актуальным.

Пример структуры программы MVS с подключенными библиотеками.

#include "stdafx.h" #include using namespace std; int main() { }

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

Синтаксис подключения заголовочных файлов:

#include <имя заголовочного файла>

Более старые заголовочные файлы подключаются так (этот стиль подключения библиотек унаследован у языка программирования C):

#include <имя заголовочного файла.h>

Различие состоит в том, что после имени ставится расширение.h .

Язык программирования С++ является регистрозависимым. Например:
Return 0; – не правильно, будет ошибка компиляции.
return 0; – правильно!!!

В данной статье рассмотрены структуры программ на С++ в таких средах как MVS и Borland. И как вы уже заметили, эти структуры почти не отличаются. Поэтому данная статья актуальна для любой IDE. Если вы ещё не определились с выбором IDE, прочитайте .