Инструменты пользователя

Инструменты сайта


examination:oop:question14

14. Синтаксические единицы программы: комментарии, имена, ключевые слова. Программа на языке C++: содержание и синтаксическая структура. Объявления, статическая и внешняя области действия, классы памяти.

Имена

Для символического обозначения величин, имен функций и т.п. используются имена или идентификаторы . Идентификаторы – это последовательность знаков, начинающаяся с буквы или знака подчеркивания. В идентификаторах можно использовать заглавные и строчные латинские буквы, цифры и знак подчеркивания. Длина идентификаторов произвольная. Примеры правильных идентификаторов:

abc;
A12;
NameOfPerson;
BYTES_PER_WORD;

Отметим, что abc и Abc – два разных идентификатора, т.е. заглавные и строчные буквы различаются. Примеры неправильных идентификаторов:

12X
a-b

Ряд слов в языке имеет особое значение и не может использоваться в качестве идентификаторов. Такие зарезервированные слова называются ключевыми. Список ключевых слов (не полный)

  1. and альтернатива оператору (&&)
  2. and_eq альтернатива оператору (&= )
  3. asm вставить код на ассемблере
  4. auto объявить локальную переменную
  5. bitand альтернатива оператору (bitwise &)
  6. bitor альтернатива оператору (|)
  7. bool объявить булеву переменную
  8. break выйти с цикла
  9. case определенная ветка в операторе ветвления switch
  10. catch обработать исключение от throw
  11. char объявить символьную переменную
  12. class объявить класс
  13. compl альтернатива оператору (~)

В следующем примере

int max(int x, int y) 
{
    if (x > y)
        return x;
    else
        return y;
}

max, x и y – имена или идентификаторы. Слова int, if, return и else – ключевые слова, они не могут быть именами переменных или функций и используются для других целей.

Комментарии

С++ поддерживает, как комментарии в стиле C

/*это комментарий, который может состоять
из нескольких строчек*/

, так и однострочные

// вся оставшаяся часть строки является комментарием

Где две косые черты обозначают начало комментария, а ближайший последующий символ новой строки, который не предварён символом \, считается окончанием комментария.

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

Программа на языке С++ состоит из директив препроцессора, указаний компилятору, объявлений переменных и/или констант, объявлений и определений функций.

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

   main ( )
   {	
      //...
      //...
      return 0;
   }

Поскольку ни одна функция не может содержать определения другой функции, следом (или ранее) в тексте могут располагаться определения вспомогательных функций, «неглавных» функций. Их может быть различное количество.

   main ( )
   {  	
      //...
      return 0;
   }
   function 1 ( )
   {
      //...
   }
   function 2 ( )
   {
      //...  
   }
   //...
   function n ( )
   {
   }

Функции могут быть описаны в произвольном порядке. Удобно располагать их по алфавиту или сгруппировать по определенному признаку.

Объявление переменной

Объявление переменной задает имя и атрибуты переменной. Атрибутами переменной могут быть тип, количество элементов (для массивов), спецификация класса памяти, а также инициализатор. Инициализатор – это константа соответствующего типа, задающая значение, которое присваивается переменной при создании. Объявление переменной имеет следующий синтаксис:

[<спецификация класса памяти>] <тип> <имя> [= <инициализатор>][,<имя> [= <инициализатор>] …];

Примеры объявления переменных

int    x;	        // Объявление переменной целого типа без инициализатора
double y = exp(1);	// Переменная вещественного типа инициализируется числом e.
                        // exp(x) – функция, вычисляющая ex.
int    a, b = 0;	// Объявление двух переменных целого типа. 
                        // Переменная b инициализируется значением 0.

В языке С++ нет ограничений на количество символов в имени. Однако некоторые части реализации (в частности, компоновщик) недоступны автору компилятора, и они иногда накладывают такие ограничения.

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

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

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

Переменная, объявленная на внутреннем уровне, доступна только в том, блоке в котором она объявлена, независимо от класса памяти.

В языке С++ имеется четыре спецификации класса памяти:

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

Спецификации класса памяти auto и register могут быть использованы только на внутреннем уровне.

examination/oop/question14.txt · Последние изменения: 2014/01/15 12:22 (внешнее изменение)