Оператор return

Оператор return закінчує виконання функції, в якій він з'являється, і повертає управління в функцію, що викликає. Керування передається в функцію, що викликає, в точку, безпосередньо наступну за викликом. Значення виразу, якщо воно є, повертається в функцію, що викликає. Якщо вираз опущено, то величина, що повертається функцією, не визначена.

void draw (int, int);

Функція main викликає дві функції, sq та draw. Функція sq повертає значення x*x у main. Розмір повернення присвоюється змінної y. Функція draw оголошується як функція void і повертає значення. Спроба привласнити значення функції draw, що повертається, призвело б до помилки.

Вираз оператора return укладено у дужки, як показано у прикладі. Мова не потребує дужок.

Відсутність оператора return

Якщо оператор return не з'явився у визначенні функції, то керування автоматично передається в функцію, що викликає, після виконання останнього оператора в викликаної функції. Значення повернення викликаної функції не визначено. Якщо значення повернення не потрібне, функція повинна бути оголошена з типом повернення void.

Оператор switch

Оператор switch передає керування одному з операторів свого тіла. Оператор, який отримує управління, - це той оператор, чиє case-константний вираз дорівнює значенню switch-виразу в круглих дужках.

Виконання тіла оператора починається з обраного оператора і продовжується до кінця тіла або доти, доки черговий оператор передає керування за межі тіла.

Оператор default виконається, якщо case-константний вираз не дорівнює значенню switch-виразу. Якщо default-оператор опущений, а відповідний case не знайдено, то оператор, що виконується в тілі switch відсутній. Switch-вираз - це ціла величина розміру int чи коротше. Воно може бути величиною типу enum. Якщо коротше ніж int воно розширюється до int.

Кожен case-константний вираз перетворюється на тип switch-вирази. Значення кожного case-константного виразу має бути унікальним усередині тіла оператора.

Case і default мітки у тілі оператора switch істотні лише за початковій перевірці, коли визначається стартова точка виконання тіла оператора. Всі оператори, що з'являються між стартовим оператором і кінцем тіла, виконуються, не звертаючи уваги на свої мітки, якщо якийсь із операторів не передає управління з тіла оператора switch.

У першому прикладі всі три оператори у тілі switch виконуються, якщо c дорівнює 'A'. Передача керування здійснюється на перший оператор capa++, далі оператори виконуються в порядку їхнього прямування в тілі.

Якщо c дорівнює 'a', то змінні lettera та total інкрементуються. Зрештою, якщо c не дорівнює ні 'A' ні 'a', то інкрементується лише змінна total.

У другому прикладі в тілі switch після кожного оператора слідує оператор break. Оператор break здійснює примусовий вихід із switch після виконання одного з цих операторів. Останній оператор break не обов'язковий, оскільки без нього управління було б передано з тіла на кінець складеного оператора, але він включений для однаковості.

Оператор тіла switch може бути позначений множинними мітками, як показано в наведеному нижче прикладі:

case 'f': hexcvt(c);

Хоча будь-який оператор усередині тіла оператора switch може бути позначений, проте не потрібно оператора, щоб з'явилася мітка. Оператори без міток можуть бути змішані із позначеними операторами. Слід пам'ятати, проте, якщо switch оператор передавуправління одному з операторів свого тіла, всі наступні за ним оператори в блоці виконуються, не звертаючи уваги на свої мітки.