domanda sulla funzione main() del linguaggio c

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
dark0s
Linux 3.x
Linux 3.x
Messaggi: 556
Iscritto il: lun 10 gen 2005, 0:00

Messaggio da dark0s »

L'exit status se c'è ci sarà un motivo...

Avatar utente
gallows
Staff
Staff
Messaggi: 3471
Iscritto il: lun 20 set 2004, 0:00
Desktop: cwm
Distribuzione: OpenBSD
Località: ~/
Contatta:

Messaggio da gallows »

dark0s ha scritto:L'exit status se c'è ci sarà un motivo...
Ovvio, ti faccio un esempio banale:

Codice: Seleziona tutto

$ ./a.out && echo "tutto bene"
La console stamperá ok solo se il primo comando è terminato con successo. Ora, se il programma è stato scritto secondo gli standard ed è terminato senza errori di nessun genere è tutto ok, ma se invece manca "return 0" l'exit status di quel programma, anche se terminato in modo corretto, sará diverso da 0 e quindi "echo" non verrá eseguito.

Avatar utente
useless
Staff
Staff
Messaggi: 3896
Iscritto il: dom 12 ott 2003, 0:00
Località: A place where the streets have no name
Contatta:

Messaggio da useless »

come ho già fatto altrove, sfatiamo anche qui questo mito: main DEVE ritornare un int, anche se in teoria potrebbe non farlo, xké gli standard C vogliono così, e non mi pare una cosa molto faticosa adempierli... tra l'altro, invece di 0 e 1 andrebbero persino usate le definizioni EXIT_SUCCESS e EXIT_FAILURE definite in stdlib.h. e il valore di ritorno di main, come dice gallows, non è affatto inutile! prendete un qualsiasi programma di quelli che usate normalmente e guardate se main ritorna qualcosa o no!

quanto alle assegnazioni:
char antani[] = "antani";

si possono fare, ma solo durante le dichiarazioni. nel corpo del programma bisogna usare strcpy (meglio strncpy), sprintf (meglio snprintf) o altre funzioni simili, x scrivere in una stringa. inoltre, come qualcuno faceva già notare, c'è una sottile differenza tra:
char antani[] = "antani";
e
char *antani = "antani";
anche se x quanto riguarda argv, è meno importante, xké di solito non si modificano gli argomenti passati sulla linea di comando.

infine, vi ricordo che x la discussione in materia di programmazione, c'è progForum: http://www.nogood.it/prog/.

(lorys, se ti da fastidio che pubblicizzi progforum qua dimmelo pure).

Avatar utente
Loris
Admin
Admin
Messaggi: 7731
Iscritto il: lun 31 mar 2003, 0:00
Nome Cognome: Loris Vincenzi
Località: Gradisca D'Isonzo
Contatta:

Messaggio da Loris »

useless ha scritto:(lorys, se ti da fastidio che pubblicizzi progforum qua dimmelo pure).
No anzi, è un forum dedicato, poi è tuo 8)
"Ho una testa piuttosto balzana e comunque non sono quello che credete" - Roger Keith Barrett

Avatar utente
TheSnowBoarder
Linux 1.x
Linux 1.x
Messaggi: 139
Iscritto il: gio 30 giu 2005, 0:00
Località: Catania

Messaggio da TheSnowBoarder »

dark0s ha scritto:Per TheSnowBoarder:
...puntatore costante
Cosa intendi per puntatore costante?
Un puntatore costante, così come qualsiasi altra variabile definita costante tramite

Codice: Seleziona tutto

 const 
, viene allocato dal compilatore nella zona a sola lettura del data segment di un programma.
Cercare quindi di assegnare un valore ad una variabile in sola lettura genera un immediato segmentation fault : il programma riceve SIGSEGV e viene terminato.

Esempio:

Codice: Seleziona tutto


char      vettore[20];       /*        vettore è un const char *      */
char   * puntatore ; 
 
puntatore = vettore ; /* Ammissibile */

vettore = puntatore ; /* SIGSEGV !!!! */


dark0s
Linux 3.x
Linux 3.x
Messaggi: 556
Iscritto il: lun 10 gen 2005, 0:00

Messaggio da dark0s »

Ok, grazie per i chiarimenti.
Confesso che mi sono risparmiato tante ricerche sui internet e sui libri.

Rispondi