Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Бичков - Основи сучасного програмування.doc
Скачиваний:
69
Добавлен:
07.03.2016
Размер:
2.67 Mб
Скачать

Void main(){

printf("ab\0cd\nxyz");

putchar('\n');

}

Запам'ятайте, що '\0' служить ознакою кінця рядка в пам'яті, а '\n' – у файлі. У рядку "abcd\n" у кінці неявно вже наявний нульовий символ:

'a','b','c','d','\n','\0'

Рядок "ab\0cd\nxyz" – це

'a','b','\0','c','d','\n','x','y',z','\0'

Писати рядок "abcd\0" не варто, оскільки тоді він матиме в кінці два нульових символи (що не є помилкою, але навіщо?). Функція printf (буде розглянуто далі) друкує рядок до нульового символу, а не до закриваючих лапок.

Константний вираз – це вираз, що складається із самих констант. Такі вирази обробляються під час компіляції і, відповідно, можуть бути використані у будь-якому місці програми, де можна застосувати константу, наприклад:

#define maxline 1000

char line[maxline+1];

або

seconds=60*60* hours;

Ідентифікатор – це послідовність літер, цифр і символів підкреслювання, що починається літерою чи символом підкреслювання:

<ідентифікатор>::=<літера>|<ідентифікатор><літера>|<ідентифікатор> <цифра>

(літерою в наведеній БНФ вважатимемо й символ підкреслювання).

За умовчанням компілятор розрізняє великі й малі літери. Кількість значущих символів – 32.

Коментарі задаються так:/*<текст>*/.Наприклад:

main()

/*функція main має бути присутньою обов’язково у С-програмі*/

{

}

3.2. Структура с-програми

C-програма може містити (див. детальніше підрозд. 3.6):

 директиви препроцесора, наприклад:

#include <stdio.h>

#define N 100

 указівки компілятору, наприклад:

#pragma argsused

 оголошення та визначення. У тексті програми можна використовувати коментарі.

С-програма має обов'язково містити функцію main(), з якої починається виконання програми. Наприклад, програма, що друкує текст "hello, world", має вигляд

#include <stdio.h>//підключаються бібліотеки, що містять

//функції введення-виведення та ін.

main()//заголовок функції main

{

printf("hello, world\n");//функція виведення на екран

}

3.3. Описувачі

Фундаментальним поняттям при визначенні конструкцій мови є поняття описувача. Синтаксично описувач задається такою БНФ:

<описувач>::=

<ідентифікатор>|

<описувач>[ ]|

<описувач>[<константний вираз>]|

<описувач>()|

<описувач>(<список типів параметрів>)|

*<описувач>|

(<описувач>)

Разом із ключовим словом, що визначає тип даних, описувач дозволяє визначити будь-який об'єкт мови. Наприклад:

int i;//описаний ідентифікатор і типу int

int i[3];//описаний масив із трьох елементів типу int

int *i;//описаний покажчик і на тип int

int i();//описана функція і

int i(int,int);//описана функція і, що повертає значення типу int і має два параметри типу int

Найпростіший варіант описувача – ідентифікатор.

Складеним описувачем є конструкція, що утворюється внаслідок використання кількох ознак покажчика, масиву чи функції. Причому в даній інтерпретації не допускається масив функцій. Функція також не може повертати масив, тобто не допускається конструкція вигляду

typedef int masyv[10];

masyv f();

Функція не може повертати функцію.

Порядок інтерпретації складеного описувача:

 інтерпретація починається з ідентифікатора;

 інтерпретуються дужки, що стоять праворуч від ідентифікатора, тобто масив чи функція;

 інтерпретується *, що стоїть ліворуч. Наприклад:

double*(**i[5])(int)

Ідентифікатор "i" – це ім'я масиву із п'яти елементів – покажчиків на покажчик на функцію, яка має один аргумент типу int і повертає покажчик на тип double.