визначення
Елементи даних, які будуть використовуватися в програмі мови користувача, повинні бути визначені перед тим, як їх можна буде використовувати. Існує три типи визначень:
- Визначення констант
- Визначення змінних
- Визначення функцій
Область визначення константи або змінної сягає від рядка, в якому воно було визначено, до кінця поточного блоку або до кінця програми мови користувача, якщо визначення з’явилося поза будь-яким блоком.
Область визначення функції охоплює фігурну дужку (}) тіла функції до кінця програми мови користувача.
Визначення констант
Константи визначаються за допомогою ключового слова enum, як у
enum { a, b, c };
який визначав би три константи a, b і c, надаючи їм значення 0, 1 і 2 відповідно.
Константи також можна ініціалізувати певними значеннями, наприклад
enum { a, b = 5, c };
де a буде 0, b буде 5 і c буде 6.
Визначення змінних
Загальний синтаксис визначення змінної такий
[numeric] type identifier [= initializer][, ...];
де тип — один із типів даних або об’єктів, ідентифікатор — ім’я змінної, а ініціалізатор — необов’язкове початкове значення.
Кілька визначень змінних одного типу розділяються комами (,).
Якщо за ідентифікатором стоїть пара квадратних дужок ([ ]), це визначає масив змінних заданого типу. Розмір масиву автоматично регулюється під час виконання.
Додаткове ключове слово numeric можна використовувати з масивами рядків, щоб сортувати їх алфавітно-цифровим способом за допомогою функції sort() .
За замовчуванням (якщо ініціалізатор відсутній), змінні даних встановлюються на 0 (або "", у випадку рядка), а змінні об'єкта є "недійсними".
Приклади
int i; | визначає змінну int з іменем i |
рядок s = "Привіт"; | визначає рядкову змінну з назвою s та ініціалізує її значенням "Hello" |
дійсні a, b = 1,0, c; | визначає три дійсні змінні з іменами a, b і c, ініціалізуючи b значенням 1,0 |
int n[] = { 1, 2, 3 }; | визначає масив int, ініціалізуючи перші три елементи значеннями 1, 2 і 3 |
імена числових рядків[]; | визначає масив рядків, який можна сортувати буквено-цифровим способом |
UL_WIRE w; | визначає об'єкт UL_WIRE під назвою w |
Не можна отримати прямий доступ до елементів масиву типів об’єктів: | |
сигнали UL_SIGNAL []; | |
… | |
UL_SIGNAL s = сигнали[0]; | |
printf("%s", s.name); |
Визначення функцій
Ви можете написати власні функції мови користувача та викликати їх так само, як і вбудовані функції. Загальний синтаксис визначення функції такий
type identifier ( parameters )
{ statements }
де тип — це один із типів даних або об’єктів, ідентифікатор — це ім’я функції, параметри — це список визначень параметрів, розділених комами, а оператори — це послідовність операторів. Функції, які не повертають значення, мають тип void.
Функція має бути визначена перед тим, як її можна буде викликати, і виклики функцій не можуть бути рекурсивними (функція не може викликати сама себе).
Оператори в тілі функції можуть змінювати значення параметрів, але це не матиме жодного впливу на аргументи виклику функції.
Виконання функції може бути припинено оператором return. Без будь-якого оператора return тіло функції виконується, поки не буде закрита дужка (}).
Виклик функції exit() припинить роботу всієї програми мови користувача.
Спеціальна функція main()
Якщо ваша програма мовою користувача містить функцію під назвою main() , ця функція буде явно викликана як основна функція, а її значення, що повертається, буде значенням, яке повертає програма.
Аргументи командного рядка доступні для програми через глобальні вбудовані змінні argc і argv .
приклад
int CountDots ( string s )
{
int dots = 0 ;
for ( int i = 0 ; s [ i ]; ++ i )
if ( s [ i ] == '.' )
++ dots ;
return dots ;
}
string dotted = "This.has.dots..." ; output ( "test" ) { printf ( "Number of dots: %d
" ,
CountDots ( dotted ));
}
Орігінал сторінки: Definitions