|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jun 2008
Messaggi: 40
|
[C++] Ricorsione del main()
Ciao a tutti,
ho testato la ricorsione del main(). Codice:
// Ricorsione main().
#include "stdafx.h"
#include <iostream>
using std::cout;
using std::endl;
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
int main()
{
static int count = 1;
cout << count << endl;
count++;
main();
}
Vorrei sapere: a) Se effettivamente ci sono casi concreti dove è utile questo tipo di ricorsione. b) Perché se lancio il programma il contatore si ferma a 4806. In realtà non essendoci un caso base il passo di ricorsione dovrebbe ripetersi all'infinito ... inoltre non mi riesco a spiegare perché il programma si ferma proprio quando il contatore raggiunge 4806. Inizialmente ho pensato dipendesse dal tipo della variabile ed invece, pur modificandola, il programma continua a girare nella stessa maniera. c) Se la ricorsione del main() effettivamente non fa parte degli standard del c++ Grazie a tutti per l'aiuto! |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6254
|
Quote:
Ultima modifica di Unrue : 21-07-2008 alle 18:18. |
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Jun 2008
Messaggi: 40
|
Ciao Unrue,
grazie mille per la risposta. Potresti darmi qualche dritta in più sugli stack? So teoricamente cosa sono e cosa fanno, ma non sapevo esistesse un limite (a questo punto credo dimensionale). Chi lo detta? Come funziona? Grazie mille, |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6254
|
Quote:
http://www.dis.uniroma1.it/~liberato...e/recatt.shtml Addirittura, con un main ricorsivo, ho l'impressione che tu finisca l'intera memoria di sistema Ultima modifica di Unrue : 21-07-2008 alle 21:15. |
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Jun 2008
Messaggi: 40
|
... si, avevo letto da qualche parte dello stack overflow ma la cosa non era approfondita.
Approfondirò per bene l'argomento studiando il link che mi hai passato! Grazie mille per l'aiuto e per la disponibilità! |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6254
|
Quote:
Ultima modifica di Unrue : 21-07-2008 alle 21:23. |
|
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Jun 2008
Messaggi: 40
|
... allora, ho provato a sfiancare il pc e far rigirare il programma. Sembra mantenere la stessa velocità e si ferma sempre con il contatore fisso su 4806!
Nei prox giorni mi studio il link che mi hai passato e faccio un pò di approfondimenti sullo stack overflow! Appena ho la soluzione la posto! Grazie ancora, |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6254
|
Quote:
|
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
|
E' proprio uno stack overflow come succede per qualsiasi funzione ricorsiva (che sia o meno il main).
Il numero di chiamate dipende dalla dimensione dello stack (determinata dal compilatore e dal linker) e da quanti byte sono allocati ad ogni chiamata (dipende dal numero e tipo degli argomenti, dalla configurazione usata debug/release e dal numero e tipo di variabili locali). Puoi modificare, entro certi limiti, la dimensione dello stack per aumentare il numero di chiamate possibili prima dell'overflow. Con Visual C++, apri le Proprietà del Progetto -> Linker -> Riga di comando -> Opzioni aggiuntive e scrivi ad esempio /STACK:2000000 per raddoppiare (circa) le dimensioni dello stack. P.S. Tra l'altro, non vedo alcun motivo per chiamare il main ricorsivamente ... Ultima modifica di lorenzo001 : 23-07-2008 alle 19:30. |
|
|
|
|
|
#10 | ||
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 1792
|
Quote:
"The function main shall not be used within a program" Alcuni compilatori (es. Visual C++) mostrano un warning, altri si rifiutano di compilare codice che richiami la funzione main (es. Borland C++, OpenWatcom), altri ancora (es. GNU GCC) restituiscono un errore solo se viene specificata l'opzione -pedantic: Quote:
|
||
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:22.




















