DOMANDA Funzioni locali in C++

Dario Salvati

Utente Attivo
1,401
247
CPU
Intel Core i5-3470
Scheda Madre
ASUS P8Z77-V LX
HDD
Western Digital Green 1TB 7200rmp + Crucial M550 128Gb
RAM
Corsair 8Gb(2x4GB) 1600Mhz
GPU
Msi GeForce 770 2Gb
Audio
Integrata mainbord
Monitor
Asus VE247H / 23.6"
PSU
XFX 550W Core Edition
Case
Fractal Design R4
OS
Arch Linux + Gnome
Salve gentaglia del foro,
recentemente a scuola la prof ha spiegato le funzioni ed io stavo morendo di noia dato che sono un argomento che ho studiato da parecchio tempo. Attira la mia attenzione quando spiega le funzioni locali, ovvero funzioni sviluppate e richiamate all'interno di un'altra funzione.
Allorché mi salgono dei dubbi, dato che sono diversi anni che studio il C++ e, sebbene io sia lungi dal conoscerlo nella sua vastità, non avevo mai letto di una cosa del genere.

Sono andato a casa e ho provato a sviluppare qualcosa di molto semplice per vedere se funzionava, ma come pensavo non sono qualcosa di utilizzabile, almeno in C++.
Ho cercato anche su internet, ma senza risultati degni di nota.

L'ho fatto presente alla prof, ma lei mi ha assicurato che siano un legale metodo di sviluppo per il linguaggio.

Allora chiedo a voi, sono utilizzabili o no ste ***** di funzioni locali in C++?

Grazie per l'attenzione.
 

signore del tempo

Utente Èlite
3,228
491
CPU
Intel Core i5 4670K
Scheda Madre
Asus Z87-Plus
HDD
WD Caviar Green 500GB
RAM
G.Skill Ares 2x4GB 1600MHz
GPU
Sapphire 7850 1GB @ 1050MHz
Audio
Integrata
Monitor
Acer V193w
PSU
XFX ProSeries 550W Core Edition
Case
CM HAF 912 plus
OS
ArchLinux + KDE - Windows 10
Hai qualche esempio? Linguaggi tipo Python supportano tale caratteristica. Però, a meno che si riferisse ai function objects (aka functors "funtori") e/o espressioni lamba -ma parliamo di qualcosa leggermente più avanzato e inverosimile da trovare nello scolastico-, oppure, ancora oltre, qualche estensione non-standard di qualche compilatore, né il C né il C++ hanno qualcosa del genere AFAIK.
 
  • Mi piace
Reazioni: Dario Salvati

Dario Salvati

Utente Attivo
1,401
247
CPU
Intel Core i5-3470
Scheda Madre
ASUS P8Z77-V LX
HDD
Western Digital Green 1TB 7200rmp + Crucial M550 128Gb
RAM
Corsair 8Gb(2x4GB) 1600Mhz
GPU
Msi GeForce 770 2Gb
Audio
Integrata mainbord
Monitor
Asus VE247H / 23.6"
PSU
XFX 550W Core Edition
Case
Fractal Design R4
OS
Arch Linux + Gnome
Codice:
#include <iostream>
#define k 5
using namespace std;


void Carica(int x[]);
void Ordina(int x[]);


int main()
{
    int v[k];
    cout <<"Inserisci elementi vettore"<<endl;
    Carica(v);
    cout <<"Ora ordino e stampo"<<endl;
    Ordina(v);
    cin.ignore();
    cin.get();
    return 0;
}


void Carica(int x[])
{
    for(int i = 0; i < k; i++)
    {
        cin >> x[i];
    }
}


void Ordina(int x[])
{
      void Stampa(int x[])
    {
        cout <<"Stampo array"<<endl;
        for(int i = 0; i < k; i++)
        {
            cout << x[i];
        }
    }
    int swap;
    for(int i=0; i<k-1; i++)
    {
        for(int j = 0; j < k - i - 1; j++)
        {
            if(x[j] > x[j++])
            {
                swap = x[j];
                x[j] = x[j+1];
                x[j+1] = swap;
            }
        }
    }


    Stampa(x);
}

Ho scritto questo seguendo la sintassi spiegata da lei, ma il compilatore ritorna
Codice:
In function 'void Ordina(int*)':|
|31|error: a function-definition is not allowed here before '{' token|
|53|error: expected '}' at end of input|
||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
quindi ovviamente non è sintatticamente corretto.

Grazie signore del tempo, sinceramente ero abbastanza convinto di quello che sapevo, ma mi è sorto il dubbio dato che non mi ha mai fatto uno sgarro di queste dimensioni :asd:

Ti mando una birra virtuale :birra:
 

signore del tempo

Utente Èlite
3,228
491
CPU
Intel Core i5 4670K
Scheda Madre
Asus Z87-Plus
HDD
WD Caviar Green 500GB
RAM
G.Skill Ares 2x4GB 1600MHz
GPU
Sapphire 7850 1GB @ 1050MHz
Audio
Integrata
Monitor
Acer V193w
PSU
XFX ProSeries 550W Core Edition
Case
CM HAF 912 plus
OS
ArchLinux + KDE - Windows 10
Figurati. Cercando "nested function extensions" su Google, GCC supporta loro, ma solo in GNU C. Per creare funzioni al volo ci sono le lambda, quindi in C++ non servirebbero a nulla.
 

Dario Salvati

Utente Attivo
1,401
247
CPU
Intel Core i5-3470
Scheda Madre
ASUS P8Z77-V LX
HDD
Western Digital Green 1TB 7200rmp + Crucial M550 128Gb
RAM
Corsair 8Gb(2x4GB) 1600Mhz
GPU
Msi GeForce 770 2Gb
Audio
Integrata mainbord
Monitor
Asus VE247H / 23.6"
PSU
XFX 550W Core Edition
Case
Fractal Design R4
OS
Arch Linux + Gnome
Allora forse si sarà confusa con C.

La parte più difficile ora sarà farglielo capire :lol:
 
M

Mursey

Ospite
Questo sistema e' molto usato in Javascript, chiedile se si riferiva principalmente a quello.
 

Dario Salvati

Utente Attivo
1,401
247
CPU
Intel Core i5-3470
Scheda Madre
ASUS P8Z77-V LX
HDD
Western Digital Green 1TB 7200rmp + Crucial M550 128Gb
RAM
Corsair 8Gb(2x4GB) 1600Mhz
GPU
Msi GeForce 770 2Gb
Audio
Integrata mainbord
Monitor
Asus VE247H / 23.6"
PSU
XFX 550W Core Edition
Case
Fractal Design R4
OS
Arch Linux + Gnome
Credo che Javascript lo conosca solo di nome :lol:

Seriamente, penso che gli unici linguaggi che mastichi siano il Pascal e il C++, nulla di più.
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,923
11,563
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
Infatti, se ben ricordo, in Pascal definire una funzione all'interno di un'altra funzione si fa esattamente come hai scritto nel tuo codice C++, con le ovvie differenze di sintassi.
 
  • Mi piace
Reazioni: Dario Salvati

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili