Тип даних void. Дивитися що таке Void в інших словниках. Передача покажчиків функції Сі

На мою думку, це дуже чудова темадля опису. Свого часу було цікаво підняти який-небудь сервер на своєму комп'ютері для більш зручного обмінуфайлами. Спробувавши різні і навіть протокол, я зрозумів, що мені вони абсолютно не подобаються, перші виглядають у браузері, м'яко кажучи, убого, другі хоча й мають свої явні переваги, але підключати мережевий дискна чужих комп'ютерах не хочеться. Але одного (прекрасного і сонячного) дня я зустрів програму під назвою HTTP File Server(скорочено HFS), встановив, налаштував (оскільки я починав працювати з найчистішою версією, з цим були деякі проблеми) і майже закохався у цю програму. Для доступу до моїх файлів тепер достатньо мати будь-який браузер, тому що весь доступ здійснюється через звичайну веб-сторінку. Також у мене створено папку, в яку людина, знаючий парольможе додати файл прямо через браузер. Файли з сервера можна качати як по одному, так і одразу папками. Програма сама помістить папку в tar архів без стиснення і відправить для скачування. При цьому сайт має досить охайний вигляд, хоча за бажання (і достатніх знань) можна самому написати шаблон сайту. Визнайте, що це відмінний спосібдля легкої та зручної передачі файлів?

І ось приклад сторінки, яку ви бачитимете у вікні браузера, як бачите все красиво і охайно, на форумі програми можна знайти багато красивих шаблонів:

Хоча її меню повністю на англійською, для мене це не перешкода. А для тих, хто погано знає англійську, наприкінці статті я постараюся максимально повно пояснити, за що відповідають усі розділи меню і як ними користуватися.

Отже, перейдемо до встановлення та налаштування HTTP File Server:

1) Щоб трохи заощадити вам час, я приготував складання HFS з російськомовним шаблоном сайту і зробив початкове налаштуваннясамої програми. Завантажити збірку можна з мого Яндекс.Диска за посиланням . Якщо ж ви впевнені у своїх здібностях, то можете завантажити чисту версіюпрограму на офіційному сайті http://www.rejetto.com/hfs/

На цьому все. Сподіваюся, ця стаття виявилася вам корисною, натисніть одну з кнопок нижче, щоб розповісти про неї друзям. Також підпишіться на оновлення сайту, ввівши свій e-mail у поле праворуч.

Дякую за увагу:)

Теги: Функції си, прототип, опис, визначення, виклик. Формальні параметри та фактичні параметри. Аргументи функції, передача за значенням, передача за вказівником. Повернення значення.

Вступ

Чим далі ми вивчаємо си, тим більше стають програми. Ми збираємо всі дії в одну функцію mainі кілька разів копіюємо одні й самі дії, створюємо десятки змінних з унікальними іменами. Наші програми розпухають і стають все менш і менш зрозумілими, розгалуження стають все довшими та гіллястішими.

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

Функція – це іменована частина програми, що може бути багаторазово викликана з іншого ділянки програми (у якому ця функція видно). Функція може приймати фіксоване або змінне числоаргументів, а може мати аргументів. Функція може як повертати значення, і бути порожньою (void) і нічого не повертати.

Ми вже знайомі з багатьма функціями і знаємо, як їх викликати – це функції бібліотек stdio, stdlib, string, conio тощо. Більше того, main – це також функція. Вона відрізняється від інших лише тим, що є точкою входу під час запуску програми.
Функція всі визначається в глобальному контексті. Синтаксис функції: (, ...) ( )

Найпростіший приклад - функція, яка приймає число типу floatі повертає квадрат цього числа

#include #include float sqr(float x) ( float tmp = x*x; return tmp; ) void main() ( printf("%.3f", sqr(9.3f)); getch(); )

Усередині функції sqr ми створили локальну змінну, якій надали значення аргументу. Як аргумент функції передали число 9,3. Службове слово return повертає значення змінної tmp. Можна переписати функцію так:

Float sqr(float x) ( return x*x; )

У даному випадкуспочатку буде виконано множення, а потім повернення значення. У тому випадку, якщо функція нічого не повертає, типом значення, що повертається, буде void. Наприклад, функція, яка друкує квадрат числа:

Void printSqr(float x) ( printf("%d", x*x); return; )

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

Void printSqr(float x) ( printf("%d", x*x); )

Якщо функція не набирає аргументів, то дужки залишають порожніми. Також можна написати слово void:

Void printHelloWorld() ( printf("Hello World"); )

еквівалентно

Void printHelloWorld(void) ( printf("Hello World"); )

Формальні та фактичні параметри

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

Наприклад, нехай є функція, яка повертає квадрат числа та функція, яка підсумовує два числа.

#include #include //Формальні параметри мають імена a і b //за ними ми звертаємося до переданих аргументів всередині функції int sum(int a, int b) ( return a+b; ) float square(float x) main() ( //Фактичні параметри можуть мати будь-яке ім'я, в тому числі і не мати імені int one = 1; float two = 2.0; //Передаєм змінні, друга змінна наводиться до потрібного типу printf("%d\n", sum(one, two));

//Передаємо числові константи printf("%d\n", sum(10, 20)); //Передаємо числові константи невірного типу, вони автоматично наводиться до потрібного printf("%d\n", sum(10, 20.f));//Змінна цілого типу наводиться до типу з плаваючою точкою printf("%.3f\n", square(one));
//Як аргумент може виступати і виклик функції, яка повертає потрібне значення printf("%.3f\n", square(sum(2 + 4, 3)));

#include #include getch(); )

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

змінний рядок

#include #include void change(int a) ( a = 100; printf("%d\n", a); ) void main() ( int d = 200; printf("%d\n", d); change(d) ; printf("%d", d);

Програми виведе
200
100
200
Зрозуміло, чому. Усередині функції ми працюємо зі змінною x, яка є копією змінної d. Ми змінюємо локальну копію, але при цьому змінна d не змінюється. Після виходу з функції локальну змінну буде знищено. Змінна d при цьому не зміниться.
Як тоді можна змінити змінну? Для цього потрібно передати адресу цієї змінної. Перепишемо функцію, щоб вона приймала покажчик типу int

#include #include void change(int *a) ( *a = 100; printf("%d\n", *a); ) void main() ( int d = 200; printf("%d\n", d); change (&d); printf("%d", d);

Ось тепер програма виводить
200
100
100
Тут також була створена локальна змінна, але оскільки передана була адреса, ми змінили значення змінної d, використовуючи її адресу в оперативній пам'яті.

У програмуванні перший спосіб передачі параметрів називають передачею за значенням, другий - передачею за вказівником. Запам'ятайте просте правило: якщо ви хочете змінити змінну, необхідно передавати функції покажчик на цю змінну. Отже, щоб змінити покажчик, необхідно передавати покажчик на покажчик і т.д. Наприклад, напишемо функцію, яка прийматиме розмір масиву типу int і створюватиме його. З першого погляду, функція має виглядати якось так:

#include #include #include void init(int *a, unsigned size) ( a = (int*) malloc(size * sizeof(int)); ) void main() ( int *a = NULL; init(a, 100); if (a = = NULL) ( printf("ERROR"); ) else ( printf("OKAY..."); free(a); ) getch();

Але ця функція виведе ERROR. Ми передали адресу змінної. Усередині функції init було створено локальну змінну a, яка зберігає адресу масиву. Після виходу з функції цю локальну змінну було знищено. Крім того, що ми не змогли досягти потрібного результату, У нас виявився витік пам'яті: була виділена пам'ять на купі, але вже не існує змінної, яка б зберігала адресу цієї ділянки.

Для зміни об'єкта необхідно передавати покажчик на нього, у разі – покажчик на покажчик.

#include #include #include void init(int **a, unsigned size) ( *a = (int*) malloc(size * sizeof(int)); ) void main() ( int *a = NULL; init(&a, 100); if ( a == NULL) ( printf("ERROR"); ) else ( printf("OKAY..."); free(a); ) getch() ;

Ось тепер все працює як слід.
Ще подібний приклад. Напишемо функцію, яка приймає як аргумент рядок і повертає покажчик на область пам'яті, в яку скопійовано цей рядок.

#include #include #include #include char* initByString(const char *str) ( char *p = (char*) malloc(strlen(str) + 1); strcpy(p, str); return p; ) void main() ( char *test = initByString( "Hello World!");

У цьому прикладі витоку пам'яті не відбувається. Ми виділили пам'ять за допомогою функції malloc, скопіювали туди рядок, а потім повернули покажчик. Локальні змінні були видалені, але змінна test зберігає адресу ділянки пам'яті на купі, тому його можна видалити за допомогою функції free.

Оголошення функції та визначення функції. Створення власної бібліотеки

У си можна оголосити функцію до її визначення. Оголошення функції, її прототип, складається з значення, імені функції і типу аргументів, що повертається. Імена аргументів не можна писати. Наприклад

#include #include //Прототипи функцій. Імена аргументів можна писати int odd(int); int even(int); void main() ( printf("if %d odd? %d\n", 11, odd(11)); printf("if %d odd? %d\n", 10, odd(10)); getch (); ) //Визначення функцій int even(int a) ( if (a) ( odd(--a); ) else ( return 1; ) ) int odd(int a) ( if (a) ( even(-) -a); ) else ( return 0; ) )

Це змішана рекурсія – функція odd повертає 1, якщо число непарне та 0, якщо парне.

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

Давайте створимо просту бібліотеку. Для цього потрібно буде створити два файли - один з розширенням.h і помістити туди прототипи функцій, а інший з розширенням.c і помістити туди визначення цих функцій. Якщо ви працюєте з IDE, то.h файл необхідно створювати в папці Заголовні файли, а файли коду в папці Файли вихідного коду. Нехай файли називаються File1.h та File1.c
Перепишемо попередній код. Ось так буде виглядати заголовний файл File1.h

#ifndef _FILE1_H_ #define _FILE1_H_ int odd(int); int even(int); #endif

Вміст вихідного коду файлу File1.c

#include "File1.h" int even(int a) ( if (a) ( odd(--a); ) else ( return 1; ) ) int odd(int a) ( if (a) ( even(-- a); ) else ( return 0; ) )

Наша функція main

#include #include #include "File1.h" void main() ( printf("if %d odd? %d\n", 11, odd(11)); printf("if %d odd? %d\n", 10, odd(10));

Розглянемо особливості кожного файлу. Наш файл, який містить функцію main, підключає необхідні бібліотеки, а також заголовковий файл File1.h. Тепер компілятор відомі прототипи функцій, тобто він знає повертається тип, кількість і тип аргументів та імена функцій.

Заголовний файл, як і було зазначено раніше, містить прототип функцій. Також тут можуть бути підключені використовувані бібліотеки. Макрозахист #define _FILE1_H_ і т.д. використовується для запобігання повторному копіюванню коду бібліотеки під час компіляції. Ці рядки можна замінити однією

#pragma once int odd(int); int even(int);

Файл File1.c вихідного коду підключає свій заголовний файл. Все як завжди логічно і просто. У заголовних файлах прийнято крім прототипів функцій виносити константи, макропідстановки та визначати нові типи даних. Крім того, саме в файлах заголовків можна широко коментувати код і писати приклади його використання.

Передача масиву як аргумент

Як уже говорилося раніше, ім'я масиву підмінюється на покажчик, тому передача одновимірного масиву еквівалентна передачі покажчика. Приклад: функція отримує масив та його розмір і виводить на друк:

#include #include void printArray(int *arr, unsigned size) ( unsigned i; for (i = 0; i< size; i++) { printf("%d ", arr[i]); } } void main() { int x = {1, 2, 3, 4, 5}; printArray(x, 10); getch(); }

У цьому прикладі функція може мати такий вигляд

Void printArray(int arr, unsigned size) ( unsigned i; for (i = 0; i< size; i++) { printf("%d ", arr[i]); } }

Також нагадаю, що правило підміни масиву на покажчик не є рекурсивним. Це означає, що необхідно вказувати розмірність двовимірного масиву під час передачі

#include #include void printArray(int arr, unsigned size) (unsigned i, j; for (i = 0; i< size; i++) { for (j = 0; j < 5; j++) { printf("%d ", arr[i][j]); } printf("\n"); } } void main() { int x = { { 1, 2, 3, 4, 5}, { 6, 7, 8, 9, 10}}; printArray(x, 2); getch(); }

Або, можна писати

#include #include void printArray(int (*arr), unsigned size) (unsigned i, j; for (i = 0; i< size; i++) { for (j = 0; j < 5; j++) { printf("%d ", arr[i][j]); } printf("\n"); } } void main() { int x = { { 1, 2, 3, 4, 5}, { 6, 7, 8, 9, 10}}; printArray(x, 2); getch(); }

Якщо двовимірний масивстворений динамічно, можна передавати покажчик на покажчик. Наприклад, функція, яка отримує масив слів і повертає масив цілих, рівних довжині кожного слова:

#include #include #include #include #define SIZE 10 unsigned* getLengths(const char **words, unsigned size) ( unsigned *lengths = NULL; unsigned i; lengths = (unsigned*) malloc(size * sizeof(unsigned));; for (i = 0; i< size; i++) { lengths[i] = strlen(words[i]); } return lengths; } void main() { char **words = NULL; char buffer; unsigned i; unsigned *len = NULL; words = (char**) malloc(SIZE * sizeof(char*)); for (i = 0; i < SIZE; i++) { printf("%d. ", i); scanf("%127s", buffer); words[i] = (char*) malloc(128); strcpy(words[i], buffer); } len = getLengths(words, SIZE); for (i = 0; i < SIZE; i++) { printf("%d ", len[i]); free(words[i]); } free(words); free(len); getch(); }

Можна замість повертати покажчик на масив, передавати масив, який необхідно заповнити

#include #include #include #include #define SIZE 10 void getLengths(const char **words, unsigned size, unsigned *out) ( unsigned i; for (i = 0; i< size; i++) { out[i] = strlen(words[i]); } } void main() { char **words = NULL; char buffer; unsigned i; unsigned *len = NULL; words = (char**) malloc(SIZE * sizeof(char*)); for (i = 0; i < SIZE; i++) { printf("%d. ", i); scanf("%127s", buffer); words[i] = (char*) malloc(128); strcpy(words[i], buffer); } len = (unsigned*) malloc(SIZE * sizeof(unsigned)); getLengths(words, SIZE, len); for (i = 0; i < SIZE; i++) { printf("%d ", len[i]); free(words[i]); } free(words); free(len); getch(); }

На цьому перше знайомство із функціями закінчується: тема дуже велика і розбита на кілька статей.

Історія

Серед сучасних мовпрограмування ключове слово void вперше з'явилося в Сі + + для підтримки концепції узагальнених покажчиків. Тим не менш, завдяки швидкому запозиченню у Сі ++, першим нормативним документом, Що містить це ключове слово, став стандарт мови Сі, опублікований ANSI в 1989р. У межах мови Сі++ void було стандартизовано 1998г.

Згодом ключове слово void та пов'язані з ним мовні конструкції були успадковані мовами Javaта C#, D.

Синтаксис

Синтаксично, void є одним зі специфікаторів типу, що входять до більш загальну групуспецифікаторів оголошення.

Семантика

Семантика ключового слова void не підпорядковується загальної семантиці специфікаторів типу і залежить від способу вживання:

  • Як ім'я типу значення, що повертається функцією: вказує на те, що функція не повертає значення, а виклик такої функції є void-виразом. Тіло такої функції не повинно містити операторів return з виразами. Наприклад:

    Void f();

  • У складі декларатора функції: вказує, що функція має прототип і немає параметрів. Наприклад:

    Int f(void);

  • Як ім'я цільового типу операції приведення: таке void-приведення означає відмову від значення виразу. Наприклад:

    #define promote_ptr() ((void) (ptr++))

  • У складі імені типу void-покажчика: такий покажчик здатний представляти значення будь-яких покажчиків на об'єктні та не повні типи, тобто. адреси будь-яких об'єктів. Таким чином, void -покажчик є узагальненим об'єктним покажчиком. void -покажчики не здатні представляти значення покажчиків на функції. За винятком випадку приведення константного null-покажчика до покажчика на функцію Сі, явних і неявних перетворень між void -покажчиками і покажчиками на функції немає.

Тип void визначений як неповний тип, який може бути доповнений. Як наслідок, цей тип не повинен бути використаний там, де допускаються тільки повні типи, наприклад, як тип параметра у визначенні функції.

Мова Сі до введення void

До публікації першого стандарту Сі в 1989 р., яка ввела в мову ключове слово void загальноприйнятою практикою було оголошувати функції, які не повертають значень без використання специфікаторів типів. Хоча семантично таке оголошення було еквівалентне оголошення функції, що повертає значення типу int , свідомо опущені специфікатори типу підкреслювали, що функція не повертає жодного певного значення. Наприклад:

F(long l) ( /* ... */ )

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

Int main() ( /* ... */ )

Як узагальнений покажчик використовувався покажчик на char. Більш того, сучасні стандартивимагають, щоб подання та вимоги щодо вирівнювання для void -покажчиків були тими ж, що для покажчиків на char, що означає взаємозамінність цих типів.

Перший стандартний діалект Сі (C89), хоча вже дозволяв запис з ключовим словом void , все ж таки допускав таке використання неявного int з метою підтримки сумісності з існуючим кодом. Сучасний діалект Сі (C99) не допускає відсутності специфікаторів типів в іменах типів та оголошеннях.

Приклади

C++

#include void main() ( printf("Привіт!\n"); )

Java

void message()( System.out.println("Привіт!"); )

C

void message(void) ( printf("Привіт!"); )

D

void message() ( writefln("Привіт!"); )

Посилання


Wikimedia Foundation.

2010 .

    Дивитись що таке "Void" в інших словниках: void

    - 1 / vȯid/ adj 1: без сили або ефекту під правом казки 2: можливий вільний n 2 воріт: щоб зробити або визнати … Правий речник Void - можу refer to:In fiction: * Void (comics), Character from WildC.A.T.S. * Void ( Mortal Kombat

    - 1 / vȯid/ adj 1: без сили або ефекту під правом казки 2: можливий вільний n 2 воріт: щоб зробити або визнати … Правий речник), на fictional location або реальний в Mortal Kombat * Void , один з minor villains в Sonic the Hedgehog * Void 1.1, a science fiction wargame created ... ... Wikipedia

    - 1 / vȯid/ adj 1: без сили або ефекту під правом казки 2: можливий вільний n 2 воріт: щоб зробити або визнати … Правий речник- Pour la commune française, voir Void Vacon. En programmation, void is un mot clé que l on retrouve dans le langage C et plusieurs autres langages de programmation dont il est à l origine, comme le C++, le C# ou le Java. Ce mot clé void… … Wikipédia en Français

    Дивитись що таке "Void" в інших словниках:- Void, a.

    - 1 / vȯid/ adj 1: без сили або ефекту під правом казки 2: можливий вільний n 2 воріт: щоб зробити або визнати … Правий речник 1. Containing nothing; empty; vacant; not occupied; not filled.… … - Adjective LAW договір або заборона того, що він воліє не правильний ефект тому, що він є правом: Під державним правом, за контрактом на плату грошей знають, що нині для руйнування є вільний. void verb: Mr. Mullen s termination… … Financial and business terms

    - 1 / vȯid/ adj 1: без сили або ефекту під правом казки 2: можливий вільний n 2 воріт: щоб зробити або визнати … Правий речник- Void, v. t.

    Дивитись що таке "Void" в інших словниках:- empty abandoned, bare, barren, bereft, clear, deprived, destitute, devoid, drained, emptied, free, lacking, scant, short, shy, tenantless, unfilled, unoccupied, vacant, vacuous, without; concepts 481,583,740,774 Ant. filled, full, occupied … New thesaurus

В уроці 1 ви створили кілька програм C++. Тоді ваша мета полягала в тому, щоб зрозуміти процес створення і компіляції програм на C++, а не в тому, щоб зрозуміти оператори C++. У цьому уроці ви вперше уважніше розглянете оператори, у тому числі складається програма на C++. Ви побачите, що більшість програм на C++ дотримуються того самого формату: починаються з одного або декількох операторів #include,містять рядок void main(void),а потім набір операторів, згрупованих між лівою та правою фігурними дужками. З цього уроку ви зрозумієте, що ці оператори, які трохи залякують, реально дуже просто освоїти. До кінця даного урокуви вивчите такі основні концепції:

  • Оператор # includeзабезпечує переваги використання файлів заголовків, які містять оператори C++ або програмні визначення.
  • Основна частина програми на C++ починається з оператора void main(void).
  • Програми складаються з однієї або кількох функцій, які, у свою чергу, складаються з операторів, призначених для вирішення певного завдання.
  • При виведенні на екран ваші програми широко використовуватиме вихідний потік cout.

Коли ви створюєте програми на C++, реально працюєте в термінах операторів,та не інструкцій. Пізніше ви вивчите оператор присвоєння,який надає значення змінним, оператор if, який дозволяє програмі приймати рішення і т. д. А поки що ми просто будемо посилатися на вміст вашої програми, як на оператори програми.


ПОГЛЯД НА ОПЕРАТОРИ ПРОГРАМИ

В уроці 1 ви створили C++ програму FIRST.CPP, яка містила наступні оператори:

#include

void main(void)

{
cout<< «Учимся программировать на языке С++!»;
}

У цьому випадку програма містить три оператори. Фігурні дужки (звані групуючими символами)групують зв'язані оператори:

#include

void main (void)

{
cout<< «Учимся программировать << «на языке С++!»;
}

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

УЯВЛЕННЯ ПРО ОПЕРАТОРА #include

Кожна програма, подана в уроці 1, починається з наступного оператора # include:

#include

При створенні програм на C++ ви отримуєте переваги від використання операторів та визначень, які надає вам компілятор. При компіляції програми оператор # includeзмушує компілятор увімкнути вміст заданого файлу на початок вашої програми. У цьому випадку компілятор увімкне вміст файлу iostream.h.

Файли з розширенням h, які ви вмикаєте на початок (або Заголовок)вашої програми, називаються заголовними файлами.Якщо ви подивитеся на каталог, що містить файли вашого компілятора, знайдете підкаталог з ім'ям INCLUDE, в якому знаходяться різні заголовні файли. Кожен файл заголовка містить визначення, що надаються компілятором для різних операцій. Наприклад, існує заголовний файл, який містить визначення математичних операцій, інший заголовковий файл описує файлові операції тощо.

Заголовні файли є файлами у форматі ASCII, отже, ви можете вивести їх вміст на екран або принтер. В даний момент не турбуйтеся про вміст заголовних файлів. Просто зрозумійте, що оператор # includeдозволяє використовувати ці файли. Усі програми C++, створені вами у процесі вивчення цієї книги, містять оператори # include,які ви повинні використовувати у ваших програмах.

Заголовні файли C++

Кожна програма, що створюється на C++, починається з одного або декількох операторів #include. Ці оператори вказують компілятору включити вміст заданого файлу (заголовкового файлу) у вашу програму, начебто програма містила оператори, які у увімкненому файлі. Файли заголовка містять визначення, що використовуються компілятором для операцій різних типів. Існують заголовні файли, які визначають операції В/В (введення/виведення) C++, системні функції (наприклад, функції, що повертають поточну дату та час) та багато іншого.

Заголовні файли, подібно до програм на C++, є файлами у форматі ASCII, вміст яких ви можете переглянути або надрукувати. Щоб краще зрозуміти вміст заголовних файлів, знайдіть час для того, щоб надрукувати заголовковий файл IOSTREAM.H, вміст якого ви будете використовувати в кожній програмі, що створюється на C++. Заголовковий файл IOSTREAM.H розташований в підкаталозі з ім'ям INCLUDE, який знаходиться в каталозі, що містить файли компілятора C++. Використовуйте текстовий редактор, щоб переглянути та надрукувати вміст заголовних файлів.

Примітка: Ніколи не змінюйте вміст заголовних файлів. Це може призвести до помилок компіляції в кожній створюваній програмі.

ЩО ТАКЕ void main(void)

При створенні програми на C++ ваш вихідний файл міститиме безліч операторів. Як ви зрозумієте в процесі вивчення, порядок, в якому оператори з'являються в програмі, не обов'язково повинен збігатися з порядком, в якому оператори виконуватимуться під час запуску програми. Кожна програма на C++ має один вхід, з якого починається виконання програми, - головну програму.У програмах на C++ оператор void main(void)вказує стартову точку вашої програми.

У міру того як ваші програми стають більшими і складнішими, ви будете ділити їх на кілька невеликих легко керованих частин. При цьому оператор void main(void)вказує початкові (або головні) оператори програми – частина програми, яка виконується першою.

Уявлення про головну програму

Вихідні файли C++ можуть містити дуже багато операторів. При запуску програми оператор void main (void) визначає головну програму, що містить перший оператор, що виконується. Ваші програми на C++ повинні завжди включати один і лише оператор з ім'ям main.

Під час розгляду великих програм на C++ шукайте main, щоб визначити оператори, з яких починається виконання програми.

Використання Дивитись що таке "Void" в інших словниках:

Як тільки ваша програма стає більш складною, ви повинні розділити її на невеликі легше керовані частини, звані функціями.Функція є простим набором операторів усередині програми, виконують певне завдання. Наприклад, при створенні програми платіжних документів ви можете створити функцію з ім'ям salary,що обчислює оклад службовців. Аналогічно, якщо ви пишете математичну програму, ви могли б створити функції з іменами square_rootабо cube,які повертають результати певних математичних операцій. Якщо програма використовує функцію, функція виконує своє завдання і потім повертає свій результат програмі.

Кожна функція у програмі має унікальне ім'я. А кожна програма має, принаймні, одну функцію. Кожна програма з уроку 1 мала лише одну функцію з ім'ям main.Урок 9 надає детальніший огляд функцій. В даний момент просто майте на увазі, що функція складається з декількох пов'язаних за змістом операторів, що виконують певне завдання.

При дослідженні різних програм на C++ ви будете постійностикатися зі словом void.Програми використовують слово Дивитись що таке "Void" в інших словниках:для вказівки того, що функція не повертає значення або не має значень, що передаються до неї. Наприклад, якщо ви використовуєте середовище MS-DOS або UNIX, програма може завершити виконання з поверненням операційній системі значення статусу, яке може бути перевірено командним файлом. Командні файли MS-DOS перевіряють вихідний статус програми, використовуючи команду IF ERRORLEVEL. Наприклад, припустимо, що програма має ім'я PAYROLL. EXE завершується з одним із наступних вихідних значень статусу залежно від результату обробки:

Всередині командного файлу MS-DOS можна перевірити результат роботи програми, використовуючи команду IF ERRORLEVEL:

PAYROLL

IF ERRORLEVEL 0 IF NOT ERRORLEVEL 1 GOTO SUCCESSFUL
IF ERRORLEVEL 1 IF NOT ERRORLEVEL 2 GOTO NO_FILE
IF ERRORLEVEL 2 IF NOT ERRORLEVEL 3 GOTO NO_PAPER
REM Далі йдуть інші команди

Більшість простих програм на C++, які будуть створені вами у процесі вивчення цієї книги, не повертають вихідне значення статусу операційної системи. Тому ви повинні розміщувати слово Дивитись що таке "Void" в інших словниках:перед main,як показано нижче:

void main (void) //- ——-> Програма не повертає значення

У наступних уроках ви дізнаєтеся, що ваші програми можуть використовувати інформацію (наприклад, ім'я файлу), яку користувач вказує у командному рядку під час запуску програми. Якщо програма не використовує інформацію про командний рядок, ви повинні розмістити слово Дивитись що таке "Void" в інших словниках:всередині круглих дужок після main,як показано нижче:

void main ( void) //———————-> Програма не використовуєаргументи командного рядка

У міру ускладнення ваші програми можуть повертати значення до операційної системи або використовувати параметри командного рядка. Однак зараз просто використовуйте void воператорі з main,як показано у цій програмі.

УЯВЛЕННЯ ПРО ГРУПУЮЧІ ОПЕРАТОРИ ( )

У міру ускладнення у ваших програмах буде один набір операторів, які комп'ютер повинен виконати кілька разів, і інший набір операторів, які комп'ютер повинен виконати, якщо виконується певна умова. У першому випадку комп'ютер може виконати той самий набір операторів 100 разів, щоб додати для 100 студентів тестові окуляри. У другому випадку комп'ютер може вивести на екран одне повідомлення, якщо всі студенти пройшли тест, та інше повідомлення, якщо один або кілька студентів зазнали невдачі. Всередині своїх програм на C++ ви використовуватимете праву і ліву фігурні дужки (), щоб згрупувати зв'язані оператори. У простих програмах, представлених у перших уроках книги, ці символи групують оператори, які відповідають операторам вашої головної програми.

ВИКОРИСТАННЯ coutДля відображення виводу на екран

Усі програми C++, створені вами в уроці 1, виводили повідомлення на екран. Щоб вивести повідомлення, програми використовували coutта подвійний знак «менше» (<<), как показано ниже:

cout<< «Привет, C++!»;

Слово coutявляє собоювихідний потік,який C++ призначає стандартний пристрій виведення операційної системи. За промовчанням операційна система призначає стандартний пристрій виведення на екран дисплея. Щоб вивести повідомлення на екран, ви просто використовуєте подвійний символ менший (званий оператором вставки) з вихідним потокомcout.З уроку 3 ви дізнаєтеся, що можна використовувати оператор вставки для передачі символів, чисел та інших символів на екран.

Уявлення про вихідний потік cout

Ви вже знаєте, що програми C++ використовують вихідний потік cout для виведення повідомлень на екран. У разі використання cout для виводу повідомлень уявляйте cout у вигляді потоку символів, які операційна система відображає на екрані. Іншими словами, порядок, в якому ваша програма посилає символи cout, визначає порядок символів, які з'являться на екрані. Наприклад, для наступних операторів програми:

cout<< «Это сообщение появляется первым,»;
cout<< » а за ним следует настоящее сообщение.»;

Операційна система виводить потік символів таким чином:

Це повідомлення з'являється першим, а за ним слідує справжнє повідомлення.

Оператор вставки (<<) называется так, потому что позволяет вашей программе вставлять символы в выходной поток.

Ви вже знаєте, що вихідний потік coutза промовчанням відповідає вашому екрану. Іншими словами, коли ваші програми посилають висновок у cout,Висновок з'являється на екрані. Проте, використовуючи оператори перепризначення виведення операційної системи, ви можете надіслати виведення програми на принтер або файл. Наприклад, наступна команда наказує MS-DOS направити виведення програми FIRST.EXE на принтер, а не на екран:

З:\> FIRST > PRN

Як ви дізнаєтеся з Уроку 3, за допомогою cout C++ можна виводити символи, цілі числа, наприклад 1001, і числа з плаваючою точкою, наприклад 3.12345. З Уроку 8 ви дізнаєтеся, що C++ існує також вхідний потік з ім'ям cin,який ваші програми можуть використовуватись для читання інформації, що вводиться з клавіатури.

ЩО ВИ ПОВИННІ ЗНАТИ

У цьому уроці були обговорені деякі спільні питання, з якими ви зіткнетеся в програмах на C++. З Уроку 3 ви дізнаєтесь, як використовувати cout длявиведення символів, цілих чисел та значень з плаваючою точкою. Ви також дізнаєтесь, як форматувати висновок. До вивчення уроку 3 переконайтеся, що ви освоїли такі основні концепції:

  1. Більшість програм на C++ починаються з оператора # include,який наказує компілятору включити вміст заданого файлу заголовка в програму.
  2. Заголовкові файли містять визначення компілятора, які ваші програми можуть використовувати.
  3. Вихідний файл може складатися з багатьох операторів; оператор void main(void)вказує початок головної програми, яка містить перший оператор програми, що виконується.
  4. У міру того як ваша програма стає більш складною, ви групуватимете пов'язані оператори в невеликі легко керовані частини, звані функціями. Групуйте оператори програми за допомогою правої та лівої фігурних дужок ().
  5. Більшість програм на C++ використовують вихідний потік coutдля виведення інформації на екран; однак, використовуючи оператори перепризначення В/В операційної системи, ви можете перенаправити висновок coutфайл, пристрій (наприклад, принтер) або навіть зробити його входом іншої програми.