Ciao a tutti!!
Mi servirebbe un programma che convertisse da c a c++..
Esiste?
Che ?!? :o
Spiegati meglio, la domanda non ha senso. Il C++ aggiunge nuove features al C, non sono linguaggi diversi tipo C e Basic.
nid69ita:
Che ?!? :o
Quello che chiedi non ha alcun senso visto che il C++ è una estensione del C, un programma in C è direttamente utilizzabile con un compilatore C++.
Non è possibile invece il contrario.
Scusate non sapevo questa cosa!
Pensavo avessero molto in comune ma non che c++ avesse solo cose in più. .. chiedo scusa per la figuraccia
Il C++ è compatibile quasi al 100% con il C, a livello di sorgente.
Tuttavia, il C++ è un linguaggio fortemente orientato agli oggetti, al contrario del C. Questo vuol dire che se vuoi davvero convertire un programma da C a C++, ci sono buone probabilità che tu debba ripensarlo da capo. E nota che dico ripensarlo, non solo riscriverlo.
In realtà, la programmazione ad oggetti è un mero paradigma, per cui molti suoi concetti si possono applicare anche in C, ma in ogni caso questo si ottiene con schemi e strutturazioni differenti (e a volte con molta fatica e costrutti astrusi), per cui passare al C++ dovrebbe semplificare le cose, ma in ogni caso richiederà interventi al codice, che in questo caso saranno magari solo una semplice riscrittura.
Questo per dire che tra i due linguaggio dovrebbe essere diverso proprio l'approccio. Sono stufo di gente che dice "so programmare in C++" pensando che la cosa si riduca ad utilizzare cout al posto di printf().
Ah ecco allora ci sono differenze di scrittura di codice.
Ad esempio la funzione loop in C , in c++ devo farlo con i cicli (for, while ecc)?
Giusto?
Uhm... Temo che tu non abbia capito molto di quel che ho detto, ma non importa.
La funzione loop() funziona allo stesso modo in C e C++, così come i cicli. Non è che li devi fare in un modo o in un altro, dipende da come li vuoi fare.
No.
Il C ha un certo concetto di funzionamento, il C++ un altro. Comunque un compilatore C++ capisce dei programmi C.
È come se scivi un tema e poi estendi il tema scrivendolo in rima.
Chi legge capise il tema. Per passare da testo a poesia comunque devi ripensare il testo e cambiare la struttura/frasi per poterlo fare.
Ciao Uwe
Perfetto ora è tutto chiaro.
Ho fatto solo un esame di programmazione ed era in c++ e il quand dovevamo mandare una cosa in un loop infinito ci facevano usare dei cicli con delle condizioni opportune. Pertanto non sapevo che la funzione loop fosse utilizzabile anche in c++
Grazie a tutti
Federico_ms:
Ad esempio la funzione loop in C
La Loop non fa parte ne del C ne del C++, fa parte di wiring che è un framework per semplificare la programmazione in C++, Arduino sfrutta wiring però puoi tranquillamente scrivere il codice in C, o C++, puro se rinunci a tutte le comodità offerte da wiring, per contro guadagni tantissimo in efficienza e potenzialità.
Un ultimo appunto sulle piccole mcu 8 bit il C++ è meglio lasciarlo stare e usare solo il C.
A parte che mi sfugge quali siano le "condizioni opportune" per un ciclo infinito (nessuna condizione? :o), limitatamente ad Arduino il ciclo infinito esiste già, ed è rappresentato dalla funzione loop(), che il framework chiama infinitamente per te, senza che tu debba fare niente. Tu devi solo riempirla con quanto desideri.
SukkoPera:
A parte che mi sfugge quali siano le "condizioni opportune" per un ciclo infinito (nessuna condizione? :o),
A meno che il programma non deve fare solo una cosa e poi terminare di ciclo infinito, while(1), te ne serve uno all'interno della main()
Eventualmente al posto di while(1) si può usare una vera condizione per poter terminare il programma se necessario, però queste sono cose che hanno senso solo su un pc, su una MCU il programma non termina mai e il ciclo infinito è necessario, anzi se ne usano di più nel caso della gestione errori critici, non recuperabili, dove spedisci l'esecuzione in loop eterno e attivi una segnalazione di errore, p.e. una particolare condizione di lampeggio dei led.
Su alcuni micro esistono appositi interrupt, denominati traps, che si attivano in caso di gravi errori come la divisione per zero, stack overflow, errori clock, etc, quasi sempre vengono sempre gestiti con cicli infiniti in cui si imbriglia l'esecuzione del codice per limitare i danni e segnalare la condizione di errore.
Diciamo che la programmazione su mcu ha esigenze diverse da quella su un pc con soluzioni diverse.
Per i cicli io uso
:inizio
goto inizio;
@astro: Non parlavo delle condizioni per cui può avere senso o meno mettere in piedi un loop infinito, quello ovviamnte dipende dal contesto. Alludevo alla contraddizione presente in:
quand dovevamo mandare una cosa in un loop infinito ci facevano usare dei cicli con delle condizioni opportune
Sembra che qua si parli proprio delle condizioni da mettere nel for/while, ma se il ciclo è veramente infinito, l'unica cosa che ci puoi mettere è... nessuna condizione. Appunto while (1) (che poi sarebbe più pulito while(true)), for (; o il costrutto preferito di turno.
Sì ovviamente intendevo condizioni che non si sarebbero mai rilevate. Se avevo bisogno di un loop, cosa che mi serve per il motore passo passo, farei un ciclo con una condizione sempre verificata e una mai. Non so se mi sono spiegato. .comunque ho capito tutto.
Grazie ragazzi
Un programma Arduino (sketch .ino) è in C/C++ ed usa delle librerie dietro (core Arduino che è un framework)
In C o C++ hai una main() , Arduino "nasconde" il fatto che in automatico l'IDE ti aggiunge al programma una cosa tipo questa:
void main()
{ setup();
while(1)
{ loop();
}
}
Ecco perchè uno sketch Arduino necessita di una funzione setup() e una funzione loop()
E siccome in Arduino sei su MCU con poche risorse meglio usare il C e poco di C++ soprattutto evitare abuso di programmazione ad oggetti tipica del C++ in quanto, ripeto NON sei su una CPU con un S.O. e molte risorse.