Go Down

Topic: Funzioni in C (Read 15553 times) previous topic - next topic

leo72

Sono procedure in VB, se hai usato i vecchi Basic anni '80 le chiamavi subroutine anche te   ;)
E si invocavano con un bel GOSUB, ricordi?  :P

Ma comunque le si chiamino, sono porzioni di codice che eseguono un determinato compito e che possono essere invocate con un nome, con o senza parametri, con o senza valori indietro. Il succo non cambia.

andrea86


Che significa inline ed overhead ? 


prendi la cosa con le pinze, ma credo che "inline" dice al compilatore di inserire in quel punto le istruzioni che sono all'interno della funzione richiamata. Invece senza la parola "inline" quando si arriva alla chiamata della funzione succede quello che ha detto Leo, portando un overhead. Questo è quello che ho capito, ma potrebbe essere completamente sbagliato  :~

yoshi93

@andrea86: hai capito bene.
Per la cronaca: inline sostituisce i #define del C nel caso delle funzioni permettendo al compilatore di effettuare tutti i controlli necessari ed evitando bug legati alle precedenze delle varie operazioni.

@leo72: io chiamo subroutine/routine le procedure in assembly  :) .

leo72


@leo72: io chiamo subroutine/routine le procedure in assembly  :) .

Esattamente!  ;)
Programmavo anch'io in assembly.... tanti anni fa  :smiley-sweat:

Dorsai


Inoltre divido a piu non posso le funzioni in tab diverse e mi risulta tutto leggibile e ordinato invece di lunghissimi codici su tab singola.


Questo mi sembra molto interessante.
Solo che non ho capito come si fa  :~

leo72

Premi "tab"....  ;)

L'IDE di suo indenta già secondo il valore preimpostato (2 spazi, che puoi cambiare editando a mano il file delle preferenze dell'IDE).
Se ci fai caso, se scrivi una { e premi invio, poi l'IDE nella riga successiva si sposta del numero di spazi prefissato. Anche dopo un } fa così. Se metti un commento a fine riga invece non lo fa, lo devi fare tutto a mano.
Io personalmente uso 4 spazi, rende il sorgente più.. bello.  ;)

Inoltre l'indentazione rende il codice più leggibile.
Esempio:

Code: [Select]
void loop() {
delay(500);
byte temp = digitalRead(10);
if (temp == LOW) {
funzione1();
} else {
funzione2();
}
}


Eccolo indentato per benino:
Code: [Select]
void loop() {
    delay(500);
    byte temp = digitalRead(10);
    if (temp == LOW) {
        funzione1();
    } else {
        funzione2();
    }
}


Dorsai

Non avevo capito che ti stessi riferendo all'indentazione.
Sì quella la uso da quando programmavo in basic sull'apple II (rigorosamente compatibile  ;) )
Pensavo ti riferissi alla possibilità di gestire finestre dello stesso programma con le procedure messe in aree diverse. Una cosa che evitasse lo scorrimento in verticale dei listati troppo lunghi.
Grazie per la precisazione :)

leo72

No, aspetta. Mi son confuso io  :smiley-sweat: :smiley-sweat:
Ho riletto il messaggio di Testato e lui parlava di "tab". Lì per lì credevo si riferisse alla tabulazione. Ma ora riguardando ciò che ha scritto, si riferisce al fatto di dividere il sorgente in più "linguette", dette appunto "tab". Ogni tab viene salvato in un file differente. Per usare questa funzione basta cliccare sulla frecciolina posta in alto a destra sopra all'area di inserimento del testo e scegliere "nuovo file". Ogni tab può contenere del codice. In fase di compilazione, l'IDE riunisce tutto in un unico file e poi lo passa al compilatore.

nid69ita


Sono procedure in VB, se hai usato i vecchi Basic anni '80 le chiamavi subroutine anche te   ;)
E si invocavano con un bel GOSUB, ricordi?  :P

Ricordo meglio il primo linguaggio (strutturato) studiato, il Pascal
Code: [Select]

Procedure (<parametri>:<tipo>;<parametri>:<tipo>;...);
var ...
begin
end;
my name is IGOR, not AIGOR

leo72

Ora che mi ricordo la definizione di "procedure" c'era anche in COBOL  ;)

Dorsai

In basic usavo il "goto" scrivendo programmi illeggibili. :smiley-red:

Comunque questa discussione mi è stata utilissima e vi ringrazio molto per le informazioni ricevute.

Ora ho capito anche l'uso delle finestre interne dell'editor (non sapevo che il compilatore considerasse tutto come un unico programma!). La possibilità di compartimentare il programma è veramente molto comoda. Soprattutto quando sono presenti più procedure e il codice diventa troppo lungo da gestire in una sola finestra.

Siete così bravi che secondo me potreste fare un angolino del forum intitolato "forse non sapevi che..." Dove mettere queste ed altre informazione che magari per voi sono banali, ma che per un utente inesperto possono essere utilissime.

leo72


In basic usavo il "goto" scrivendo programmi illeggibili. :smiley-red:

Non eri il solo  ;)

Quote

Ora ho capito anche l'uso delle finestre interne dell'editor (non sapevo che il compilatore considerasse tutto come un unico programma!). La possibilità di compartimentare il programma è veramente molto comoda. Soprattutto quando sono presenti più procedure e il codice diventa troppo lungo da gestire in una sola finestra.

Inizialmente ero contrario ad usare il sistema a linguette, perché preferivo avere il codice tutto dentro ad un unico file.
Poi col tempo ho iniziato anch'io a separare il codice. Non come fa Testato, cioè usando una linguetta per ogni singola funziona  :smiley-yell:, ma raggruppando le funzioni simili. Ad esempio, se devo leggere/scrivere sulla EEPROM, mi credo una linguetta "eeprom" e dentro ci metto le routine per tali funzioni. ecc...

testato

#27
May 26, 2013, 10:43 am Last Edit: May 26, 2013, 10:46 am by Testato Reason: 1
a volte uso due linguette anche per la stessa funzione, spesso me ne dimentico e ci aggiungo altre due linguette per la funzione di cui gia' avevo fatto due linguette, in genere per fare un semplice a + b creo una tab per a, una per b una per a+b ed una per il risultato, e' tutto molto leggibile, credo che la prolissita' sia la soluzione dei tempi odierni  :smiley-yell:

logicamente a tutto c'e' la giusta moderazione, l'uso delle tab per dividere le procedure piu' importanti, per suddividere mentalmente il progetto, e' quanto di piu' sano si possa fare, ma non viene mai sottolineato, diciamo che e' una delle mie battaglie personali  :)
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

paulus1969



Sono procedure in VB, se hai usato i vecchi Basic anni '80 le chiamavi subroutine anche te   ;)
E si invocavano con un bel GOSUB, ricordi?  :P



Già.. i cari vecchi BASIC dell'epoca  =( quanti ricordi...

In quei BASIC c'era la DEF FN che si usava per definire delle funzioni, e lì distinguevamo fra funzioni e subroutine.

Comunque, per chi vuole incasinare, il GOTO lo abbiamo anche qui  XD

leo72

http://www.cs.utexas.edu/users/EWD/transcriptions/EWD02xx/EWD215.html

Go Up