ТЕОРЕТИЧЕСКАЯ ЧАСТЬ. Язык Св основе своей был создан в 1972 г
Язык С в основе своей был создан в 1972 г. как язык для операционной системы UNIX [1]. Его автором считается Денис М. Ритчи (Dennis M. Ritchie). Популярность языка обусловлена, прежде всего тем, что большинство операционных систем были написаны на нем. Однако сначала его распространение задержалось из-за того, что не было удачных компиляторов. Некоторое время отсутствовала единая политика по стандартизации языка С. В начале 1980-х г. в Американском национальном институте стандартов (ANSI) такая работа. В 1989 г. работа комитета по языку С была ратифицирована, и в 1990 г. был издан первый официальный документ по стандарту языка С. Появился стандарт 1989, т. е. С89 [2]. К разработке стандарта по языку С была также привлечена Международная организация по стандартизации (ISO). Появился стандарт ISO/IEC 9899:1990, или ANSI C99 [2]. В данном пособии за основу принимается стандарт языка С от 1989 г. Язык С является прежде всего языком высокого уровня, но в нем заложены возможности, которые позволяют программисту (пользователю) работать непосредственно с аппаратными средствами компьютера и общаться с ним на достаточно низком уровне [2]. Многие операции, выполняемые на языке С,сродни языку Ассемблера. Поэтому язык С часто называют языком среднего уровня. Для написания программ в практических разделах данного учебного пособия будет использоваться компилятор языка С++, а программирование будет вестись в среде Microsoft Visual Studio 2010. Предполагается, что на компьютере установлена эта интегрированная среда. Microsoft Visual Studio 2010 доступна в следующих вариантах: o express – бесплатная среда разработки, включающая только базовый набор возможностей и библиотек; o professional – поставка, ориентированная на профессиональное создание программного обеспечения и командную разработку, при которой созданием программы одновременно занимаются несколько человек; o premium – издание, включающее дополнительные инструменты для работы с исходным кодом программ и создания баз данных; o ultimate – наиболее полное издание Visual Studio, содержащее все доступные инструменты для написания, тестирования, отладки и анализа программ, а также дополнительные инструменты для работы с базами данных и проектирования архитектуры ПО. Отличительной особенностью среды Microsoft Visual Studio 2010 является то, что она поддерживает работу с несколькими языками программирования и программными платформами. Поэтому перед тем как начать создание программы на языке С, необходимо выполнить несколько подготовительных шагов по созданию проекта и выбора и настройки компилятора языка С для трансляции исходного кода. После запуска Microsoft Visual Studio 2010 появляется стартовая страница (рис. 1.1). Следующим шагом является создание нового проекта. Для этого в меню File необходимовыбрать New ® Project (или напечатать комбинацию клавиш Ctrl + Shift + N). Результат выбора пунктов меню для создания нового проекта показан на рис. 1.2. Среда Visual Studio отобразит окно New Project, в котором необходимо выбрать тип создаваемого проекта. Проект (project) используется в Visual Studioдля логической группировки нескольких файлов, содержащих исходный код, на одном из поддерживаемых языков программирования, а также любых вспомогательных файлов. Обычно после сборки проекта (которая включает компиляцию всех всходящих в проект файлов исходного кода) создается один исполняемый модуль. В окне New Project следует развернуть узел Visual С++, затем обратиться к пункту Win32 и на центральной панели выбрать Win32 Console Application (рис. 1.3). После выбора типа проекта в поле редактора Name (где по умолчанию имеется <Enter_name>) необходимо ввести его имя, например hello. В поле Location можно указать путь размещения проекта или выбрать его (путь) с помощью клавиши (кнопки) Browse. По умолчанию проект сохраняется в специальной папке Projects. Выбор имени проекта может быть достаточно произвольным: допустимо использовать числовое значение, допустимо имя задавать через буквы русского алфавита. В дальнейшем будем использовать имя, набранное с помощью букв латинского алфавита и, может быть, с добавлением цифр. Пример выбора имени проекта показан на рис. 1.4.
Одновременно с проектом Visual Studio создает решение. Решение (solution) – это способ объединения нескольких проектов для организации более удобной работы с ними. После нажатия кнопки OK откроется окно Win32 Application Wizard (мастер создания приложений для операционных систем Windows) (рис. 1.5).
На первой странице мастера представлена информация о создаваемом проекте, на второй можно сделать его первичные настройки. После обращения к странице Application Settings или нажатия кнопки Next получим окно, представленное на рис. 1.6. В дополнительных опциях (Additional options) следует поставить галочку в поле Empty project (пустой проект) и снять (убрать) ее в поле Precompiled header (рис. 1.7). Здесь и далее будем создавать проекты по приведенной схеме, т. е. проекты в консольном приложении, которые выполняются целиком программистом (за счет выбора Empty project). После нажатия кнопки Finish получим экранную форму (рис. 1.8), где приведена последовательность действий добавления файла для создания исходного кода к проекту. Стандартный путь для этого: подвести курсор мыши к папке Source Files из узла hello в левой части открытого проекта приложения, выбрать Add, затем New Item (новый элемент).
Выбрав (нажав) New Item получим окно (рис. 1.9), где через пункт меню Code узла Visual C++ выполнено обращение к центральной части панели, в которой осуществляется выбор типа файлов. В данном случае требуется обратиться к закладке C++ File (.cpp).
Теперь в поле редактора Name (в нижней части окна) следует задать имя нового файла и указать расширение .с. Например, main.c. Имя может быть достаточно произвольным, но имеется негласное соглашение, что оно должно отражать назначение файла и логически описывать исходный код, который в нем содержится. В проекте, состоящем из нескольких файлов, имеет смысл выделить файл, содержащий главную функцию программы, т. е. ту с которой она начнет выполняться. В данном пособии такому файлу мы будем задавать имя main.c, где расширение .с указывает на то, что этот файл содержит исходный код на языке С, и он будет транслироваться соответствующим компилятором. Программам на языке С принято давать указанное расширение. После задания имени файла в поле редактора Name, получим форму, представленную на рис. 1.10. Затем следует нажать кнопку Add. Вид среды Visual Studio после добавления первого файла к проекту показан на рис. 1.11. Добавленный файл отображается в дереве Solution Explorer под узлом Source Files (файлы с исходным кодом), и для него автоматически открывается редактор. На рис. 1.11 в левой панели в папке Solution Explorer отображаются файлы, включенные в проект в папках. Приведем их описание. Папка Source Files предназначена для файлов с исходным кодом. В ней отображаются файлы с расширением .с. Папка Header Files сожержит заголовочные файлы с расширением .h. В папке Resource Files представлены файлы ресурсов, например изображения и т. д. Папка External Dependencies отображает файлы, не добавленные явно в проект, но использующиеся в файлах исходного кода, например включенные при помощи директивы #include. Обычно в этой папке присутствуют заголовочные файлы стандартной библиотеки, использующиеся в проекте. Следующий шаг состоит в настройке проекта. Для этого в меню Project главного менюследуетвыбрать hello Properties (или одновременно нажать клавиши Alt и F7, т. е. Alt + F7). Пример обращения к этому пункту меню показан на рис. 1.12.
После того как откроется окно свойств проекта, следует обратиться (с левой стороны) к Configuration Properties, появится ниспадающий список (рис. 1.13). Далее нужно обратиться к узлу General, и через него в левой панели выбрать Character Set, где установить свойство Use Multi-Byte Character Set. Настройка Character Set (набор символов) позволяетопределиться, какая кодировка символов – ANSI или UNICODE – будет использована при компиляции программы. Для совместимости со стандартом C89 мы выбираем Use Multi-Byte Character Set. Это позволяет использовать многие привычные функции, например по выводу информации на консоль. После осуществления выбора (рис. 1.13) следует нажать кнопку Применить. Затем необходимо выбрать узел С/С++ и в ниспадающем меню выбрать пункт Code Generation, через который в правой части панели обратиться к закладке Enable C++ Exceptions, установив для нее No (запрещение исключений С++). Результат установки выбранного свойства представлен на рис. 1.14. Затем нужно нажать кнопку Применить.
Далее в ниспадающем меню узла С/С++ необходимо выбрать пункт Language и через него обратиться в правую часть панели, где установить следующие значения для свойств: для свойства Disable Language Extensions (дополнительные языковые расширения фирмы Microsoft) – Yes (/Za), для Treat Wchar_t As Built in Type (рассматривать тип wchar_t как встроенный тип) No (/Zc:wchar_t–), Force Conformance in For Loop Scope (соответствие стандарту определения локальных переменных в операторе цикла for) – Yes(Zc:forScope), Enable Run-Time Type Information (разрешить информацию о типах во время выполнения) установить в No (/GR–), для свойства Open MP Support (разрешить расширение Open MP; используется при написании программ для многопроцессорных систем) No(/openmp–). Результат выполнения этих действий показан на рис. 1.15. После выполнения указанных действий следует нажать клавишу Применить. Далее в ниспадающем списке узла С/С++ следует выбрать пункт Advanced и в правой панели изменить свойство Compile As в свойство компиляции языка С, т. е. Compile as C Code (/TC). Результат установки компилятора языка С представлен на рис. 1.16. После нажатия клавиш Применить и ОК откроется подготовленный проект с пустым полем редактора кода, в котором можно начать писать программы. В этом редакторе наберем программу, выводящую традиционное приветствие «Hello World». Для компиляции созданной программы можно обратиться в меню Build, или, например, нажать клавиши Ctrl + F7. В случае успешной компиляции получим экранную форму, показанную на рис. 1.17. Для приведенного кода программы запуск на ее исполнение из окна редактора в Visual Studio 2010 выполняется нажатием клавиши F5 (рис. 1.18). Произведем разбор первой программы. Во-первых, отметим, что в языке С нет стандартных инструкций (операторов) для вывода сообщений на консоль (окно пользователя), а предусмотрены специальные библиотечные файлы, в которых имеются функции для этих целей. В приведенной программе используется заголовочный файл с именем stdio.h (стандартный ввод–вывод), который должен быть включен в начало программы. Для вывода сообщения на консоль используется функция printf(). Для работы с консолью в программу включен также заголовочный файл conio.h, поддерживающий функцию getch(), которая извлекает символ из потока ввода, т. е. она предназначена для приема сообщения о нажатии какой-либо (почти любой) клавиши на клавиатуре. С другими компиляторами, возможно, потребуется getch(), т. е. без префиксного нижнего подчеркивания. Строка программы
int main (void) сообщает системе, что именем программы является main() – главная функция и что она возвращает целое число, о чем указывает аббревиатура «int». Имя main() – это специальное имя, которое указывает, где программа должна начать выполнение [3]. Наличие круглых скобок после слова main свидетельствует о том, что это имя функции. Если содержимое этих скобок отсутствует или в них представлено служебное слово void, то это означает, что в функцию main() не передается никаких аргументов. Тело функции main() ограничено парой фигурных скобок. Все утверждения программы, заключенные в них, будут относиться к этой функции. В теле функции main() имеются еще три функции. Во-первых, функция printf() находится в библиотеке компилятора языка С и печатает или отображает те аргументы, которые были подставлены вместо параметров. Символ \n означает единый символ newline (новая строка), т. е. с его помощью выполняется перевод на новую строку. Символ \t осуществляет табуляцию, т. е. начало вывода результатов программы с отступом вправо. Функция без параметров getch() извлекает символ из потока ввода. С другими компиляторами, возможно, потребуется getch(), т. е. без префиксного нижнего подчеркивания. Последнее утверждение в первой программе return 0; указывает на то, что выполнение функции main() закончено и что в систему возвращается значение 0 (целое число). Нуль используется в соответствии с соглашением об индикации успешного завершения программы [2]. Все действия в программе завершаются символом точки с запятой. Все файлы проекта сохраняются в той папке, которая сформировалась после указания в поле Location имени проекта (hello). На рис. 1.19 показаны папки и файлы проекта Visual Studio 2010.
Каждый файл обладает некоторым значением: · hello.sln – файл решения для созданной программы. Он содержит информацию о том, какие проекты входят в данное решение. Обычно, эти проекты расположены в отдельных подкаталогах. Например, наш проект находится в подкаталоге hello; · hello.suo – файл настроек среды Visual Studio при работе с решением, включает информацию об открытых окнах, их расположении и прочих пользовательских параметрах. · hello.sdf – файл содержащий вспомогательную информацию о проекте, который используется инструментами анализа кода Visual Studio, такими как IntelliSense для отображения подсказок об именах и т. д. Файлы папки Debug представлены на рис. 1.20.
Рассмотрим их: · hello.exe – исполняемый файл проекта; · hello.ilk – файл «incremental linker», используемый компоновщиком для ускорения процесса компоновки; · hello.pdb – отладочная информация (информация об именах в исполняемых файлах, используемая отладчиком). Файлы папки hello показаны на рис. 1.21. Характеристика содержимого папки hello: · main.c – файл исходного программного кода; · hello.vcxproj – файл проекта; · hello.vcxproj.user – файл пользовательских настроек, связанных с проектом; · hello.vcxproj.filters – файл с описанием фильтров, используемых Visual Studio Solution Explorer для организации и отображения файлов с исходным кодом.
|