SlideShare a Scribd company logo
Модуль 1: Базовые понятия языка программирования С++
Темы лекции: Структура программы на языке С++.
Практическое задание: Структура программы на языке С++.
Тренер: Игорь Шкулипа, к.т.н.
C++ Базовый. Занятие 4
http://www.slideshare.net/IgorShkulipa 2
Структура программы на С++
Директивы препроцессора
Объявление глобальных переменных
Описания функций
Функция main
{
Операторы функции main
}
http://www.slideshare.net/IgorShkulipa 3
Препроцессор
Препроцессирование - это процесс, на вход которого подаётся
текст (текстовый файл) и на выходе формируется текст. Во время
работы препроцессор занимается тем, что видоизменяет исходный
текстовый файл. И только после этого изменённый текстовый файл
в дальнейшем попадает в компиляцию. Команды препроцессора (их
называют директивами) начинаются на символ #, который должен
первым непробельным символом в строке. К директивам
препроцессора, относятся директивы:
#include, #define, #undef, #if, #else, #elif, #endif, #ifdef,
#ifndef, #error, #warning, #line, #pragma
http://www.slideshare.net/IgorShkulipa 4
Директива #include
#include “имя файла”
#include <имя файла>
Если имя файла указано в кавычках, то поиск файла осуществляется в
соответствии с заданным маршрутом, либо в текущем каталоге. Если
имя файла задано в угловых скобках, то поиск файла производится в
стандартных директориях операционной системы, задаваемых
переменной окружения PATH (‘C++Directory’/include).
#include “/home/user/lab4/header.h”
#include “../header.h”
#include <header.h>
http://www.slideshare.net/IgorShkulipa 5
Заголовочные файлы
Заголовочный файл *.h содержит
заголовки функций и классов.
Пример: файл functions.h
double sum(double, double);
double mul(double, double);
double dif(double, double);
double div(double, double);
Заголовочный файл подключается в
основную программу и на этапе
компиляции этого достаточно.
На этапе сборки:
● Среда разработки сама находит
нужные файлы реализации и
подключает их.
● В сценарии сборки (make - файл)
необходимо указать все файлы.
Файл программного кода *.cpp
содержит реализации функций и
классов.
Пример: файл functions.cpp
#include “functions.h”
double sum(double a, double b)
{
return a+b;
}
double mul(double a, double b)
{
return a*b;
}
double dif(double a, double b)
{
return a-b;
}
double div(double a, double b)
{
return a/b;
}
http://www.slideshare.net/IgorShkulipa 6
Наиболее используемые заголовочные файлы
ALLOC.Н Функции динамического выделения памяти
ASSERT.H Определяет макрос assert() (ANSI С)
BIOS.H Функции ROM-BIOS
CONIO.H Функции для работы с экраном
CTYPE.H Функции для работы с символами (ANSI С)
DIR.H Функции для работы с каталогами
ERRNO.H Определяет коды ошибок (ANSI С)
FSTREAM.H Файл определений ввода/вывода (С++)
GRAPHICS.Н Графические функции
IO.Н UNIX-подобные процедуры ввода/вивода
IOMANIP.H Определяет манипуляторы ввода/вывода (С++)
IOSTREAM.H Определяет классы потоков ввода/вывода (С++)
LIMITS.Н Определяет различные, зависящие от реализации, пределы (ANSI С)
LOCALE.Н Функции, зависящие от стран и языков (ANSI С)
МАТН.Н Разные определения, используемые математической библиотекой (ANSI С)
PROCESS.H Функции spawn() и ехес()
SETJMP.H Нелокальные переходы (ANSI С)
SHARE.H Совместное использование файлов
SIGNAL.H Определяет величины сигналов (ANSI С)
STDARG.H Списки аргументов длин переменных (ANSI С)
STDDEF.H Определяет некоторые общеупотребительные константы (ANSI С)
STDIO.H Объявления для стандартных потоков ввода/вывода (ANSI С)
STDLIB.H Различные определения (ANSI С)
STRING.H Обработка строк (ANSI С)
STRSTREA.H Классы потоков ввода/вывода на базе массивов
TIME.H Функции системного времени
http://www.slideshare.net/IgorShkulipa 7
Makefile
Makefile (сценарий сборки) — это набор инструкций для программы
make, которая помогает собирать программный проект.
цель: зависимости
[tab] команда
Пример: Программа содержит несколько файлов
• main.cpp
• functions1.h
• functions2.h
• functions1.cpp
• functions2.cpp
1. g++ main.cpp functions1.cpp functions2.cpp -o main_result
2. make –f ./main_make_file
http://www.slideshare.net/IgorShkulipa 8
Содержимое main_make_file
#CC указывает компилятор, используемый для сборки
CC=g++
#CFLAGS лежат флаги, которые передаются компилятору
CFLAGS=-c
#Основная цель сборки
all: main_result
#Как получить main_result
main_result : main.o functions1.o functions2.o
$(CC) main.o functions1.o functions2.o -o main_result
#Как получить main.o
main.o: main.cpp
$(CC) $(CFLAGS) main.cpp
#Как получить functions1.o
functions1.o: functions1.cpp
$(CC) $(CFLAGS) functions1.cpp
#Как получить functions2.o
functions2.o: functions2.cpp
$(CC) $(CFLAGS) functions2.cpp
#Очистка
clean:
rm -rf *.o main_result
http://www.slideshare.net/IgorShkulipa 9
Директива #define
Директива #define определяет так называемые макросы.
Если мы определим
#define CON10 10
то в процессе работы препроцессора все вхождения сочетания
“CON10” будут в текстовом виде заменены на “10”.
Макрос для возвращения максимума двух чисел:
#define MAX(a,b) ((a>b)?(a):(b))
http://www.slideshare.net/IgorShkulipa 10
Директива #undef
Для того, чтобы отменить макрос, существует директива #undef. Как
только препроцессор встречает такую директиву, он "забывает"
определённый ранее макрос и больше не заменяет его.
#define N 20 // определяем макрос “N”
int a[N];
#undef N // здесь препроцессор “забудет” макрос "N"
void main ()
{
int N;
N++;
}
http://www.slideshare.net/IgorShkulipa 11
Директивы условной компиляции #if и #endif
#define DEBUG 1
#if DEBUG == 1
void debug_print()
{
cout<<“Debug moden”;
}
#endif
void main()
{
#if DEBUG == 1
debug_print();
#endif
...
}
http://www.slideshare.net/IgorShkulipa 12
Директивы #if, #else, #elif, #endif, #ifdef, #ifndef
#if <условие>
...
#endif
#if <условие>
...
#else
...
#endif
#if <условие>
...
#elif <условие>
...
#elif <условие>
...
#else
...
#endif
#ifdef LINUX
код для Линукс
#endif
#ifndef LINUX
код НЕ для Линукс
#endif
http://www.slideshare.net/IgorShkulipa 13
Директивы #error и #warning
#if defined LINUX
...
#elif defined WINDOWS
...
#elif defined MACOS
...
#else
#error “Unknown Operating System”
#endif
#warning работает так же, как #error,
но выдает не ошибку, а
предупреждение
http://www.slideshare.net/IgorShkulipa 14
Директива #line
Директива #line изменяет содержимое __LINE__ и __FILE__, которые являются
зарезервированными идентификаторами в компиляторе. В первом из них
содержится номер компилируемой в данный момент строки кода. А второй
идентификатор — это строка, содержащая имя компилируемого исходного
файла.
В общем виде директива #line выглядит таким образом:
#line номер "имя_файла"
где номер — это положительное целое число, которое становится новым значением
__LINE__, а необязательное имя_файла — это любой допустимый идентификатор
файла, становящийся новым значением __FILE__.
Директива #line в основном используется для отладки и специальных применений.
Например, следующий код определяет, что счетчик строк будет начинаться с 100, а
оператор printf() выводит номер 102, потому что он расположен в третьей строке
программы после оператора #line 100:
#include <stdio.h>
#line 100 // установить счетчик строк
int main(void) // строка 100
{ // строка 101
printf("%dn",__LINE__); // строка 102
return 0;
}
http://www.slideshare.net/IgorShkulipa 15
Директива #pragma
Директива #pragma — это определяемая реализацией директива,
которая позволяет передавать компилятору различные
инструкции. Например, компилятор может поддерживать
трассировку выполнения программы или создание
параллельных ветвей программы (OpenMP). Тогда эти
возможности можно указывать в директиве #pragma.
Возможности этой директивы и относящиеся к ней подробности
должны быть описаны в документации по компилятору.
15
http://www.slideshare.net/IgorShkulipa 16
Аргументы функции main()
В языке C++ заданы два встроенных аргумента функции main: argc и
argv.
void main(int argc, char *argv[])
Аргумент argv типа char - указатель на массив строк. Каждый элемент
массива указывает на аргументы командной строки. Один параметр
отделяется от другого пробелами.
⚫ argv[0] - полное имя запущенной программы
⚫ argv[1] – первый аргумент после имени программы
⚫ argv[2] – второй аргумент после имени программы
⚫ argv[argc-1] – последний аргумент после имени программы
⚫ argv[argc] - NULL
argc – количество аргументов, включая имя самой программы
16
http://www.slideshare.net/IgorShkulipa 17
Лабораторная работа №4.
Создать консольный калькулятор, который выполняет арифметические действия
над числами в:
◾ Десятичной системе исчисления
◾ Двоичной системе исчисления
◾ Шестнадцатеричной системе исчисления
◾ Восьмеричной системе исчисления
Реализовать меню для управления вычислениями.
Реализовать меню с помощью массива указателей на функции.
Реализовать функции для перевода из одной системы в другую.
Реализовать все арифметико-логические операции - + - * / % | ^ ~ & >> <<, а
так же операции извлечения квадратного корня, тригонометрические функции,
функцию факториала и макросы максимума и минимума.
Реализовать ввод чисел в формате строк (char* или string) с последующим
переводом строк в числа.
Разбить программу на логические модули и оформить каждый модуль в отдельные
.h и .cpp файлы.
Создать makefile для сборки всего проекта и собрать его с помощью утилиты make
Темы для самостоятельного изучения: Работа со строками в С++.
◾ тип char*, заголовочный файл string.h
◾ тип std::string, заголовочный файл string

More Related Content

PDF
C++ Базовый. Занятие 01.
PDF
C++ Базовый. Занятие 02.
PDF
C++ Базовый. Занятие 03.
PDF
C++ осень 2012 лекция 9
PDF
C# Desktop. Занятие 02.
PDF
C++ осень 2012 лекция 6
PDF
C# Desktop. Занятие 01.
PDF
C++ осень 2013 лекция 5
C++ Базовый. Занятие 01.
C++ Базовый. Занятие 02.
C++ Базовый. Занятие 03.
C++ осень 2012 лекция 9
C# Desktop. Занятие 02.
C++ осень 2012 лекция 6
C# Desktop. Занятие 01.
C++ осень 2013 лекция 5

What's hot (20)

PDF
C++ осень 2013 лекция 3
PDF
C# Desktop. Занятие 04.
PDF
C++ осень 2013 лекция 9
PDF
C++ осень 2013 лекция 7
PPTX
Cpp/cli types
PDF
Глава 3: примитивные типы и операции с ними в Java
PDF
C++ осень 2013 лекция 4
PDF
C++ осень 2013 лекция 2
PDF
Теория языков программирования некоторые слайды к лекциям
PDF
C++ осень 2013 лекция 8
PPTX
особенности программирования на с++
PDF
PDF
C++ осень 2013 лекция 6
PDF
JavaScript Базовый. Занятие 03.
PDF
C++ весна 2014 лекция 2
PDF
основы ооп на языке C#. часть 1. введение в программирование
PDF
Основы ооп на языке C#. Часть 2. базовый синтаксис.
PPTX
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
PPTX
Евгений Зуев, С++ в России: Стандарт языка и его реализация
PDF
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
C++ осень 2013 лекция 3
C# Desktop. Занятие 04.
C++ осень 2013 лекция 9
C++ осень 2013 лекция 7
Cpp/cli types
Глава 3: примитивные типы и операции с ними в Java
C++ осень 2013 лекция 4
C++ осень 2013 лекция 2
Теория языков программирования некоторые слайды к лекциям
C++ осень 2013 лекция 8
особенности программирования на с++
C++ осень 2013 лекция 6
JavaScript Базовый. Занятие 03.
C++ весна 2014 лекция 2
основы ооп на языке C#. часть 1. введение в программирование
Основы ооп на языке C#. Часть 2. базовый синтаксис.
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
Евгений Зуев, С++ в России: Стандарт языка и его реализация
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Ad

Viewers also liked (20)

PDF
C# Web. Занятие 02.
PDF
Vijay Bhosekar_ Research Article_ Frontiers in Plant Science
DOCX
Capitulo IV análisis de resultados
PDF
JavaScript Базовый. Занятие 11.
PDF
C# Desktop. Занятие 03.
PPTX
Production diary 2
PPTX
Energías limpias
PDF
C# Web. Занятие 15.
PPTX
Production diary 7
PPTX
Production diary 3
DOC
σχέδιο προσέγγισης λογοτεχνικού κειμένου
PDF
Brochure – Massey University Business School
PPTX
Laura mulvey’s male gaze theory
PPTX
MME 2016
PDF
Catalog AdPro
PDF
Happily_Disconnected
PDF
Bollywood Movie Poster
PDF
Vijay Bhosekar_ Published Article_ Organic Agriculture
C# Web. Занятие 02.
Vijay Bhosekar_ Research Article_ Frontiers in Plant Science
Capitulo IV análisis de resultados
JavaScript Базовый. Занятие 11.
C# Desktop. Занятие 03.
Production diary 2
Energías limpias
C# Web. Занятие 15.
Production diary 7
Production diary 3
σχέδιο προσέγγισης λογοτεχνικού κειμένου
Brochure – Massey University Business School
Laura mulvey’s male gaze theory
MME 2016
Catalog AdPro
Happily_Disconnected
Bollywood Movie Poster
Vijay Bhosekar_ Published Article_ Organic Agriculture
Ad

Similar to C++ Базовый. Занятие 04. (20)

DOCX
C++ теория
DOCX
C++ теория
DOCX
C++ теория
PDF
REPL в Node.js: улучшаем быт разработчик
PDF
Как мы делаем модули PHP в Badoo – Антон Довгаль
PPTX
20090720 hpc exercise1
PPT
Cтиль программирования
PDF
Компьютерная графика. Введение в Processing
PPTX
Программирование как способ выражения мыслей.
PPT
лекции спрг 6_семестр (1)
PPT
язык програмирования
PPTX
Принципы работы статического анализатора кода PVS-Studio
PDF
C# Desktop. Занятие 16.
PDF
Инструментируй это
PDF
C++ Базовый. Занятие 15.
PPTX
Функциональное программирование для разработки распределённых, облачных и веб...
ODP
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
PDF
лек13 4
PPT
The basic design of the PHP language
PDF
Machine learning c использованием нейронных сетей, Дмитрий Лапин
C++ теория
C++ теория
C++ теория
REPL в Node.js: улучшаем быт разработчик
Как мы делаем модули PHP в Badoo – Антон Довгаль
20090720 hpc exercise1
Cтиль программирования
Компьютерная графика. Введение в Processing
Программирование как способ выражения мыслей.
лекции спрг 6_семестр (1)
язык програмирования
Принципы работы статического анализатора кода PVS-Studio
C# Desktop. Занятие 16.
Инструментируй это
C++ Базовый. Занятие 15.
Функциональное программирование для разработки распределённых, облачных и веб...
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
лек13 4
The basic design of the PHP language
Machine learning c использованием нейронных сетей, Дмитрий Лапин

More from Igor Shkulipa (20)

PDF
Общие темы. Тема 03.
PDF
Общие темы. Тема 02.
PDF
Общие темы. Тема 01.
PDF
JavaScript Базовый. Занятие 06.
PDF
JavaScript Базовый. Занятие 09.
PDF
JavaScript Базовый. Занятие 10.
PDF
JavaScript Базовый. Занятие 05.
PDF
JavaScript Базовый. Занятие 08.
PDF
JavaScript Базовый. Занятие 07.
PDF
JavaScript Базовый. Занятие 01.
PDF
JavaScript Базовый. Занятие 04.
PDF
JavaScript Базовый. Занятие 02.
PDF
C# Web. Занятие 09.
PDF
C# Web. Занятие 08.
PDF
C# Web. Занятие 07.
PDF
C# Web. Занятие 04.
PDF
C# Web. Занятие 12.
PDF
C# Web. Занятие 16.
PDF
C# Web. Занятие 14.
PDF
C# Web. Занятие 13.
Общие темы. Тема 03.
Общие темы. Тема 02.
Общие темы. Тема 01.
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 02.
C# Web. Занятие 09.
C# Web. Занятие 08.
C# Web. Занятие 07.
C# Web. Занятие 04.
C# Web. Занятие 12.
C# Web. Занятие 16.
C# Web. Занятие 14.
C# Web. Занятие 13.

C++ Базовый. Занятие 04.

  • 1. Модуль 1: Базовые понятия языка программирования С++ Темы лекции: Структура программы на языке С++. Практическое задание: Структура программы на языке С++. Тренер: Игорь Шкулипа, к.т.н. C++ Базовый. Занятие 4
  • 2. http://www.slideshare.net/IgorShkulipa 2 Структура программы на С++ Директивы препроцессора Объявление глобальных переменных Описания функций Функция main { Операторы функции main }
  • 3. http://www.slideshare.net/IgorShkulipa 3 Препроцессор Препроцессирование - это процесс, на вход которого подаётся текст (текстовый файл) и на выходе формируется текст. Во время работы препроцессор занимается тем, что видоизменяет исходный текстовый файл. И только после этого изменённый текстовый файл в дальнейшем попадает в компиляцию. Команды препроцессора (их называют директивами) начинаются на символ #, который должен первым непробельным символом в строке. К директивам препроцессора, относятся директивы: #include, #define, #undef, #if, #else, #elif, #endif, #ifdef, #ifndef, #error, #warning, #line, #pragma
  • 4. http://www.slideshare.net/IgorShkulipa 4 Директива #include #include “имя файла” #include <имя файла> Если имя файла указано в кавычках, то поиск файла осуществляется в соответствии с заданным маршрутом, либо в текущем каталоге. Если имя файла задано в угловых скобках, то поиск файла производится в стандартных директориях операционной системы, задаваемых переменной окружения PATH (‘C++Directory’/include). #include “/home/user/lab4/header.h” #include “../header.h” #include <header.h>
  • 5. http://www.slideshare.net/IgorShkulipa 5 Заголовочные файлы Заголовочный файл *.h содержит заголовки функций и классов. Пример: файл functions.h double sum(double, double); double mul(double, double); double dif(double, double); double div(double, double); Заголовочный файл подключается в основную программу и на этапе компиляции этого достаточно. На этапе сборки: ● Среда разработки сама находит нужные файлы реализации и подключает их. ● В сценарии сборки (make - файл) необходимо указать все файлы. Файл программного кода *.cpp содержит реализации функций и классов. Пример: файл functions.cpp #include “functions.h” double sum(double a, double b) { return a+b; } double mul(double a, double b) { return a*b; } double dif(double a, double b) { return a-b; } double div(double a, double b) { return a/b; }
  • 6. http://www.slideshare.net/IgorShkulipa 6 Наиболее используемые заголовочные файлы ALLOC.Н Функции динамического выделения памяти ASSERT.H Определяет макрос assert() (ANSI С) BIOS.H Функции ROM-BIOS CONIO.H Функции для работы с экраном CTYPE.H Функции для работы с символами (ANSI С) DIR.H Функции для работы с каталогами ERRNO.H Определяет коды ошибок (ANSI С) FSTREAM.H Файл определений ввода/вывода (С++) GRAPHICS.Н Графические функции IO.Н UNIX-подобные процедуры ввода/вивода IOMANIP.H Определяет манипуляторы ввода/вывода (С++) IOSTREAM.H Определяет классы потоков ввода/вывода (С++) LIMITS.Н Определяет различные, зависящие от реализации, пределы (ANSI С) LOCALE.Н Функции, зависящие от стран и языков (ANSI С) МАТН.Н Разные определения, используемые математической библиотекой (ANSI С) PROCESS.H Функции spawn() и ехес() SETJMP.H Нелокальные переходы (ANSI С) SHARE.H Совместное использование файлов SIGNAL.H Определяет величины сигналов (ANSI С) STDARG.H Списки аргументов длин переменных (ANSI С) STDDEF.H Определяет некоторые общеупотребительные константы (ANSI С) STDIO.H Объявления для стандартных потоков ввода/вывода (ANSI С) STDLIB.H Различные определения (ANSI С) STRING.H Обработка строк (ANSI С) STRSTREA.H Классы потоков ввода/вывода на базе массивов TIME.H Функции системного времени
  • 7. http://www.slideshare.net/IgorShkulipa 7 Makefile Makefile (сценарий сборки) — это набор инструкций для программы make, которая помогает собирать программный проект. цель: зависимости [tab] команда Пример: Программа содержит несколько файлов • main.cpp • functions1.h • functions2.h • functions1.cpp • functions2.cpp 1. g++ main.cpp functions1.cpp functions2.cpp -o main_result 2. make –f ./main_make_file
  • 8. http://www.slideshare.net/IgorShkulipa 8 Содержимое main_make_file #CC указывает компилятор, используемый для сборки CC=g++ #CFLAGS лежат флаги, которые передаются компилятору CFLAGS=-c #Основная цель сборки all: main_result #Как получить main_result main_result : main.o functions1.o functions2.o $(CC) main.o functions1.o functions2.o -o main_result #Как получить main.o main.o: main.cpp $(CC) $(CFLAGS) main.cpp #Как получить functions1.o functions1.o: functions1.cpp $(CC) $(CFLAGS) functions1.cpp #Как получить functions2.o functions2.o: functions2.cpp $(CC) $(CFLAGS) functions2.cpp #Очистка clean: rm -rf *.o main_result
  • 9. http://www.slideshare.net/IgorShkulipa 9 Директива #define Директива #define определяет так называемые макросы. Если мы определим #define CON10 10 то в процессе работы препроцессора все вхождения сочетания “CON10” будут в текстовом виде заменены на “10”. Макрос для возвращения максимума двух чисел: #define MAX(a,b) ((a>b)?(a):(b))
  • 10. http://www.slideshare.net/IgorShkulipa 10 Директива #undef Для того, чтобы отменить макрос, существует директива #undef. Как только препроцессор встречает такую директиву, он "забывает" определённый ранее макрос и больше не заменяет его. #define N 20 // определяем макрос “N” int a[N]; #undef N // здесь препроцессор “забудет” макрос "N" void main () { int N; N++; }
  • 11. http://www.slideshare.net/IgorShkulipa 11 Директивы условной компиляции #if и #endif #define DEBUG 1 #if DEBUG == 1 void debug_print() { cout<<“Debug moden”; } #endif void main() { #if DEBUG == 1 debug_print(); #endif ... }
  • 12. http://www.slideshare.net/IgorShkulipa 12 Директивы #if, #else, #elif, #endif, #ifdef, #ifndef #if <условие> ... #endif #if <условие> ... #else ... #endif #if <условие> ... #elif <условие> ... #elif <условие> ... #else ... #endif #ifdef LINUX код для Линукс #endif #ifndef LINUX код НЕ для Линукс #endif
  • 13. http://www.slideshare.net/IgorShkulipa 13 Директивы #error и #warning #if defined LINUX ... #elif defined WINDOWS ... #elif defined MACOS ... #else #error “Unknown Operating System” #endif #warning работает так же, как #error, но выдает не ошибку, а предупреждение
  • 14. http://www.slideshare.net/IgorShkulipa 14 Директива #line Директива #line изменяет содержимое __LINE__ и __FILE__, которые являются зарезервированными идентификаторами в компиляторе. В первом из них содержится номер компилируемой в данный момент строки кода. А второй идентификатор — это строка, содержащая имя компилируемого исходного файла. В общем виде директива #line выглядит таким образом: #line номер "имя_файла" где номер — это положительное целое число, которое становится новым значением __LINE__, а необязательное имя_файла — это любой допустимый идентификатор файла, становящийся новым значением __FILE__. Директива #line в основном используется для отладки и специальных применений. Например, следующий код определяет, что счетчик строк будет начинаться с 100, а оператор printf() выводит номер 102, потому что он расположен в третьей строке программы после оператора #line 100: #include <stdio.h> #line 100 // установить счетчик строк int main(void) // строка 100 { // строка 101 printf("%dn",__LINE__); // строка 102 return 0; }
  • 15. http://www.slideshare.net/IgorShkulipa 15 Директива #pragma Директива #pragma — это определяемая реализацией директива, которая позволяет передавать компилятору различные инструкции. Например, компилятор может поддерживать трассировку выполнения программы или создание параллельных ветвей программы (OpenMP). Тогда эти возможности можно указывать в директиве #pragma. Возможности этой директивы и относящиеся к ней подробности должны быть описаны в документации по компилятору. 15
  • 16. http://www.slideshare.net/IgorShkulipa 16 Аргументы функции main() В языке C++ заданы два встроенных аргумента функции main: argc и argv. void main(int argc, char *argv[]) Аргумент argv типа char - указатель на массив строк. Каждый элемент массива указывает на аргументы командной строки. Один параметр отделяется от другого пробелами. ⚫ argv[0] - полное имя запущенной программы ⚫ argv[1] – первый аргумент после имени программы ⚫ argv[2] – второй аргумент после имени программы ⚫ argv[argc-1] – последний аргумент после имени программы ⚫ argv[argc] - NULL argc – количество аргументов, включая имя самой программы 16
  • 17. http://www.slideshare.net/IgorShkulipa 17 Лабораторная работа №4. Создать консольный калькулятор, который выполняет арифметические действия над числами в: ◾ Десятичной системе исчисления ◾ Двоичной системе исчисления ◾ Шестнадцатеричной системе исчисления ◾ Восьмеричной системе исчисления Реализовать меню для управления вычислениями. Реализовать меню с помощью массива указателей на функции. Реализовать функции для перевода из одной системы в другую. Реализовать все арифметико-логические операции - + - * / % | ^ ~ & >> <<, а так же операции извлечения квадратного корня, тригонометрические функции, функцию факториала и макросы максимума и минимума. Реализовать ввод чисел в формате строк (char* или string) с последующим переводом строк в числа. Разбить программу на логические модули и оформить каждый модуль в отдельные .h и .cpp файлы. Создать makefile для сборки всего проекта и собрать его с помощью утилиты make Темы для самостоятельного изучения: Работа со строками в С++. ◾ тип char*, заголовочный файл string.h ◾ тип std::string, заголовочный файл string