<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wx="http://ilps.science.uva.nl/WikiXML/wx" xml:lang="it" lang="it">
<head>
<title>Callback</title>
<meta name="wx_namespace" content="0"/>
<meta name="wx_pagename" content="Callback"/>
<meta name="wx_page_id" content="1237783"/>
</head>
<body>
<div id="wx_article">
<wx:section level="1" title="Callback" id="wxsec1"><h1 class="pagetitle" id="wx1">Callback</h1>

<wx:template id="wx_t1" pagename="Template:S" page_id="473933"/>
<div class="toccolours itwiki_template_avviso rad noprint" style="margin-bottom:.5em" id="wx2">
<div style="align:left; margin:-3px 0 -4px" id="wx3"><a href="/wit/Immagine:Stub_informatica.png" title="Stub" wx:linktype="image" wx:pagename="Immagine:Stub_informatica.png" wx:page_id="584308" id="wx4"><img src="/wit/Immagine:Stub_informatica.png" alt="Stub" width="30" id="wx5"/></a>
<p id="wx6"> Questa voce di <a href="/wit/Informatica" title="Informatica" wx:linktype="known" wx:pagename="Informatica" wx:page_id="1681180" id="wx7">informatica</a> è solo un <a href="/wit/Aiuto:Abbozzo" title="Aiuto:Abbozzo" wx:linktype="known" wx:pagename="Aiuto:Abbozzo" id="wx8">abbozzo</a>: <b id="wx9"><a href="http://wit/wit/index.php?title=Callback&amp;action=edit" class="external text" wx:linktype="external" rel="nofollow" id="wx10">contribuisci</a></b> a migliorarla secondo le <a href="/wit/Aiuto:Manuale_di_stile" title="Aiuto:Manuale di stile" wx:linktype="known" wx:pagename="Aiuto:Manuale_di_stile" id="wx11">convenzioni di Wikipedia</a>.</p>
</div>
</div>

<wx:templateend start="wx_t1"/>
<p id="wx12">In <a href="/wit/Programmazione" title="Programmazione" wx:linktype="known" wx:pagename="Programmazione" wx:page_id="791962" id="wx13">programmazione</a> una <b id="wx14">callback</b> è una <a href="/wit/Funzione_%28informatica%29" title="Funzione (informatica)" wx:linktype="known" wx:pagename="Funzione_(informatica)" wx:page_id="66786" id="wx15">funzione</a> <i id="wx16">specializzata</i> che viene passata come <a href="/wit/Parametro_%28programmazione%29" title="Parametro (programmazione)" wx:linktype="known" wx:pagename="Parametro_(programmazione)" wx:page_id="232667" id="wx17">parametro</a> a un'altra funzione (che invece è generica). Questo permette alla funzione generica di compiere un lavoro specifico attraverso la callback.</p>

<a id="Esempio" name="Esempio"/>
<wx:section level="2" title="Esempio" id="wxsec2"><h2 id="wx18">Esempio</h2>

<p id="wx19">Un esempio pratico di funzione che <i id="wx20">richiede</i> una callback tra i parametri è la funzione <code id="wx21">qsort</code> della <a href="/wit/Libreria_standard_del_C" title="Libreria standard del C" wx:linktype="known" wx:pagename="Libreria_standard_del_C" wx:page_id="445656" id="wx22">libreria standard del C</a>. La <code id="wx23">qsort</code> implementa l'<a href="/wit/Algoritmo_di_ordinamento" title="Algoritmo di ordinamento" wx:linktype="known" wx:pagename="Algoritmo_di_ordinamento" wx:page_id="10292" id="wx24">algoritmo di ordinamento</a> <a href="/wit/Quicksort" title="Quicksort" wx:linktype="known" wx:pagename="Quicksort" wx:page_id="60673" id="wx25">Quicksort</a> e può essere utilizzata per ordinare un <a href="/wit/Array" title="Array" wx:linktype="known" wx:pagename="Array" wx:page_id="58393" id="wx26">array</a> contenente qualsiasi tipo di dato, a patto che l'array risieda completamente in memoria.</p>

<p id="wx27">Il seguente frammento di <a href="/wit/Codice_sorgente" title="Codice sorgente" wx:linktype="known" wx:pagename="Codice_sorgente" wx:page_id="15812" id="wx28">codice</a> ordina una ipotetica lista di soldati per grado e per nome. In questo esempio:</p>

<ul id="wx29">
<li id="wx30">
<p id="wx31">la funzione <b id="wx32">callback</b> è la <code id="wx33">ConfrontaSoldati</code> che <i id="wx34">sa</i> come confrontare i soldati, ma non sa nulla di ordinamento</p>
</li>

<li id="wx35">
<p id="wx36">la funzione <b id="wx37">generica</b> è la <code id="wx38">qsort</code> che non <i id="wx39">sa</i> cosa sta ordinando, ma conoscendo le dimensioni dell'array e chiamando ripetutamente la funzione callback riesce a fare i giusti <i id="wx40">scambi</i> per mettere in ordine l'array.</p>
</li>
</ul>

<pre id="wx41">
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;

#define QUANTI_SOLDATI 100

struct TSoldato {
    int grado;
    char nome[80];
} Esercito[QUANTI_SOLDATI];

int ConfrontaSoldati(const void *ptr1, const void *ptr2)
{
    const TSoldato *s1=(const TSoldato*)ptr1;
    const TSoldato *s2=(const TSoldato*)ptr2;

    if(s1-&gt;grado!=s2-&gt;grado)
        return s1-&gt;grado - s2-&gt;grado;

    return strcmp(s1-&gt;nome, s2-&gt;nome);
}

void OrdinaEsercito()
{
    qsort(Esercito, QUANTI_SOLDATI, sizeof(TSoldato), ConfrontaSoldati);
}
</pre>

<p id="wx42">Da notare che i parametri della <code id="wx43">qsort</code> sono rispettivamente: la base dell'array, la quantità di elementi presenti, la dimensione di ciascun elemento e la funzione di callback.</p>
</wx:section></wx:section></div>
<div id="wx_categorylinks">
<a href="/wit/index.php?title=Speciale:Categories&amp;article=Callback" title="Speciale:Categories" wx:linktype="known" wx:pagename="Speciale:Categories" id="wx44">Categorie</a>: <span dir="ltr" id="wx45"><a href="/wit/Categoria:Stub_informatica" title="Categoria:Stub informatica" wx:linktype="known" wx:pagename="Categoria:Stub_informatica" wx:page_id="239278" id="wx46">Stub informatica</a></span> | <span dir="ltr" id="wx47"><a href="/wit/Categoria:Programmazione" title="Categoria:Programmazione" wx:linktype="known" wx:pagename="Categoria:Programmazione" wx:page_id="55713" id="wx48">Programmazione</a></span></div>
<div id="wx_languagelinks">
Altre lingue: <a href="http://de.wikipedia.org/wiki/R%C3%BCckruffunktion" class="external" wx:linktype="interwiki" wx:pagename="de:Rückruffunktion" id="wx49">Deutsch</a> | <a href="http://en.wikipedia.org/wiki/Callback_%28computer_science%29" class="external" wx:linktype="interwiki" wx:pagename="en:Callback_(computer_science)" id="wx50">English</a> | <a href="http://fr.wikipedia.org/wiki/Fonction_de_rappel" class="external" wx:linktype="interwiki" wx:pagename="fr:Fonction_de_rappel" id="wx51">Français</a> | <a href="http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%BC%E3%83%AB%E3%83%90%E3%83%83%E3%82%AF_%28%E6%83%85%E5%A0%B1%E5%B7%A5%E5%AD%A6%29" class="external" wx:linktype="interwiki" wx:pagename="ja:コールバック_(情報工学)" id="wx52">日本語</a> | <a href="http://pl.wikipedia.org/wiki/Callback_%28programowanie%29" class="external" wx:linktype="interwiki" wx:pagename="pl:Callback_(programowanie)" id="wx53">Polski</a> | <a href="http://ru.wikipedia.org/wiki/Callback_%28%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%29" class="external" wx:linktype="interwiki" wx:pagename="ru:Callback_(программирование)" id="wx54">Русский</a></div>
</body>
<wx:templatearguments for="wx_t1"><wx:argument name="1">
<p id="wx55">informatica</p>
</wx:argument></wx:templatearguments>
</html>
