{
printf("hello, world\n");//функція виведення на екран
}
Описувачі
Фундаментальним поняттям при визначенні конструкцій мови є поняття описувача. Синтаксично описувач задається такою БНФ:
<описувач>::=
<ідентифікатор>|
<описувач>[ ]|
<описувач>[<константний вираз>]|
<описувач>()|
<описувач>(<список типів параметрів>)|
*<описувач>|
(<описувач>)
Разом із ключовим словом, що визначає тип даних, описувач дозволяє визначити будь-який об'єкт мови. Наприклад:
Int i;//описаний ідентифікатор і типу int
int i[3];//описаний масив із трьох елементів типу int
int *i;//описаний покажчик і на тип int
Int i();//описана функція і
Int i(int,int);//описана функція і, що повертає значення типу int і має два параметри типу int
Найпростіший варіант описувача – ідентифікатор.
Складеним описувачем є конструкція, що утворюється внаслідок використання кількох ознак покажчика, масиву чи функції. Причому в даній інтерпретації не допускається масив функцій. Функція також не може повертати масив, тобто не допускається конструкція вигляду
|
|
typedef int masyv[10];
masyv f();
Функція не може повертати функцію.
Порядок інтерпретації складеного описувача:
a інтерпретація починається з ідентифікатора;
a інтерпретуються дужки, що стоять праворуч від ідентифікатора, тобто масив чи функція;
a інтерпретується *, що стоїть ліворуч. Наприклад:
double*(**i[5])(int)
Ідентифікатор "i" – це ім'я масиву із п'яти елементів – покажчиків на покажчик на функцію, яка має один аргумент типу int і повертає покажчик на тип double.