Newsgroup: it.comp.lang.c++
Titolo: Domanda molto newbie... e un po' OT

Salve a tutti, sto cominciando in questo periodo ad avvicinarmi al
linguaggio C++ in ambiente Linux; il problema è che vorrei poi poter
compilare dei programmi che girino anche sotto Win (dato che bene o male è
l'OS più diffuso e conosciuto tra la maggior parte dei "mortali" come me =)
Ho provato a convincere Win ad aprire i miei programmi compilati sotto
linux, sia rinominandoli con ext .exe e .com (ero disperato) sia aprendolo
come un eseguibile... ma il caro Win dice che "il file non è un'applicazione
di Win32 valida." Plz se qualcuno ha qualche idea (oltre a comprare il
"carissimo" Ms VisualStudio...). Cmq pensavo che il C++ fosse un linguaggio
molto più "standard", invece a quanto vedo ogni OS ha le sue regole per
compilarlo. Mah. Spero che qualche anima pia si degni di rispondere a questa
domanda che a voi sembrerà un po' idiota, ma che per me è un vero problema
=)
Grazie in anticipo
Andrea

 "carissimo" Ms VisualStudio...).
Credo che non ti sia chiara la distinzione tra il linguaggio di
programmazione, il codice che scrivi ed il compilato che ne ricavi alla
fine.
Provo a spiegare (sicuramente diro' qualche cappellata, pardon...)
Il C++ e' un linguaggio di programmazione che segue una determinata
GRAMMATICA definita in un apposito standard.
Nello stesso standard e' definito cosa deve succedere quando si scrivono
i vari comandi.
Quello che scrivi tu e' sostanzialmente un file di testo con una serie di
istruzioni. Quello e' il codice sorgente.
es.
Scrivi un file di testo con scritto questo e salvalo come sauron.cpp
#include <iostream>
int main()
{
    std::cout << "Ciao Sauron" << std:endl;
}
Questo e' il tuo codice sorgente che e' scritto secondo regole che
vengono definite nello standard.
Il compilatore, seguendo appunto le suddette regole, legge il file che
hai scritto e, se non ci sono errori, ne estrae il file COMPILATO.
Ad esempio con il Borland C++ Compiler sotto Windows
il comando: "bcc32 sauron.cpp" ti crea un file "sauron.exe"
che e' un file eseguibile IN AMBIENTE WINDOWS.
Analogamente lo puoi fare sotto linux con un comando del tipo
(sono mesi che non uso linux, non sono _per nulla_ sicuro della sintassi)
"gcc -o sauron.cpp sauron" che ti crea un file "sauron" che e'
un eseguibile IN AMBIENTE LINUX.
Intrambi i programmi provengono da uno stesso codice,
ottengono lo stesso output
(scrivono a schermo "Ciao Sauron" e vanno a capo)
ma sono DIFFERENTI come sequenza di byte, poiche' ognuno
di essi deve essere eseguito da un differente sistema operativo!
Lo standard del C++ (e di tutti i linguaggi COMPILATI) sta nel
codice, NON nell'eseguibile che se ne ricava!
Ed e' appunto di questo standard e di come usarlo che si discute in
questo gruppo.
Tutto chiaro? (temo di no, visto come mi sono spiegato! :-)
Il C++ ha poi una serie di estensioni che non sono definite nello standard
poiche' sono dipendenti anche dal punto di vista del codice
dal sistema operativo nelle quali viene eseguito.
Ad esempio tutte le operazioni che si occupano di GRAFICA o di
gestione delle PERIFERICHE non possono per definizione essere
standard, poiche' dipendono dal particolare ambiente in cui devono
essere eseguite.
Queste operazioni differiscono da piattaforma a piattaforma
non solo per il codice compilato che se ne ricava, ma anche per il
codice sorgente che viene scritto per ottenerle!
Questa parte non viene comunque trattata in questo NewsGroup.
A questo punto credo di aver scritto troppo (e aver spiegato poco)
Spero che sia chiaro
Nel caso chiedi!
--
Gerolamo
Using: Win2000 Pro, Borland C++ Compiler 5.5.1
Listening: Negrita - Ho Imparato a Sognare

 compilarlo. 
standard lo e' , e gcc/g++ e' disponibile su entrambe le piattaforme: 
se vuoi anche un editor, il tutto in 7 MB da scaricare, 
www.bloodshed.net
 oppure ci sono i vari mingw, cygnus, etc etc etc 
sempre gratuiti. Per una lista, 
www.programmazione.it

 Spero che sia chiaro
A me pare che tu abbia spiegato tutto lo spiegabile nel contesto della
questione. E che lo abbia anche fatto in maniera chiara.
--
Andrea Ferro
---------
Brainbench C++ Master. Scored higher than 97% of previous takers
Scores: Overall 4.46, Conceptual 5.0, Problem-Solving 5.0
More info 
http://www.brainbench.com/transcript.jsp?pid=2522556

 Tutto chiaro? (temo di no, visto come mi sono spiegato! :-)
Altrochè se sei stato chiaro, invece! :)
Grazie per la spiegazione, chiara e semplice come piace a me... Un
ringraziamento anche ad Aloha per le dritte nel suo msg, a presto con tante
nuove domande (ed essendo una matricola in informatica state certi che ce ne
saranno ancora molte :PP)
Saluti da Sauron L'Oscuro

 questione. E che lo abbia anche fatto in maniera chiara.
Wow!
grazie:-)
--
Gerolamo
Using: Win2000 Pro, Borland C++ Compiler 5.5.1
Listening: The Cure - Pictures of You

un eseguibile IN AMBIENTE LINUX.
Esatto.. la differenza enorme esiste anche fra un eseguibile creato in
ambiente Win32 con un creato in ambiente DOS.
Se qualcuno possiede il programma Dependency Walker della Microsoft( é
un utility del Visual Studio) si accorgerà che nell'eseguibile finale
creato da un compilatore Win32(come il VC++, BCB++, MinGw) vi sono
diverse chiamate alle API di Windows contenute nella kernel32.dll,
mentre un eseguibile per DOS solitamente non presenta mai alcuna
dipendenza.
Questo é causa spesso di differenze notevoli nelle prestazioni finali
del programma, per esempio si nota chiaramente lo scarto enorme di
velocità fra una std::cout eseguita e compilata su un compilatore dos
e su uno Win32( la prima risulta nettamente più rapida, a prescindere
dal grado di ottimizzazione del compilatore).
Il Ghenio
-----
These are my parting words to you:
those who give up are doomed!
-----