Файл: Pobegaylo_A._C_Cplus_dlya_studenta.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 13.12.2020

Просмотров: 4255

Скачиваний: 28

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

Часть I. Язык программирования С 

96 

переменной  в  оперативной  памяти.  Поэтому  спецификатор 

register

 редко используется на практике. 

В  листинге  7.6  приведен  пример  использования  спецификатора 

register

Листинг 7.6. Пример использования спецификатора 

register

 

#include <stdio.h> 
int n; 
int main(void) 

  register int i; 
 
  for (i = 0; i < 5; ++i) 
    ++n; 
  printf("n = %d\n", n); /* печатает n = 5 */ 
 
  return 0; 

7.5. Структура программы 

Программа  на  языке  программирования  C  состоит  из  определе-
ний  переменных  и функций,  которые размещаются  в  одном  или 
нескольких  текстовых  файлах.  Как  уже  говорилось  в 

разд.  7.3

такие  файлы  называются 

исходными  файлами

  или 

единицами 

компиляции

. Если в исходном файле используются функции или 

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

extern

Подготовка  исполняемого  файла  программы  осуществляется  в 
два  этапа.  Сначала  компилируются  все  исходные  файлы  про-
граммы.  Результатом  компиляции  исходных  файлов  являются 

объектные файлы

, которые содержат исполняемый код програм-

мы,  но  в  которых  не  разрешены  ссылки  на  переменные  и  функ-
ции, определенные в других объектных файлах. Если компиляция 


background image

Глава 7. Структура программы на языке С 

97 

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

компоновщик

 

или 

редактор связей

  (linker).  Эта  программа  разрешает  внешние 

ссылки и создает исполняемый файл. 
Исполняемая  программа  на  языке  C  имеет  структуру,  которая 
показана на рис. 7.1. То есть исполняемая программа представля-
ет собой непрерывный блок памяти, который состоит из четырех 
частей: 

 

программный код; 

 

глобальные переменные; 

 

куча; 

 

стек. 

 

Рис. 7.1. 

Структура программы 

Стек  предназначен  для  хранения  адресов  возврата  из  функций, 
значения  аргументов  функций  и  локальных  переменных.  Куча 
предназначена для динамического выделения памяти программе. 
Размеры стека и кучи задаются при вызове программы. Значения 
этих величин, заданные по умолчанию, зависят от операционной 
системы. Также отметим, что стек и куча растут  навстречу друг 
другу. 

7.6. Функция 

main

 

Каждая программа на языке C должна содержать одну функцию с 
именем 

main

. При вызове программы средой исполнения или опе-

рационной  системой  управление  передается  этой  функции. 
Функция 

main

 имеет один из следующих прототипов: 


background image

Часть I. Язык программирования С 

98 

  int main(void); 
  int main(int argc, char **argv, char **envp); 
  int main(); 

Во  втором  случае  операционная  система  передает  функции 

main

 

три параметра 

argc

argv

 и 

envp

. Первые два параметра являются 

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

main

 имеют следующее назначение: 

 

argc

 — определяет количество элементов в массиве 

argv

 

argv

 — указатель на массив указателей на строки, которые пе-

редаются программе при ее вызове; 

 

envp

 —  указатель  на  массив  указателей  на  строки,  которые 

описывают  среду  исполнения  программы,  последняя  строка 
в массиве имеет нулевую длину. 

Если в среде исполнения доступно имя программы, то указатель 
на строку с именем программы хранится первым в массиве указа-
телей, на который указывает параметр 

argv

. Если имя программы 

недоступно, то первый элемент этого массива указывает на пус-
тую строку. 
Параметры  исполняемой  программе  передаются  при  ее  запуске. 
Способ  запуска  программы  зависит  от  операционной  системы. 
Например, при запуске исполняемого файла из командной строки 
аргументы функции 

main

 записываются после имени программы. 

В листинге 7.7 приведен текст функции 

main

, которая распечаты-

вает свои параметры. 

Листинг 7.7. Печать параметров функции 

main

 

#include <stdio.h> 
int main(int argc, char *argv[], char *argp[]) 

  int i; 
 
  printf("Program name: %s\n", argv[0]); 
  for (i = 1; i < argc; ++i) 
    printf("argument %d: %s\n", i, argv[i]); 


background image

Глава 7. Структура программы на языке С 

99 

  printf("Environment:\n"); 
  while(*argp) 
    puts(*argp++); 
 
  return 0; 

В языке программирования C спецификатор класса памяти 

static

 

при определении функции 

main

 игнорируется. 

В языке программирования C++ на функцию 

main

 накладываются 

следующие ограничения: 

 

нельзя получить адрес функции 

main

 

нельзя вызвать функцию 

main

 внутри программы; 

 

нельзя объявить 

main

, как статическую функцию. 

 

нельзя объявить функцию 

main

 как встроенную; 

 

функцию 

main

 нельзя перегрузить. 

По  соглашению  в  случае  успешного  завершения  функция 

main

 

должна  вернуть  нулевое  значение,  а  в  противном  случае —  код 
ошибки. 

 


background image

  

 
 

Г Л А В А  

 
 
 

Типы данных, определяемые 

программистом 

8.1. Введение 

При разработке программ могут потребоваться типы данных, от-
личные  от  типов  данных,  встроенных  в  язык  программирова- 
ния С. Введение новых типов данных преследует три цели: 

 

ограничить множество значений существующего интегрально-
го типа данных; 

 

определить  тип,  который  описывает  данные,  имеющие  слож-
ную структуру; 

 

переименовать  тип  данных,  чтобы  придать  ему  более  осмыс-
ленное имя. 

В первом случае используются перечисления, которые содержат 
только необходимые элементы из базового интегрального типа. 
Во втором случае используются структурные или составные типы 
данных. В языке программирования C программист может конст-
руировать структурные типы данных, используя такие конструк-
ции, как 

структуры

 и 

объединения

В третьем случае используется определение 

typedef

Все эти подходы к конструированию и определению новых типов 
данных будут рассмотрены в этой главе. 
Объявляются новые типы данных так же, как и переменные вне 
блока или в начале блока. 

  

 


Смотрите также файлы