View Full Version : Programmazione C/C++ da Windows a Linux
LupettoOne
18-06-2009, 18:35
Raga volevo un'informazione cosa che non riesco a capire... fino ad oggi mi esercitavo su Windows a scrivere e compilare in C/C++ ma vorrei poterlo fare anche su Linux su distro Ubuntu come IDE per scrivere mi hanno detto di utilizzare Anjuta come compilatore il gcc! Nel compilare non ci sono problemi da sempre compilo delle applicazioni su unix scritte in C solo che mi chiedevo se un programma che viene scritto su Windows e poi compilato su Linux è normale che mi dà errore? Probabilmente bisogna scaricare delle librerie? Quello che vorrei capire se il codice scritto su Windows va bene anche per Linux e viceversa! Cioè quello che ho studiato per il C++ vale anche per Linux o le classi ecc.. sono diverse? Grazie!
BrutPitt
18-06-2009, 19:43
I programmi scritti in "perfetto" ANSI C o C++ sono portabili (o almeno dovrebbero esserlo).
Gia', pero', se estendiamo le problematiche, per esempio, alla gestione dei processi, senza nemmeno dover scomodare la GUI (interfaccia a finestre), le cose cambiano.
Quindi se stai parlando di classi STL, sono assolutamente portabili... se parli di MFC o altre classi Microsoft, non lo sono.
Esistono pero' librerie "general pourpuose" (non solo GUI) portabili, che permettono di scrivere codice che puo' essere compilato sotto Windows, Linux e MacOS senza dover modificare nulla.
Le piu' "usate" credo siano le wxWidgets (wxWindow) e le Qt4.5.
(Se vuoi puoi paragonarle alle MFC... anche se, a mio parere, son piu' complete)
Sull'IDE non mi pronuncio.
Il giudizio e' molto personale e dipende anche dal tipo di librerie usato (le Qt hanno il proprio).
Di IDE, comunque, esistono anche NetBeans, Eclipse, Code::Blocks di cui puoi trovare gli equivalenti anche in Windows... o KDevelop (solo Linux)... etc.
cdimauro
18-06-2009, 20:20
I programmi scritti in "perfetto" ANSI C o C++ sono portabili (o almeno dovrebbero esserlo).
No. Non bisogna usare caratteristiche non portabili, anche se previste dal linguaggio.
BrutPitt
19-06-2009, 11:07
No. Non bisogna usare caratteristiche non portabili, anche se previste dal linguaggio.
No, nemmeno cio' sarebbe sufficiente se non si contemplassero anche le peculiarita' dei sistemi operativi e dell'hardware... e anche altre cose.
Ma sappiamo benissimo entrambi quante variabili entrino in gioco nella scrittura di un codice portabile, oltre a quanto sia arduo generalizzare e sintetizzare la risposta ad una discussione che debba anche essere intelligibile ad un neofita.
Poi e' facile non trovare rigore in una frase che aveva volutamente un virgolettato e un condizionale... cosi' come trovo facile, ed anche un po' scevro di contenuti, consigliare solo l'utilizzo di funzioni portabili a chi chiede lumi proprio sulla portabilita'.
Ora, una scrittura in ANSI C, utilizzando l'ANSI C standard library, assicura certamente un'alta portabilita' del codice.
L'utilizzo dell'ANSI C/C++ CSL/STL e' sicuramente una strada che mi sento di consigliare a colui il quale si prefigga una portabilita' e non sappia da dove iniziare: facile da seguire nelle ricerche in rete e nelle referenze, strada che altrettanto sicuramente deve essere sceverata e adeguata in itinere e non assunta come dogma.
cdimauro
19-06-2009, 13:16
Proprio per questo ho evitato di parlare di endianess, campi di bit, ordine di valutazione delle espressioni e dimensione dei tipi standard.
Tutte cose che puoi usare "tranquillamente" in ANSI C, ma che producono codice non portabile.
Proprio per questo ho evitato di parlare di endianess, campi di bit, ordine di valutazione delle espressioni e dimensione dei tipi standard.
Tutte cose che puoi usare "tranquillamente" in ANSI C, ma che producono codice non portabile.
Cmq direi che sono cose decisamente esotiche, basta tenersi sui x86/x64 (e anche ARM che io sappia) e il C dovrbbe essere tutto portabile se non si usa roba strana.
O no?
cdimauro
19-06-2009, 15:34
No. Dipende tutto dalla roba "esotica". Tipo un compilatore che implementa in maniera diversa la valutazione delle espressioni, pur lavorando con le architetture che hai citato. ;)
P.S. Gli ARM sono big endian, mentre gli x86 little endian. :stordita:
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.