Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
http.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.34 Mб
Скачать

http://www.c-cpp.ru/books/proishozhdenie-yazyka-s

http://www.c-cpp.ru/books/proishozhdenie-yazyka-s 1

Происхождение языка С 5

Язык среднего уровня 6

Структурированный язык 7

Язык программирования 8

Компиляторы против интерпретаторов 10

Вид программ на С 10

Библиотеки и компоновка 12

Раздельная компиляция 12

Карта памяти С-программы 12

Переменные, константы, операторы и выражения 13

Идентификаторы 13

Типы данных 14

Модификаторы типов 14

Модификаторы доступа 16

Объявление переменных 17

Локальные переменные 17

Формальные параметры 19

Глобальные переменные 20

Спецификаторы хранения 22

extern 22

Статические переменные 23

Статические локальные переменные 23

Статические глобальные переменные 25

Регистровые переменные 26

Оператор присваивания 27

Многочисленное присваивание 28

Преобразование типов при присваивании 28

Инициализация переменных 30

Константы 30

Символьные константы с обратным слэшем 31

Операторы 32

Арифметические операторы 32

Увеличение и уменьшение 33

Операторы отношения и логические операторы 34

Битовые операторы 36

Оператор ? 39

Операторы указания & и * 40

Оператор sizeof 42

Оператор «запятая» 43

Операторы . u -> 43

Операторы [ ] u () 44

Приоритеты в С 45

Выражения 45

Преобразование типов в выражениях 45

Принудительные преобразования 46

Пробелы и круглые скобки 47

Сокращенные операторы в С 47

Операторы управления программой 48

Истина и ложь в С 48

Операторы выбора 48

IF 49

Вложенные if 50

Лесенка if-else-if 51

Оператор ? 52

SWITCH 55

Вложенные операторы switch 58

Циклы 59

FOR 59

Вариации цикла for 60

Бесконечный цикл 63

Циклы for без тела 63

WHILE 64

DO/WHILE 66

BREAK 67

EXIT() 68

CONTINUE 70

Метки и GOTO 71

Функции 72

Оператор return 73

Выход из функции 73

Возвращаемые значения 74

Значения, возвращаемые функцией main() 76

Правила видимости для функций 76

Аргументы функции 76

Передача по значению и передача по ссылке 77

Создание передачи по ссылке 78

Передача массивов в функции 79

Аргументы функции MAIN() 83

Функции, возвращающие нецелые значения 87

Использование прототипов функции 89

Прототипы стандартных библиотечных функций 91

Создание прототипов функций, не имеющих параметров 92

Возврат указателей 93

Рекурсия 94

Сопоставление классического и современного объявления параметров 96

Указатели на функции 97

Особенности реализации 99

Параметризированные функции и функции общего назначения 99

Эффективность 100

Массивы 101

Одномерный массив 101

Создание указателя на массив 102

Передача одномерных массивов в функции 103

Строки 104

Двумерные массивы 105

Массивы строк 109

Многомерные массивы 110

Индексация с помощью указателей 111

Размещение массивов 113

Инициализация массива 116

Инициализация безразмерных массивов 118

Пример программы игры в крестики-нолики 119

Указатели 122

Указатели - это адреса 122

Переменные-указатели 123

Операторы для работы с указателями 123

Выражения с указателями 125

Присваивание указателей 125

Арифметические действия с указателями 125

Сравнение указателей 126

Динамическое выделение и указатели 128

Указатели на константы 129

Указатели на константы 130

Указатели на константы 131

Указатели и массивы 132

Указатели на символьные массивы 133

Массивы указателей 135

Указатели на указатели - многочисленное перенаправление 136

Инициализация указателей 138

Указатели на функции 139

Проблемы, связанные с указателями 141

Структуры, объединения и определяемые пользователем типы 143

Структуры 143

Доступ к членам структуры 145

Присваивание структур 146

Массивы структур 146

Программа инвентаризации 147

Передача структур в функции 152

Передача членов структур в функции 152

Передача всей структуры в функцию 153

Указатели на структуры 154

Объявление указателя на структуру 154

Использование указателей на структуру 154

Массивы и структуры в структурах 158

Битовые поля 159

Объединения 161

Перечисления 163

Использование sizeof для обеспечения переносимости 166

TYPEDEF 167

Ввод, вывод, потоки и файлы 168

Ввод/вывод С против С++ 169

Потоки и файлы 169

Потоки 169

Текстовые потоки 170

Двоичные потоки 170

Файлы 170

Консольный ввод/вывод 172

Чтение и запись символов 172

Чтение и запись строк: gets() и puts() 174

Форматированный консольный ввод/вывод 175

printf() 176

Печать символов 177

Вывод чисел 177

Вывод адресов 178

Спецификатор %n 178

Модификаторы формата 179

Спецификатор минимума ширины поля 179

Спецификатор точности 181

Выровненный вывод 181

Работа с другими типами данных 182

Модификаторы * u # 182

scanf() 183

Спецификаторы формата 183

Ввод чисел 184

Ввод беззнаковых целых 184

Чтение отдельных символов с помощью scanf() 185

Чтение строк 185

Ввод адреса 186

Спецификатор %n 186

Использование множества сканирования 186

Пропуск нежелательных специальных символов 188

Обычные символы в управляющей строке 188

В scanf() следует передавать адреса 188

Модификаторы формата 189

Подавление ввода 190

Файловая система ANSI С 190

Указатель на файл 191

Открытие файла 191

Запись символа 193

Чтение символа 194

fclose() 194

Использование fopen(), getc(), putc() и fclose() 195

Использование feof() 196

Две расширенные функции: getw() и putw() 197

Работа со строками: fgets() и fputs() 197

fread() и fwrite() 198

fseek() и произвольный доступ 200

fprintf() и fscanf() 202

Удаление файлов 205

ferror() и rewind() 206

Работа с консолью 206

Препроцессор и комментарии 207

#define 208

#error 211

#include 211

Директивы условной компиляции 212

#if, #else, #elif и #endif 212

#ifdef u #ifndef 215

#undef 216

Использование defined 216

#line 217

#pragma 217

Операторы препроцессора # и ## 221

Предопределенные макросы 222

Комментарии 224

Происхождение языка с

Деннис Ричи разработал и первым реализовал язык программирования С на DEC PDP-11 с операционной системой UNIX. Язык является результатом разработки старого языка BCPL. Мартин Ричардс разработал BCPL под влиянием созданного Кеном Томсоном языка В, который привел к разработке С в 1970 году. В течение многих лет стандартом С де-факто была версия, поставляемая для операционной системы UNIX System V. Она описана в книге Брайана Кернигана и Денниса Ричи «Язык программирования С» (Prentice-Hall, 1978). Растущая популярность компьютеров привела к созданию множества приложений для С. Казалось просто чудом, что исходные коды для различных реализаций С имеют высокую степень совместимости. Тем не менее, поскольку не существовало стандарта, были и несоответствия. Для исправления ситуации ANSI предложил летом 1983 года создать комитет по созданию ANSI-стандарта языка С. Стандарт был полностью принят в декабре 1989 года.

Язык среднего уровня

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

Таблица. Место С в мире языков

Высокий уровень

Средний уровень

Нижний уровень

Ада

 С

Ассемблер

Модула-2

С++

 

Паскаль

FORTH

 

COBOL

Макро Ассемблер

 

Фортран

 

 

Бейсик

 

 

 

Как язык среднего уровня, С позволяет манипулировать битами, байтами и адресами — основными элементами, с которыми работает компьютер. И это все несмотря на то, что код С имеет высокую степень переносимости. (Под переносимостью подразумевается возможность переноса программного обеспечения, написанного для одного типа компьютеров, на другой.) Например, если программа, написанная для Apple Macintosh, может быть легко перенесена на IBM PC, то программа является переносимой.

Языки высокого уровня поддерживают концепцию типов данных. Тип данных определяет набор значений, которые переменная может хранить, и набор операций, которые могут выполняться над переменной. Стандартными типами данных является целочисленный, символьный и вещественный. Хотя С имеет 5 основных встроенных типов данных, он не так сильно типизирован, как языки типа Паскаль или Ада. Фактически С позволяет осуществлять большинство преобразований типов. Например, символьный и целочисленный типы могут быть свободно смешаны в большинстве выражений. В противоположность языкам высокого уровня С в основном не выполняет проверку ошибок времени выполнения типа проверки выхода за границы массива. Данные проверки возлагаются на программиста.

Как было упомянуто выше, С позволяет напрямую манипулировать битами, байтами, словами и указателями. Это необходимо для Программирования на системном уровне, где такие операции наиболее типичны. Другим важным аспектом С является то, что в нем имеется только 32 ключевых слова (27 — из стандарта Кернигана и Ричи и 5 добавлено комитетом по стандартизации ANSI), являющихся командами, образующими язык С. Высокоуровневые языки, как правило, имеют несколько больше ключевых слов.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]