Предисловие
Синтаксис стандартного C++
Отличия в старых версиях
Предисловие
В этой статье описаны основные особенности синтаксиса языка C++ на примере самых простых программ, являющихся, тем не менее, хорошей иллюстрацией всего нижесказанного. Конечно, средства языка, реализующие те или иные понятия и методы программирования, имеют свои особенности синтаксиса, не указанные здесь, однако, описание этих особенностей без описания самих средств является малополезным, а потому оставлено до рассмотрения каждого конкретного средства в отдельности.
Первоначально синтаксис излагается таким, каким он принят в стандарте C++, а затем указываются отличия, имеющиеся в старых версиях языка, в частности, в среде разработки Borland C++ 3.1.
Синтаксис стандартного C++
Минимальная программа на C++ имеет следующий вид:
Эта программа определяет функцию 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:: .
|