Warning: Declaration of action_plugin_subjectindex_indexer::register(&$controller) should be compatible with DokuWiki_Action_Plugin::register(Doku_Event_Handler $controller) in /data/web/virtuals/28604/virtual/www/subdom/bo/lib/plugins/subjectindex/action/indexer.php on line 15
Warning: Declaration of action_plugin_mathjax_enable::register(Doku_Event_Handler &$controller) should be compatible with DokuWiki_Action_Plugin::register(Doku_Event_Handler $controller) in /data/web/virtuals/28604/virtual/www/subdom/bo/lib/plugins/mathjax/action/enable.php on line 62
Warning: Declaration of action_plugin_googleanalytics::register(&$controller) should be compatible with DokuWiki_Action_Plugin::register(Doku_Event_Handler $controller) in /data/web/virtuals/28604/virtual/www/subdom/bo/lib/plugins/googleanalytics/action.php on line 40
Warning: Declaration of action_plugin_folded::register(&$controller) should be compatible with DokuWiki_Action_Plugin::register(Doku_Event_Handler $controller) in /data/web/virtuals/28604/virtual/www/subdom/bo/lib/plugins/folded/action.php on line 40
Warning: Declaration of action_plugin_hidden::register(&$controller) should be compatible with DokuWiki_Action_Plugin::register(Doku_Event_Handler $controller) in /data/web/virtuals/28604/virtual/www/subdom/bo/lib/plugins/hidden/action.php on line 28
Warning: Declaration of action_plugin_include::register(&$controller) should be compatible with DokuWiki_Action_Plugin::register(Doku_Event_Handler $controller) in /data/web/virtuals/28604/virtual/www/subdom/bo/lib/plugins/include/action.php on line 354
Warning: Declaration of action_plugin_tag::register(&$contr) should be compatible with DokuWiki_Action_Plugin::register(Doku_Event_Handler $controller) in /data/web/virtuals/28604/virtual/www/subdom/bo/lib/plugins/tag/action.php on line 175
Warning: Cannot modify header information - headers already sent by (output started at /data/web/virtuals/28604/virtual/www/subdom/bo/lib/plugins/subjectindex/action/indexer.php:15) in /data/web/virtuals/28604/virtual/www/subdom/bo/inc/auth.php on line 532
Warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /data/web/virtuals/28604/virtual/www/subdom/bo/inc/auth.php on line 818
Warning: Cannot modify header information - headers already sent by (output started at /data/web/virtuals/28604/virtual/www/subdom/bo/lib/plugins/subjectindex/action/indexer.php:15) in /data/web/virtuals/28604/virtual/www/subdom/bo/inc/actions.php on line 656
Warning: Cannot modify header information - headers already sent by (output started at /data/web/virtuals/28604/virtual/www/subdom/bo/lib/plugins/subjectindex/action/indexer.php:15) in /data/web/virtuals/28604/virtual/www/subdom/bo/inc/actions.php on line 656
Warning: Cannot modify header information - headers already sent by (output started at /data/web/virtuals/28604/virtual/www/subdom/bo/lib/plugins/subjectindex/action/indexer.php:15) in /data/web/virtuals/28604/virtual/www/subdom/bo/inc/actions.php on line 656
====== Funkce ======
* [[dox>funkce/suma-pole.c|Suma_pole]]
* [[dox>funkce/prevody-cisel-do-desitkove-soustavy.c|Převody_čísel_do_desitkové_soustavy]]
Doplňující informace:
Funkce jsou osamostatněné části programu, které "komunikují" s ostatními
funkcemi prostřednictvím volání funkcí.
Slouží tedy ke strukturování programu, viz také funkce versus kompilační jednotka, viz knihovna
Další termíny používané v tomto smyslu (nebo jiných prostředích):
podprogram, sub/rutina, procedura.
Termínem procedura je někdy označuje funkce, která nic nevrací: **void proc(...)**,
tj. její "funkčnost" spočívá v [[:c:sideefect|bočním efektu]].
Volání funkce vede k provedení jejího těla (posloupnosti příkazů).
Vstupem funkce jsou její parametry, výstupem pak návratová hodnota funkce.
Pro úplnost dodáme, že také [[:c:main|int main()]] je funkce (tzv. hlavní funkce programu).
======Deklarace funkce=====
Jedná se o specifikaci identifikátoru funkce, typů parametrů a návratové hodnoty dané funkce.
Tyto informace potřebuje překladač k ověření, zda je daná funkce v následujícím kódu volána korektně.
Deklarace funkcí bývá zvykem psát
před definice funkcí (viz níže) v daném souboru. BLBOST!!! viz [[:c:header-file]]
Syntaxe:
typ_navrat id_fce(typ_1, ..., typ_N);
kde
* //typ_navrat// je datový typ odpovídající návratové hodnotě,
* //typ_1// až //typ_N// jsou datové typy odpovídající typům parametrů
* a //id_fce// je identifikátor funkce (jméno funkce).
Příklady:
double sqrt(double); /* deklarace funkce pro výpočet druhé odpocniny v math.h */
size_t strlen(const char *); /* deklarace funkce pro výpočet délky řetězce v string.h */
int moje_fce(int, char []); /* deklarace vlastní funkce s parametry typu int a pole typu char */
Typově //id_fce// představuje ukazatel/pointer (tj. addresu), viz [[ukazatele-na-funkce]],
tj. není to //lvalue// a je zbytečné používat **&** operátor, resp. lze, ale "nic se nestane".
Note: podobně jako identifikátor [[:c:array|pole]] **typ pole[]** je ukazatel/pointer na typ, tj. adresa!
#include
int main(void){
printf("Hodnota main=%p\n", main);
printf("Hodnota &main=%p\n", &main); //hodnota main()? hmm, rekurze na main()? drsne
return 0;
}
======Definice funkce======
K údajům požadovaným při deklaraci jsou navíc přidány identifikátory formálních
parametrů a tělo funkce (příkazy).
Uvnitř těla funkce přistupujeme k parametrům jako k proměnným
s identifikátorem odpovídajícím identifikátoru formálního parametru.
Ukončení provádění funkce a nastavení návratové hodnoty provedeme příkazem return,
který se může nacházet na libovolném místě v těle funkce.
Syntaxe:
typ_navrat id_fce(typ_1 id_1, ..., typ_N název_N) {
příkazy těla funkce;
...
return x;
}
Příklad:
unsigned int delka(char str[]){
unsigned int index = 0;
while (str[index] != '\0') index++;
return index;
}
======Volání funkce======
Volání funkce provedeme pomocí [[operatory|operátoru volání funkce ()]] uvedeným za
identifikátorem dané funkce, přičemž uvnitř závorek uvedeme skutečné parametry
volání funkce oddělené čárkou.
Volání funkce se může nacházet uvnitř složitějšího výrazu,
je tak možné dále (ihned, bez uložení do proměnné) využít návratovou hodnotu volané funkce.
Příklady:
int d = delka("Ahoj!");
printf("%i\n", delka("Ahoj!"));
----
cc,upol