В многопрограммной среде, если вы хотите превратить исходный код пользователя в программу, которая может выполняться в памяти, ее обычно можно разделить на три этапа: компиляция, компоновка и загрузка.
- Компилировать
предварительно обработает сгенерированные файлы и передастЛексический анализ, грамматический анализ, семантический анализ и оптимизацияПосле компиляции в несколько целевых модулей. Его можно понимать как машинный язык, который переводит язык высокого уровня в двоичный код. Он компилируется в файл .obj под Windows и в файл .o под Linux. - ссылка на сайт
Компоновщик связывает скомпилированный набор целевых модулей и библиотечные функции, необходимые им для формирования полной модели загрузки.Ссылки в основном решают проблему взаимных ссылок, Разделен наРаспределение адресов и пространства, разрешение символов и перемещениеНесколько шагов. Когда объектный файл создается на этапе компиляции, эти внешние ссылки временно приостанавливаются, и эти внешние ссылки определяются во время компоновки. При связывании компоновщик найдет соответствующий символ в соответствующем модуле по имени символа. После определения символа компоновщик перезапишет ранее неопределенный адрес символа.Этот процесс называется перемещением. Ссылки обычно делятся на три типа: статическое связывание, динамическое связывание во время загрузки и динамическое связывание во время выполнения. - Загрузка
Программа загрузки загружает модуль загрузки в память.
Видео #2. Принцип хранения информации на жестком диске
Компиляция и компоновка служат для переноса пользовательских программ с жесткого диска в память и преобразования их в исполняемые программы. При компиляции компилятору нужен правильный синтаксис и правильное объявление функций и переменных. Вообще говоря, каждый исходный файл должен соответствовать промежуточному целевому файлу. При связывании в основном используются функции связывания и глобальные переменные, поэтому эти промежуточные объектные файлы могут использоваться для связывания приложений. Связывание — это функция и глобальная переменная, которые целевой файл должен связывать друг с другом, и функция может происходить из других целевых файлов или файлов библиотеки.
2. В чем разница между компилируемым языком и интерпретируемым языком?
- Скомпилированный язык
Скомпилированный язык означает, что перед выполнением исходной программы приложения исходный код программы «транслируется» в целевой код («машинный язык») и сохраняется в другом файле, поэтому целевая программа можно разделить Языковая среда выполняется независимо много раз, что удобнее и эффективнее. Однако, как только приложение необходимо изменить, сначала необходимо изменить исходный код.Если в целевом файле нет исходного кода, изменение очень затруднено. Большинство программных продуктов выпускается для пользователей в виде целевых программ, которые могут не только запускаться напрямую, но и затруднять кражу технологии другими. C / C ++ / Fortran / Visual Foxpro / Psacal / Delphi — все это скомпилированные языки. - Интерпретируемый язык
Интерпретируемые языки существуют относительно скомпилированных языков. Исходный код не транслируется напрямую на машинный язык, а сначала транслируется в промежуточный код, а затем промежуточный код интерпретируется и запускается интерпретатором. . Задача интерпретатора состоит в том, чтобы интерпретировать операторы исходной программы в исполняемые машинные инструкции один за другим. Его не нужно компилировать и связывать в объектный код перед выполнением. Когда оператор имеет синтаксическую ошибку, интерпретатор может немедленно нарисовать внимание программиста Исправление на этапе разработки. Каждый оператор транслируется только при его выполнении, а интерпретатор переводится один раз при каждом его выполнении, поэтому он неэффективен и зависит от интерпретатора, но является кроссплатформенным. Python / JavaScript / Perl / Shell и т. Д. Являются интерпретируемыми языками.
Этапы компиляции на Си: предобработка, трансляция, компоновка
Java — это особый вид языка программирования, и его программа также должна быть скомпилирована, но она не компилируется напрямую, называемая машинным языком, а компилируется в байт-код, а затем байт-код выполняется интерпретируемым образом на виртуальной машине Java.
3. Как определить, на C или на C ++ скомпилирована программа?
Если компилятор компилирует файл cpp, то пользовательский макрос _cpluslus Будет определено, если файл c скомпилирован, то _STDC_ Будет определено. _STDC_ Это предопределенный макрос.Когда он определен, компилятор скомпилирует программу на языке C в соответствии со стандартом ANSIC.
C и C ++ компилируются по-разному. Для написания кода, совместимого с C / C ++, требуется следующий формат:
#ifdef _cplusplus extern «C»< #endif //code #ifdef _cplusplus >; #endif
4. Какова роль внешнего «C»?
C ++ — это объектно-ориентированный язык, поддерживающий перегрузку функций, а язык C — это процедурный язык, который не поддерживает перегрузку функций, поэтому имя функции в библиотеке после компиляции с помощью C ++ отличается от имени языка C. Если вы объявите float f(int a, char b) , В языке C обычно используются похожие _f Внутреннее имя, и C ++ связывает в нем параметры, внутреннее имя аналогично _f_int_char . Следовательно, компоновщик не может интерпретировать вызов программы C ++ функции языка C f.
C ++ предоставляет язык C для замены символа описания соединения extern «C» Чтобы решить проблему сопоставления имен, этот оператор используется перед функцией: extern «C» float f(int a, char b) , Его цель — сообщить компилятору f() Он связан через C, нет необходимости преобразовывать имя функции в способ C ++, чтобы его можно было правильно связать с f() Функция сейчас.
Источник: russianblogs.com
3. Сохранение текста программы в файле на диске.
- выполните команду меню FileSaveas.
- в диалоговом окне введите полное имя файла, например, D:prim1p(расширение.pasприсваивается по умолчанию)
- сделайте щелчок на кн. ОКили нажмитекл.Enter.
После закрытия диалогового окна имя файла появится в заголовке окна документа. Вид окна программы с сохраненным текстом программы представлен на рис.3. Рис.3. Окно системы ТРWвместе с сохраненным текстом программы Варианта1.
4. Компиляция и компоновка программы.
Назначение компилятора: 1) проверка текста программы на наличие синтаксических ошибок; 2) в случае отсутствия ошибок перевод исходного текста программы с языка Pascal на язык машинных кодов, т.е. создание объектного кода программы. Назначение компоновщика: 1) подключение к объектному коду программы объектных кодов внешних программных модулей (библиотек процедур и функций); 2) создание загрузочного кода программы (имя файла с расширением exe). Задание 4. Откомпилируйте программуPrim1p. Для этого:
- установите текущий каталог D:, чтобы загрузочный файл сохранился там же, где находится исходный файл, для этого:
- выполните команду меню OptionsDirectories…
- в поле EXEandTPUDirectoriesвведите с клавиатурыD:
( если в программе имеются ошибки, то строка с первой ошибкой закрашивается черным цветом, место ошибки отмечается курсором, сообщение об ошибке появляется в статусной строке окна программы);
- исправьте ошибки и повторите компиляцию и так до тех пор, пока не появится диалоговое окно с сообщением Successfullycompleted (компиляция завершена):
- сохраните исправленный текст программы (команда меню FileSave).
Замечание. КомандаCompile выполняет две функции – компилятора и компоновщика. В результате сформируется программный файл (в нашем случаеPrim1p.exe).
- проверьте местонахождение загрузочного файла.
4. Выполнение программы.
Задание5. Выполните программуPrim1p. Для этого:
- выполните команду меню RunRun или нажмите клавишиCtrl+F9 (появится окно с результатами выполнения, см. рис.4.).
- запишите результат и закройте окно выполнения.
Рис.4. Результат выполнения программы Варианта1.
7. Создание и выполнение новой версии программы.
Задание6. Создайте и выполните программу Варианта2. Для этого:
- создайте новое окнодокумента в окне ТРW(команда менюFileNew);
- скопируйте текст программы Prim1p.pasв новое окно, для этого:
— активизируйте окно с файлом Prim1p.pas(кл.F6) — выделите весь текст и скопируйте его в Буфер обмена (команда EditCopy) — активизируйте новое окно (кл.F6) — вставьте текст из Буфера обмена (команда EditPaste)
- в новом окне измените текст программы в соответствии с Вариантом2
- сохраните текст программы в своей папке в файле с именем Prim2p.pas( команда менюFileSave as…) (см. рис.5 )
Рис.5. Окно системы ТРWвместе с сохраненным текстом программы Варианта2.
- откомпилируйте программу Prim2pдо успешного завершения;
- зафиксируйте правильный текст программы (команда FileSave);
- выполните программу Prim2p(командаRunRunили клавишиCtrl+F9). Автоматически появитсяокно выполнения программыс приглашением к вводу значения радиуса круга (рис.6.);
Рис.6. Окно выполнения с приглашением ввода радиуса
- в ответ на это приглашение наберите с клавиатуры число 1.5и нажмитекл.Enter(в окне выполнения появится результат, см. рис.7);
- запишите результат в тетрадь;
- для продолжения работы закройте окно выполнения.
Рис.7. Окно выполнения с результатами работы программы Варианта2. Задание7. Закройте все окна на рабочем столе.Задание8. Откройте программу Проводник и свою папку. Убедитесь в наличие исходных и программных файлов для каждого варианта.Задание9. Из окна Проводника запустите программный файл для Варианта1, затем для Варианта2. (Обратите внимание, что каждая программа выполняется в отдельном окне). Не закрывайте окна!Задание10. Запустите системуTurboРascalи откройте исходные файлы для Варианта1, затем для Варианта2 (команда менюFileOpen).Задание11. В окнеTurboРascalрасположите окна мозаикой (командаWindowTyle).Задание13. На Рабочем столе расположите каскадом все открытые окна.Предъявите результаты работы преподавателю – окно Проводника, окно ТРW, два окна выполнения программ.Часть2. Программирование в системеMSVISUAL C++6.0Структура программы на языке С++
- Программа на языке С++ состоит из директив препроцессора, описания глобальных объектов, функций написанных программистом и функции main() :
директивы препроцессора описания глобальных объектов функции, написанные программистом voidmain()операторы функции main >Директивы препроцессоравключают в себя необходимые заголовочные файлы библиотек С++, определения констант, типов и макроопределений, используемых в программе. Глобальные объекты– константы, типы, переменные используются во всех функциях программы, обеспечивая соответствие типов, значений констант и переменных во всей программе. Функции– это особым образом оформленные части программы, которая выполняют действия необходимые программисту. Функция main()- главная функция программы. Любая программа на С++ обязательно включает в себя функцию main(), с которой и начинает свое выполнение. Функция main() запускается операционной системой. Слово void перед именем функции main() означает, что функция main() не возвращает операционной системе никакой информации. Тело функциизаключено в фигурные скобки ‘ ’ . Фигурные скобки ‘ < >’ обозначают начало и конец составного оператора (аналогичноbeginиendвTurboPascal). Точка с запятой ‘ ; ‘ завершает каждый оператор и каждое описание. Программа может содержать комментарии, их можно вставлять в любое место программы, где допускаются пробелы или в конце строки. В С++ используются два вида комментариев: /* многострочный комментарий */ // однострочный комментарий до конца текущей строки Примеры программ на языке С++ Рассмотрим два примера программ соответственно двум вариантам схемы алгоритма (рис. 1). Пример 1.Программа вычисления площади круга (по схеме алгоритма Варианта1) ( значение радиуса задается оператором присваивания) /* Вариант1: Вычисление площади круга */ #include //директива препроцессора для подключения стандартной библиотеки // ввода — вывода voidmain()// заголовок функцииmain() constfloatPi=3.14; // определение вещественной константыPiравной 3.14 floatR,S; // оператор описания вещественных переменныхRиS R=1.5; // оператор присваивания переменнойRзначения 1.5 S=Pi*R*R; // оператор присваиванияSвычисленного значения printf(“S=%fn”,S); // оператор вывода на экран значенияS >Пояснения к программе
- Первая строка – комментарий, который заключается в символы: /* комментарий */
Комментарии могут располагаться как вне, так и внутри программ. В комментариях разрешается указывать все символы клавиатуры.
- Следующая директива препроцессора #include подключает к программе стандартную библиотеку ввода-вывода. Директивы препроцессора располагаются строго на одной строке и начинаются с символа ‘#’.
- Далее идет заголовок функции main(): отсутствие параметров в круглых скобках означает, что функция main() не возвращает никаких значений операционной системе и не получает от нее никакой информации. В теле функции внутри фигурных скобок:
- Объявление и задание константы Pi .
- Оператор описаний — float R,S резервирует ячейки оперативной памяти под переменные – R (радиус круга) и S (площадь круга).
- Два оператора присваивания:
— задание переменной Rзначения 1.5; — вычисление площади круга S(операция присваивания имеет вид “=”).
- Оператор вывода значения Sи соответствующих пояснений на экран
printf(“S=%fn”,S); Для вывода действительной переменной Sуказывается форматная спецификация — %f- соответствующая выводу вещественного значения с фиксированной точкой. Управляющий символ ‘n’ используется для перевода курсора на начало следующей строки экрана. Пример 2.Программа вычисления площади круга (по схеме алгоритма Варианта2) ( ввод значения радиуса с клавиатуры) /* Вариант2: Вычисление площади круга */ #include void main() const float Pi=3.14; float R,S; printf(“R= “); //оператор вывода текста приглашения к вводу значения радиуса scanf(%f”. // оператор ввода с клавиатуры значения переменнойR S=Pi*R*R; printf(“S=%fn”,S); >Пояснения к программе: 1. Эта программа отличается от предыдущей только тем, что значение радиуса Rвводится с клавиатуры, а не присваивается в операторе присваивания. Операторыprintfиscanfиспользуются для организации диалога пользователя с компьютером: — оператор printf(“R= “)выводит на экран текст:R= — оператор scanf(“%f”, (амперсанд) используется для того, чтобы введенное значение было записано по адресу переменнойR. 2. Все остальные части программы работают так же, как и в предыдущей программе. Реализация программы в системеMicrosoftVISUALC++6.0 CистемаMicrosoftVISUALC++6.0 (MVC++)включает в себя: — встроенный редактор текста; — компилятор с языка С++; — компоновщик; — загрузчик — отладчик. CистемаMVC++ хранится на жестком диске в общей папкеMSVisualStudio и занимает около 50 Мб на диске. Загрузочный файл системы MVC++ имеет имяMSDEV.exe
Источник: studfile.net
Вопрос № 395207 — Информатика
Если размер кластера на жестком диске 512 байт, а размер файла 864 байт, то на диске под него будет отведено (то есть недоступно для других файлов) _______ кластер(а).
Другие вопросы по предмету Информатика
Вопрос № 395208
Машинно-зависимый язык низкого уровня, в котором мнемонические имена соответствуют отдельным машинным командам – это …
естественный язык
Visual Basic
язык ассемблера
Вопрос № 395209
Языками программирования 1-го поколения являлись …
алгоритмические языки
естественные языки
проблемно-ориентированные языки
машинные языки конкретного компьютера
Вопрос № 395213
Понятия «отношение, атрибут» относятся к основным понятиям ________ модели данных.
иерархической
реляционной
Вопрос № 395216
При формировании запроса в СУБД Access Построитель выражений, окно которого приведено на рисунке, использовался .
Источник: testna5.ru