Программирование на языке С Обзор языка. Выражения и операторы.
История развития • 1970 год – создан Деннисом Ритчи для операционной системы UNIX • 1978 год – книга «Кернигана и Ритчи» • 1983 -1989 год – принятие стандарта С 89 языка С (ANSI и ISO) • 1999 год – стандарт С 99. Численные библиотеки, массивы переменной длины. • 2011 год – стандарт С 11. Многопоточность, улучшенная поддержка юникод.
Популярность
С и другие языки http: //en. wikipedia. org/wiki/List_of_C-based_programming_languages • • • С++ Objective-C Perl Java SAC Alef Limbo PHP ECMAscript NQC D LSL • • • Squierrel Go Rust S-Lang Vala Groovy Scala C# Ruby Python J# …
Область применения • Системное программирование – OS и Embedded Sys. App. • Компиляторы, интерпретаторы и библиотеки языков программирования (Python, Perl, PHP и т. д. ) • Программы, где требуется много вычислений (MATLAB, GNU Multi-Precision Library) • Open Source Software • Программирование Web-приложений через CGI
Характеристики • • • Создавался программистами для программистов Минимализм Ориентация на процедурное программирование Строгая типизация Непосредственный доступ к памяти компьютера Передача параметров «по значению» Указатели на функции и статические переменные Области видимости имен Структуры и объединения Язык «среднего уровня» Скорость, стабильность, переносимость
Проблемы Уязвимости в безопасности из-за неправильного использования элементов языка. • Обращение к несуществующему элементу массива • Указатель, может указывать на произвольное место в памяти • Утечки в памяти • Функции с переменным кол-вом аргументов • Отсутствует контроль в процессе выполнения программы
Структура программы #include … подключение_различных_библиотек void func 1(int par 1); тип_возвращаемого_значения main(список_параметров) { последовательность операторов и вызовов функций return 0; } void func 1(int par 1) { код функции func 1 }
Компиляция и компоновка Исходный код программы GCC Clang Библиотеки Quick. C Компилятор IAR Объектный код
Карта памяти программы Стек Динамически распределяемая область памяти Глобальные переменные Исполняемый код программы Используется для хранения вспомогательных переменных Свободная область памяти, для получения участков памяти с помощью спец. функций
Типы данных Базовые типы • char – 8 байт • int – 4 байта • float – 32 байта • double – 64 байта Спецификаторы • signed • unsigned • long • short
Переменные тип список_переменных; unsigned int count = 100; int a, b, c; double result; a = 1; b = 2; c = 3; result = (double)a + b + c;
Локальные переменные #include <stdio. h> int main() { int i = 100; if (i >= 100) { char i = 'a'; printf("Num in block equal %dn", i); } printf("Num in program equal %dn", i); return 0; } Num in block equal 97 Num in program equal 100
Объявление и инициализация Правильно int count = 1; int i; i = 0; Не правильно int i = int j = i; 10; j; /* ошибка */ 30;
Квалификаторы типа const - константа и не может изменять своего значения const int a = 10; void example. Function(const char* str); volatile - указывает компилятору, что значение переменной может измениться независимо от программы const volatile char *port = (const volatile char*) 0 x 30; extern - указывает компилятору, что переменные объявлены в другом месте программы static - переменные хранятся постоянно внутри своей функции или файла (чтобы не создавать каждый раз новый экземпляр)
Символические константы #define … - использование препроцессора для объявления константы #define MAX_APPLE_COUNT 10 #define MIN_APPLE_COUNT 1 int main() { int my. Apples = 5; if (my. Apples < MIN_APPLE_COUNT || my. Apples > MAX_APPLE_COUNT) { return -1; } // do something }
Арифметические операторы • • = +-/*% += -= /= *= ++ -- int x, y; x = 5; y = 2; printf("%d ", ", x / y); /* напечатает x % y); /* напечатает x--); /* напечатает 5 x + y); /* напечатает 2 */ 1 */ */ 6 */
Операторы сравнения Сравнения • >, >= • <, <= • == • != Логические • && • || • !
Поразрядные • • • &-И | - ИЛИ ^ - исключающее ИЛИ ~ - не (отрицание, дополнение к 1) >> - сдвиг вправо << - сдвиг влево 11000001 01111111 & ------01000001
Операция “? ” Выражение 1 ? Выражение 2 : Выражение 3 x = 8; y = x > 9 ? 100 : 200; То же самое, что и x = 8; if (x > 9) y = 100; else y = 200;
Условные операторы • if if (a > b) { if (a > c) return 1; if (a < c) return -1; if (a == c) return 0; } else {…} • if-else-if • switch (x) case 1: case 2: do(); default: make. Smth();
Операторы цикла • for (инициализация; условие; приращение) оператор; • while (условие) оператор; • do-while do { оператор; } while (условие);
Примеры int x; for (x = 1; x <= 100; x++) { printf("%d ", x); } WHILE int num; do { scanf("%d", &num); } while (num > 100); FOR int ch = '