Авторизация



Обмен ссылками

Блог программиста
Сантехник выполнит капитальный ремонт сантехники в квартире в Нижнем Новгороде и пригороде. Сервис.
Главная Учебник C++ Урок 2 - Синтаксис C++
Урок 2 - Синтаксис C++ PDF Печать E-mail
Автор: Андрей   
04.04.2009 16:20

Предисловие
Синтаксис стандартного C++
Отличия в старых версиях

Предисловие
В этой статье описаны основные особенности синтаксиса языка C++ на примере самых простых программ, являющихся, тем не менее, хорошей иллюстрацией всего нижесказанного. Конечно, средства языка, реализующие те или иные понятия и методы программирования, имеют свои особенности синтаксиса, не указанные здесь, однако, описание этих особенностей без описания самих средств является малополезным, а потому оставлено до рассмотрения каждого конкретного средства в отдельности. Первоначально синтаксис излагается таким, каким он принят в стандарте C++, а затем указываются отличия, имеющиеся в старых версиях языка, в частности, в среде разработки Borland C++ 3.1.

Синтаксис стандартного C++
Минимальная программа на C++ имеет следующий вид:

int main() {}

Эта программа определяет функцию main типа int, которая не принимает никаких аргументов и не выполняет никаких действий. Функция main должна быть в любой программе на C++, выполнение программы всегда начинается с нее. Целое значение, возвращаемое ей, предназначено для системы - возвращение ненулевого значения означает аварийное завершение.
Более реалистичные программы работают с некими данными и осуществляют различные операции. Например:

//Пример.
/*Небольшая программа,
иллюстрирующая базовые особенности
синтаксиса языка C++*/
#include <iostream>
#include <conio>

int a = 2, b = 3;
int c;

int main()
{
c = a + b;
std::cout << c;
getch();
}

Две наклонные черты // означают однострочный комментарий - все, что следует за этим знаком до конца строки, игнорируется компилятором. Комментарии применяются для описания кода, пояснения неочевидных моментов, указания алгоритмов, для указания авторских прав и тому подобного. Также часто оказывается удобным в процессе работы над программой "закомментировать" какой-то участок кода - не удаляя фрагмент кода, сделать его с использованием комментариев невидимым для компилятора.
Если комментарии должны быть многострочными, или необходимо закомментировать сразу большой участок кода, применяется пара символьных выражений /* и */. Все, что оказывается между ними, также игнорируется компилятором. (В случае однострочных комментариев начало комментариев обозначалось //, а конец находился в конце строки).
Запись #include означает, что мы включаем библиотеку, имя которой указано в угловых скобках, и можем использовать средства, находящиеся в ней. iostream содержит средства ввода/вывода стандартной библиотеки, conio - средства ввода/вывода MSDOS. Первое нам нужно для того, чтобы компилятор понял строку
std::cout << c;
второе же - чтобы можно было использовать функцию getch().
Строка
int c;
означает, что мы объявляем переменную с именем c типа int (название типа стоит слева, за ним следует имя переменной). Точка с запятой обозначает логическую паузу в передаваемых компилятору инструкциях.
Если вам нужно объявить несколько переменных одного типа, вы можете написать их имена через запятую. Все переменные, имена которых в объявлении находятся между именем типа и точкой с запятой, будут относиться к этому типу. Именно так мы и сделали, написав
int a = 2, b = 3;
При этом мы также определили переменные a и b, задав им начальные значения - аргументу слева от оператора присваивания = присваивается значение константы, значение переменной или значение выражения, находящегося справа.
Оператор = (присваивание) не стоит путать с оператором == (проверка на равенство)! Первый из них присваивает своему левому аргументу значение правого, второй же проверяет, равны ли его левые и правые аргументы. В Pascal'е оператор присваивания (= в C++) выглядит как :=, а оператор сравнения (== в C++) - как =. Не путайте два похожих оператора в одном языке программирования и операторы в разных! Это может стать частым источником ошибок! Например, тело условной инструкции if в строке
if (a = b) {}
будет выполняться, если удалось присвоить переменной a значение переменной b и это значение не равно нулю (подробнее об инструкции if см. в уроке 3).
Фигурные скобки означают группировку. Например, в фигурные скобки заключается тело функции - main или любой другой. Выражение std::cout означает использование стандартного потока вывода cout, находящемся в пространстве имен std. Оператор << ("записать в") записывает свой второй аргумент - то, что справа от него, в первый - то, что слева. То есть мы направляем значение переменной c в стандартный поток вывода из пространства имен std, что выглядит как вывод этого значения на экран.
getch(); означает вызов функции getch() - она определена в библиотеке conio. Имена функций всегда сопровождаются круглыми скобками. Если функция вызывается с какими-то аргументами, то эти аргументы записываются в скобках. Если же функции не передается никаких аргументов, то круглые скобки остаются пустыми, указывая, что нечто с данным именем является функцией, а не переменной. В данном случае функция getch() не принимает никаких аргументов. При нажатии клавиши на клавиатуре она считывает символ, соответствующий клавише - таким образом мы приостанавливаем завершение программы до нажатия какой-нибудь клавиши.

Отличия в старых версиях
В старых версиях C++, таких как Borland C++ 3.1, имеется достаточно большое количество устаревших особенностей, в том числе в синтаксисе. Рассмотрим, чем отличаются программы-примеры в этой среде разработки.
Во-первых, в отличие от современных версий, если функция main() имеет тип int, то она должна обязательно явно возвращать целое значение, т.е. в таком случае в конце функции обязательно должна быть строка
return 0;
В современных версиях отсутствие такой строки все равно означает успешное завершение программы. В старых версиях функция main обычно имела тип void.
При включении заголовочных файлов (#include) в угловых скобках указывалось имя файла с обязательным расширением ".h". Например, iostream.h вместо просто iostream и stdio.h вместо stdio.
Поскольку в то время еще не было ни пространств имен (namespase), ни стандартной библиотеки, ни, тем более, пространства имен стандартной библиотеки std, то стандартный поток вывода записывался без префикса std::.

Обновлено 14.09.2010 18:19