Какое имя имеет исполняемый файл созданного проекта

Обновлено: 05.07.2024

Знакомство со средой Microsoft Visual Studio 2010 и настройка компилятора языка С. Стандартный ввод-вывод: версия для печати и PDA .

Для написания программ в практических разделах данного учебного пособия будет использоваться компилятор языка С++ , а программирование будет вестись в среде Microsoft Visual Studio 2010 . Предполагается, что на компьютере установлена эта интегрированная среда.

Microsoft Visual Studio 2010 доступна в следующих вариантах:

Express – бесплатная среда разработки, включающая только базовый набор возможностей и библиотек.

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

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

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

Отличительной особенностью среды Microsoft Visual Studio 2010 является то, что она поддерживает работу с несколькими языками программирования и программными платформами. Поэтому, перед тем, как начать создание программы на языке С, необходимо выполнить несколько подготовительных шагов по созданию проекта и выбора и настройки компилятора языка С для трансляции исходного кода

После запуска Microsoft Visual Studio 2010 появляется следующая стартовая страница, которая показана на рис. 1.1.


Рис. 1.1. Стартовая страница Visual Studio 2010

Следующим шагом является создание нового проекта. Для этого в меню File необходимо выбрать New – Project (или комбинацию клавиш Ctrl + Shift + N ). Результат выбора пунктов меню для создания нового проекта показан на рис. 1.2.


Рис. 1.2. Окно с выбором нового проекта

Среда Visual Studio отобразит окно New Project , в котором необходимо выбрать тип создаваемого проекта. Проект (project) используется в Visual Studio для логической группировки нескольких файлов, содержащих исходный код, на одном из поддерживаемых языков программирования, а также любых вспомогательных файлов. Обычно после сборки проекта (которая включает компиляцию всех всходящих в проект файлов исходного кода) создается один исполняемый модуль.

В окне New Project следует развернуть узел Visual С++, обратиться к пункту Win32 и на центральной панели выбрать Win32 Console Application. Выбор этой опции показан на рис. рис. 1.3.


Рис. 1.3. Выбор типа проекта

Затем в поле редактора Name (где по умолчанию имеется ) следует ввести имя проекта, например, hello . В поле Location можно указать путь размещения проекта, или выбрать путь размещения проекта с помощью клавиши (кнопки) Browse. По умолчанию проект сохраняется в специальной папке Projects. Пример выбора имени проекта показано на рис. 1.4.

Одновременно с созданием проекта Visual Studio создает решение. Решение (solution) – это способ объединения нескольких проектов для организации более удобной работы с ними.

После нажатия кнопки OK откроется окно Win32 Application Wizard (мастер создания приложений для операционных систем Windows), показанное на рис. 1.5.


Рис. 1.4. Пример задания имени проекта

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

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


Рис. 1.5. Мастер создания приложения

На первой странице представлена информация о создаваемом проекте, на второй можно сделать первичные настройки проекта. После обращения к странице Application Settings , или после нажатия кнопки Next получим окно, показанное на рис. рис. 1.6.

В дополнительных опциях ( Additional options ) следует поставить галочку в поле Empty project (пустой проект) и снять (убрать) галочку в поле Precompiled header . Получим экранную форму, показанную на рис. 1.7.


Рис. 1.7. Выполненная настройка мастера приложений

Здесь и далее будут создавать проекты по приведенной схеме, т.е. проекты в консольном приложении, которые должны создаваться целиком программистом (за счет выбора Empty project ). После нажатия кнопки Finish , получим экранную форму, показанную на рис. 1.8, где приведена последовательность действий добавления файла для создания исходного кода к проекту. Стандартный путь для этого: подвести курсор мыши к папке Source Files из узла hello в левой части открытого проекта приложения, выбрать Add и New Item (новый элемент).


Рис. 1.8. Меню добавления нового элемента к проекту

После выбора (нажатия) New Item получим окно, показанное на рис. 1.9, где через пункт меню Code узла Visual C++ выполнено обращение к центральной части панели, в которой осуществляется выбор типа файлов. В данном случае требуется обратиться к закладке C++ File (.cpp).


Рис. 1.9. Окно выбора типа файла для подключения к проекту

Теперь в поле редактора Name (в нижней части окна) следует задать имя нового файла и указать расширение ".с" . Например, main.c . Имя файла может быть достаточно произвольным, но имеется негласное соглашение, что имя файла должно отражать его назначение и логически описывать исходный код, который в нем содержится. В проекте, состоящем из нескольких файлов, имеет смысл выделить файл, содержащий главную функцию программы, с которой она начнет выполняться. В данном пособии такому файлу мы будем задавать имя main.c , где расширение .с указывает на то, что этот файл содержит исходный код на языке С , и он будет транслироваться соответствующим компилятором. Программам на языке С принято давать расширение .с . После задания имени файла в поле редактора Name , получим форму, показанную на рис. 1.10.


Рис. 1.10. Задание имени файла, подключаемому к проекту

Затем следует нажать кнопку Add . Вид среды Visual Studio после добавления первого файла к проекту показан на рис. 1.11. Добавленный файл отображается в дереве Solution Explorer под узлом Source Files (файлы с исходным кодом), и для него автоматически открывается редактор.


Рис. 1.11. Подключение файла проекта

На рис. 1.11 в левой панели в папке Solution Explorer отображаются файлы, включенные в проект в папках. Приведем описание.

Папка Source Files предназначена для файлов с исходным кодом. В этой папке отображаются файлы с расширением .с .

Папка Header Files сожержит заголовочные файлы с расширением .h.

Папка Resource Files содержит файлы ресурсов, например изображения и т. д.

Следующий шаг состоит в настройке проекта. Для этого в меню Project главного меню следует выбрать hello Properties (или с помощью последовательного нажатия клавиш Alt+F7). Пример обращения к этому пункту меню показан на рис. 1.12.


Рис. 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. Меню списка свойств проекта

После сделанного выбора, показанного на рис. 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 Info (разрешить информацию о типах во время выполнения) установить в No (/GR–) , свойство Open MP Support (разрешить расширение Open MP – используется при написании программ для многопроцессорных систем) установить в No(/openmp–) .

Результат выполнения этих действий показан на рис. 1.15.

После выполнения указанных действий следует нажать клавишу Применить . Далее в ниспадающем списке узла С/С++ следует выбрать пункт Advanced и в правой панели изменить свойство Compile As в свойство компиляции языка С , т.е. Compile as C Code (/TC) . Результат установки компилятора языка С показан на рис. 1.16.


Рис. 1.16. Результат выбора режима компиляции языка С

После нажатия клавиш Применить и ОК сначала откроется подготовленный проект с пустым полем редактора кода, в котором можно начать писать программы. В этом редакторе наберем программу, выводящую традиционное приветствие "Hello World". Для компиляции созданной программы можно обратиться в меню Build , или, например, набрать клавиши Ctr+F7. В случае успешной компиляции получим следующую экранную форму, показанную на рис. 1.17.


Рис. 1.17. Успешно откомпилированная первая программа на языке С

Для приведенного кода программы запуск на ее исполнение из окна редактора в Visual Studio 2010 можно нажать клавишу F5 . рис. 1.18 показан результат исполнения первой программы.


Рис. 1.18. Консольный вывод первой программы на языке С

сообщает системе, что именем программы является main() – главная функция, и что она возвращает целое число, о чем указывает аббревиатура "int" . Имя main() – это специальное имя, которое указывает, где программа должна начать выполнение [1.1]. Наличие круглых скобок после слова main() свидетельствует о том, что это имя функции. Если содержимое круглых скобок отсутствует или в них содержится служебное слово void , то это означает, что в функцию main() не передается никаких аргументов. Тело функции main() ограничено парой фигурных скобок. Все утверждения программы, заключенные в фигурные скобки, будут относиться к функции main() .

В теле функции main() имеются еще три функции. Во-первых, функции printf() находятся в библиотеке компилятора языка С , и они печатают или отображают те аргументы, которые были подставлены вместо параметров. Символ "\n" составляет единый символ newline (новая строка), т.е. с помощью этого символа осуществляется перевод на новую строку. Символ "\t" осуществляет табуляцию, т.е. начало вывода результатов программы с отступом вправо.

Функция без параметров _getch() извлекает символ из потока ввода (т.е. ожидает нажатия почти любой клавиши). С другими компиляторами, возможно, потребуется getch() , т.е. без префиксного нижнего подчеркивания.

Последнее утверждение в первой программе

указывает на то, что выполнение функции main() закончено и что в систему возвращается значение 0 (целое число). Нуль используется в соответствии с соглашением об индикации успешного завершения программы [1.3].

В завершение следует отметить, что все действия в программе завершаются символом точки с запятой.

Все файлы проекта сохраняются в той папке, которая сформировалась после указания в поле Location имени проекта (hello). На рис. 1.19 показаны папки и файлы проекта Visual Studio 2010..


Рис. 1.19. Файлы и папки созданного проекта

На рис. 1.19 файлы с полученными расширениями означают:

hello.sln – файл решения для созданной программы. Он содержит информацию о том, какие проекты входят в данное решение. Обычно, эти проекты расположены в отдельных подкаталогах. Например, наш проект находится в подкаталоге hello;

hello.suo – файл настроек среды Visual Studio при работе с решением, включает информацию об открытых окнах, их расположении и прочих пользовательских параметрах.

hello.sdf – файл содержащий вспомогательную информацию о проекте, который используется инструментами анализа кода Visual Studio, такими как IntelliSense для отображения подсказок об именах и т.д.

Файлы папки Debug показаны на рис. 1.20.


Рис. 1.20. Файлы папки Debug

Рассмотрим файлы в соответствии с рис. 1.20.

hello.exe – исполняемый файл проекта;

hello.ilk – файл "incremental linker", используемый компоновщиком для ускорения процесса компоновки;

hello.pdb – отладочная информация/информация об именах в исполняемых файлах, используемая отладчиком.

Файлы папки hello показаны на рис. 1.21.


Рис. 1.21. Содержимое папки hello

Характеристика содержимого папки hello :

main.c – файл исходного программного кода,

hello.vcxproj – файл проекта,

hello.vcxproj.filters – файл с описанием фильтров, используемых Visual Studio Solution Explorer для организации и отображения файлов с исходным кодом.

Практическая часть

В практической части выполните следующие задания на основе рассмотренной программы hello :

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

Вывод выполните с помощью нескольких функций printf() (количество функций должно соответствовать каждой порции информации).

Для задания пункта 2 вывод информации выполните в различных строках подряд, т.е. без межстрочного пропуска.

Проверьте программу без ключевого слова void для функции main().

Примечание. Вывод требуемой информации осуществляется с помощью букв латинского алфавита. Комментарии в программе могут быть сделаны после символа "//" или внутри комбинации символов "/* */".

Контрольные вопросы

Какие компиляторы языка С вам известны?

Какое имя имеет исполняемый файл созданного проекта?

Объясните назначение заголовочных файлов stdio.h, conio.h .

Как будет работать программа без заголовочного файла conio.h ?

В каком месте программы находится точка ее входа?

Как осуществляется табуляция строки на консоли и на сколько позиций выполняется отступ от левого края?

Какое значение имеет главная функция проекта main() в программах на языке С ?

сообщает системе, что именем программы является main() – главная функция , и что она возвращает целое число , о чем указывает аббревиатура "int". Имя main() – это специальное имя, которое указывает, где программа должна начать выполнение [1.1]. Наличие круглых скобок после слова main() свидетельствует о том, что это имя функции . Если содержимое круглых скобок отсутствует или в них содержится служебное слово void, то это означает, что в функцию main() не передается никаких аргументов. Тело функции main() ограничено парой фигурных скобок. Все утверждения программы, заключенные в фигурные скобки , будут относиться к функции main() .

В теле функции main() имеются еще три функции. Во-первых, функции printf() находятся в библиотеке компилятора языка С, и они печатают или отображают те аргументы, которые были подставлены вместо параметров. Символ "\n" составляет единый символ newline (новая строка), т.е. с помощью этого символа осуществляется перевод на новую строку. Символ "\t" осуществляет табуляцию, т.е. начало вывода результатов программы с отступом вправо.

Функция без параметров _getch() извлекает символ из потока ввода (т.е. ожидает нажатия почти любой клавиши). С другими компиляторами, возможно, потребуется getch() , т.е. без префиксного нижнего подчеркивания.

Последнее утверждение в первой программе

указывает на то, что выполнение функции main() закончено и что в систему возвращается значение 0 ( целое число ). Нуль используется в соответствии с соглашением об индикации успешного завершения программы [1.3].

В завершение следует отметить, что все действия в программе завершаются символом точки с запятой.

Все файлы проекта сохраняются в той папке, которая сформировалась после указания в поле Location имени проекта (hello). На рис. 1.19 показаны папки и файлы проекта Visual Studio 2010..

Файлы и папки созданного проекта

На рис. 1.19 файлы с полученными расширениями означают:

hello.sln – файл решения для созданной программы. Он содержит информацию о том, какие проекты входят в данное решение. Обычно, эти проекты расположены в отдельных подкаталогах. Например, наш проект находится в подкаталоге hello;

hello.suo – файл настроек среды Visual Studio при работе с решением, включает информацию об открытых окнах, их расположении и прочих пользовательских параметрах.

hello.sdf – файл содержащий вспомогательную информацию о проекте, который используется инструментами анализа кода Visual Studio , такими как IntelliSense для отображения подсказок об именах и т.д.

Файлы папки Debug показаны на рис. 1.20.

Файлы папки Debug

Рассмотрим файлы в соответствии с рис. 1.20.

hello.exe – исполняемый файл проекта;

hello.ilk – файл " incremental linker", используемый компоновщиком для ускорения процесса компоновки;

hello.pdb – отладочная информация / информация об именах в исполняемых файлах, используемая отладчиком.

Файлы папки hello показаны на рис. 1.21.

Содержимое папки hello

Характеристика содержимого папки hello:

main.c – файл исходного программного кода,

hello.vcxproj – файл проекта,

hello.vcxproj.filters – файл с описанием фильтров, используемых Visual Studio Solution Explorer для организации и отображения файлов с исходным кодом.

Практическая часть

В практической части выполните следующие задания на основе рассмотренной программы hello:

  1. Напишите программу, которая выводила бы на консоль название факультета, где учитесь, номер группы, свою фамилию, имя и отчество в разных строках дисплея (консоли) с помощью одной функции printf() .
  2. Вывод выполните с помощью нескольких функций printf() (количество функций должно соответствовать каждой порции информации).
  3. Для задания пункта 2 вывод информации выполните в различных строках подряд, т.е. без межстрочного пропуска.
  4. Проверьте программу без ключевого слова void для функции main() .

Примечание. Вывод требуемой информации осуществляется с помощью букв латинского алфавита. Комментарии в программе могут быть сделаны после символа "//" или внутри комбинации символов "/* */".

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

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

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

В Windows наиболее распространены бинарные исполняемые файлы. Самый часто встречающийся их вид - это приложение. Приложения имеют расширения EXE и могут запускаться самостоятельно. Помимо них, существуют динамические библиотеки (их расширение - DLL), которые содержат в себе общие для разных приложений функции. Ещё есть драйверы (DRV или VXD) - специальные программы, нужные для того, чтобы система могла взаимодействовать с конкретными моделями тех или иных устройств. Исполняемые файлы (в Windows особенно) могут зависеть друг от друга: например, для запуска любого приложения нужны определённые системные динамические библиотеки, а им, в свою очередь, нужны драйверы.

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

Менеджер проектов Delphi

В этом уроке мы детально рассмотрим окно «Менеджер проектов» интегрированной среды разработки Delphi. А также узнаем какие файлы формирует Delphi IDE при создании проекта и зачем эти файлы нужны.

Откройте в Delphi проект из нашего прошлого урока, или создайте новый проект. Как это делается вы должны помнить, но если кто-то забыл, то я напомню File — New — VCL Forms Application – Delphi.

Давайте теперь посмотрим на «Менеджер проектов». И, чтобы раскрыть все ветви дерева, выберите первый элемент в менеджере проектов и нажмите <*> на дополнительной цифровой клавиатуре.

Видео по теме

Давайте подробно рассмотрим каждый пункт менеджера проектов

  1. ProjectGroup1 (Заголовок дерева) — имя группы проектов. В одной группе проектов может быть несколько приложений. Но так как у нас создано сейчас только одно приложение, то здесь оно у нас одно. Если нажать на кнопку «Add new project…», то перед нами появится окно, в котором мы можем выбрать какой новый проект добавить в эту группу.
  2. Project.exe — имя проекта (приложения). Когда мы создаем новое приложение, Delphi дает ему имя Project плюс порядковый номер 1, 2, 3 и т.д.
  3. В разделе Build Configurations (Debug) перечислены различные конфигурации сборки, которые доступны для вашего проекта. Более новые версии Delphi имеют три конфигурации сборки по умолчанию: Debug, Release и All configurations. Debug — устанавливают для отладки и тестирования. Release — это уже готовая версия. И All configurations — родительская конфигурация для всех остальных конфигураций.
    Конфигурации можно добавлять и удалять (в том числе Debug и Release). Конфигурация All configurations не удаляемая, в ней указываются общие для всех конфигураций настройки.
  4. В разделе Target Platforms (Целевые платформы) можно добавить, или удалить целевую платформу. Например, сейчас наше приложение разрабатывается под Windows 32 бит. Если мы хотим разрабатывать приложение для Windows 64 бит, то правой кнопкой мыши вызываем контекстное меню и в нем выбираем Add Platform…
  5. Unit1.pas — модуль. Проект состоит из модулей. Каждое окно программы хранится в отдельном модуле. Так как у нашего приложения есть окно, то именно оно и хранится в модуле Unit1.pas. Файлы с расширением pas содержат исходный код модуля. Имя этих файлов такое же, как и имя модуля в менеджере проектов.
  6. Unit.dfm — это визуальная форма. Она сохраняется с тем же именем, что и модуль, только с расширением dfm.

Если в вашем проекте будет несколько приложений, то только одно из них может быть активным. И только активное приложение мы можем выполнять и отлаживать в среде разработки. Имя активного приложения выделяется жирным шрифтом. Чтобы изменить активное приложение, достаточно дважды кликнуть по его имени левой кнопкой мыши. Также можно вызвать контекстное меню, кликнув по имени приложения правой кнопкой мыши и затем выбрать Activate (Активировать).

Но пока давайте будем работать только с одним приложением. Поэтому если вы создали второе приложение, то его можно удалить. Для этого выделяем имя второго приложения и нажимаем клавишу Del, или Delete (у кого какая клавиатура). В появившемся окне о подтверждении удаления нужно выбрать Yes (Да) и приложение будет удалено из группы проектов.

Но реально из диска файлы не удаляются. Они остаются на месте. Просто не отображаются в проекте. Поэтому если они вам вообще не нужны, то нужно их найти и удалить. Это если вы сохраняли проект, после того как добавили в него второе приложение. Если же вы не сохраняли проект, то соответственно файлы второго приложения и не создавались.

Теперь давайте перейдем в папку с нашим проектом и посмотрим на файлы присутствующие в ней.

  • в файлах с расширением dproj содержится конфигурация нашего проекта;
  • в файлах с расширением dpr находится сам проект;
  • в файлах с расширением res содержатся ресурсы нашего проекта: кнопки, иконки, курсоры и т.д.;
  • в файлах с расширением pas содержится исходный код модулей;
  • в файлы с расширением dfm содержится визуальная информация о форме.
  • в папке Win находится папка Debug, а в ней — файлы с расширением dcu и exe.

Файл с расширением dcu — это откомпилированный модуль проекта в промежуточном формате. Когда происходит компиляция программы, то все модули компилируются в файлы формата DCU, а потом они собираются в один файл. Если модуль не изменился с последней компиляции, то Delphi пропустит его и при сборке будет использовать уже существующий файл DCU. Так увеличивается скорость компиляции.

Ну и файл с расширением exe — это наша программа, исполняемый файл того приложения, которое мы скомпилировали в Delphi.

Файлы с расширением dfm, pas, dpr и dproj можно открыть обычным блокнотом и внести в них нужные изменения. Но это делается только в том случае если по какой-то причине эти файлы не открываются в IDE Delphi.

Вы можете заметить, что когда открываете уже существующий проект в Delphi, то можно открыть файл dpr, а можно открыть и dproj. И эффект будет одинаковым. В чем же разница?

Как я уже упоминал, файл dpr содержит исходный код Delphi (это самый важный файл), а файл dproj содержит конфигурацию проекта.

Открывая один из них, интегрированная среда разработки автоматически ищет другой.

Попробуйте удалить файл dproj и открыть (оставшийся) файл dpr — IDE Delphi сообщит вам, что будет сгенерирован новый файл dproj.

А вот файл dpr ни в коем случае не удаляйте!

Надеюсь, этот урок стал для вас полезным, и вы подпишитесь на мой канал. Также буду очень благодарным за ваши лайки и оставленные комментарии под этим видео. Канал D-Nik Webmaster.

Читайте также: