Dubbi sul c++
Sono all'inizio dello studio sia dell'informatica che della programmazione,quindi farò domande che per voi sono scontate e banali:
la riga #include o #include , a cosa si riferiscono,cos'è,che significano i singoli termini(c'entrano mi pare le librerie,ma cosa sono queste?).
per favore,spiegate tutto come se doveste farlo ad un bambino,e in modo più dettagliato dettagliato possibile,grazie.
la riga #include
per favore,spiegate tutto come se doveste farlo ad un bambino,e in modo più dettagliato dettagliato possibile,grazie.
Risposte
ciao
non ti preoccupare, non credo che le domanda possano mai essere stupide, al massimo lo sono le risposte.
Cercherò di aiutarti al meglio possibile
prendiamo per esempio #include e vediamo ogni singola parte di questo comando
per prima cosa iostream è una libreria (ovvero un insieme di comandi/funzioni) che permette al c++ di gestire le comunicazioni. Con questo si intende scrivere qualcosa sul monitor, scriverlo su un file, etc...
Le librerie, nel caso non lo avessi chiaro, sono state create in modo da poter essere caricate nel programma solo se servono, ovvero per poter avere i programmi sempre il più leggeri possibile.
Per esempio, se tu stai scrivendo un programma che si occupa di manipolare dei dati in un file, avrai bisogno delle librerie di I/O, ma (per esempio) potresti non aver affatto bisogno di eseguire dei calcoli matematici come radici quadrate, coseni, tangenti etc...; pertanto tutte le funzioni che si occupano di matematica, se venissero caricate nel programma, sarebbero inutili e appesantirebbero solo il tuo programma rendendolo proprio più "grosso" a livello di kbyte finali.
Pertanto con le librerie è possibile scegliere quali funzioni vogliamo che siano disponibili e quali non lo siano.
Veniamo adesso al resto
per prima cosa #include
il simbolo # serve a dire al compilatore (quel programma che prende il tuo codice in c e lo trasforma in un exe) che l'istruzione che segue non deve trasformarla in un istruzione in exe, ma è un comando per lui.
In pratica quando il compilatore legge quel simbolo pensa "Ah... quello che segue non è un if, un for, o una qualsiasi parte del programma in c da convertire, è un'informazione che viene data a me!"
spero di averla spiegata bene questa parte, se così non fosse dimmelo che provo in altro modo
Il termine "include" penso che non abbia bisogno di spiegazioni
ora vendiamo i simboli < >:
se tu vuoi puoi anche scriverti delle librerie da solo, o usare librerie qualche tuo amico ha scritto.
Basta avere il file della libreria "MiaLibreria.h" e dire al compilatore dove si trova.
Altre librerie invece sono sempre incluse insieme al compilatore. Quando installi il compilatore sul tuo computer, vengono anche installate delle librerie standard che di solito sono sempre utili.
Queste librerie vengono installate in una cartella predefinita (sinceramente non so come si chiami la cartella, ma il compilatore lo sa
).
quindi se vuoi dire al compilatore di prendere la libreria da una cartella particolare (per esempio da c:\LeMieLibrerie) allora dovrai scrivere nel programma
#include "c:\LeMieLibrerie\MiaLibreria" - fai attenzione al fatto che ho usato gli apici e non i simboli di maggiore e minore
se invece vuoi dire al compilatore di caricare una delle librerie che sono nella cartella predefinita allora dovrai usare i simboli di maggiore e minore
Ovviamente le librerie fatte da te le puoi sempre salvare nella cartella predefinita insieme alle librerie standard e quindi richiamarla con
#include
La seconda libreria che hai nominato contiene una serie di funzioni di uso comune in C++ che non ha a che fare con l'I/O come ad esempio le funzioni per convertire le stringhe in numeri e viceversa, qualche funzione matematica leggera tipo "abs", la generazione dei numeri casuali, la gestione dinamica della memoria, etc...
spero di esserti stato di aiuto
se ci fosse qualcosa di ancora non chiaro chiedi pure
Ciao
non ti preoccupare, non credo che le domanda possano mai essere stupide, al massimo lo sono le risposte.
Cercherò di aiutarti al meglio possibile
prendiamo per esempio #include
per prima cosa iostream è una libreria (ovvero un insieme di comandi/funzioni) che permette al c++ di gestire le comunicazioni. Con questo si intende scrivere qualcosa sul monitor, scriverlo su un file, etc...
Le librerie, nel caso non lo avessi chiaro, sono state create in modo da poter essere caricate nel programma solo se servono, ovvero per poter avere i programmi sempre il più leggeri possibile.
Per esempio, se tu stai scrivendo un programma che si occupa di manipolare dei dati in un file, avrai bisogno delle librerie di I/O, ma (per esempio) potresti non aver affatto bisogno di eseguire dei calcoli matematici come radici quadrate, coseni, tangenti etc...; pertanto tutte le funzioni che si occupano di matematica, se venissero caricate nel programma, sarebbero inutili e appesantirebbero solo il tuo programma rendendolo proprio più "grosso" a livello di kbyte finali.
Pertanto con le librerie è possibile scegliere quali funzioni vogliamo che siano disponibili e quali non lo siano.
Veniamo adesso al resto
per prima cosa #include
il simbolo # serve a dire al compilatore (quel programma che prende il tuo codice in c e lo trasforma in un exe) che l'istruzione che segue non deve trasformarla in un istruzione in exe, ma è un comando per lui.
In pratica quando il compilatore legge quel simbolo pensa "Ah... quello che segue non è un if, un for, o una qualsiasi parte del programma in c da convertire, è un'informazione che viene data a me!"
spero di averla spiegata bene questa parte, se così non fosse dimmelo che provo in altro modo

Il termine "include" penso che non abbia bisogno di spiegazioni

ora vendiamo i simboli < >:
se tu vuoi puoi anche scriverti delle librerie da solo, o usare librerie qualche tuo amico ha scritto.
Basta avere il file della libreria "MiaLibreria.h" e dire al compilatore dove si trova.
Altre librerie invece sono sempre incluse insieme al compilatore. Quando installi il compilatore sul tuo computer, vengono anche installate delle librerie standard che di solito sono sempre utili.
Queste librerie vengono installate in una cartella predefinita (sinceramente non so come si chiami la cartella, ma il compilatore lo sa

quindi se vuoi dire al compilatore di prendere la libreria da una cartella particolare (per esempio da c:\LeMieLibrerie) allora dovrai scrivere nel programma
#include "c:\LeMieLibrerie\MiaLibreria" - fai attenzione al fatto che ho usato gli apici e non i simboli di maggiore e minore
se invece vuoi dire al compilatore di caricare una delle librerie che sono nella cartella predefinita allora dovrai usare i simboli di maggiore e minore
Ovviamente le librerie fatte da te le puoi sempre salvare nella cartella predefinita insieme alle librerie standard e quindi richiamarla con
#include
La seconda libreria che hai nominato contiene una serie di funzioni di uso comune in C++ che non ha a che fare con l'I/O come ad esempio le funzioni per convertire le stringhe in numeri e viceversa, qualche funzione matematica leggera tipo "abs", la generazione dei numeri casuali, la gestione dinamica della memoria, etc...
spero di esserti stato di aiuto
se ci fosse qualcosa di ancora non chiaro chiedi pure
Ciao
Più o meno è tutto chiaro,a parte come fare a sapere a memoria quale librerie usare ogni volta(immagino che sono tantissime...).Si può avere una panoramica generale dei tipi di librerie esistenti?
Per la panoramica mi sa che devi guardare in internet
sinceramente saprei dove trovarla altrimenti
sinceramente saprei dove trovarla altrimenti
Immagino che tu possa partire da questo reference o meglio ancora dal tuo manuale per il C++. Sinceramente non è un problema così grosso quello di ricordarsi i nomi delle librerie principali (si usano sempre le stesse..), devi solo programmare un po' e non avrai più problemi a ricordartele.
grazie apatriarca, questa non la conoscevo neanche io 
Sempre utilissimo!

Sempre utilissimo!
"Summerwind78":
grazie apatriarca, questa non la conoscevo neanche io
Sempre utilissimo!
Si,infatti,è perfetto

"Summerwind78":
...
Grazie dell'intervento, non studio né C né C++, ma dal tuo post penso di aver imparato 2-3 cose in maniera molto facile!!
figurati... quando posso dare una mano mi fa piacere
"Summerwind78":
figurati... quando posso dare una mano mi fa piacere
Mi prenoto per delle domande quando studierò C

Mi prenoto per delle domande quando studierò C
Prenotato

"Mifert4":
Sono all'inizio dello studio sia dell'informatica che della programmazione,quindi farò domande che per voi sono scontate e banali:
la riga #includeo #include , a cosa si riferiscono,cos'è,che significano i singoli termini(c'entrano mi pare le librerie,ma cosa sono queste?).
per favore,spiegate tutto come se doveste farlo ad un bambino,e in modo più dettagliato dettagliato possibile,grazie.
Quando scrivi del codice C++ puoi utilizzare esclusivamente funzioni (e variabili) dichiarate precedentemente in quello stesso file. Ovviamente sarebbe assurdo pensare di copiarsi tutte le dichiarazioni in ogni file sorgente. Quello che viene fatto quindi è dichiarare una volta per tutte funzioni nei file header (di solito finiscono con .h, ma gli header standard iostream, cstdlib… non hanno estensione), e di "includere" questi file nei vari sorgenti.
Per comodità le funzioni vengono raggruppate secondo qualche criterio: iostream contiene funzioni e strutture dati per operazioni di input / output, string contiene funzioni e strutture dati per operazioni su stringhe di testo, complex contiene funzioni e strutture dati per usare numeri complessi, windows.h contiene funzioni e strutture dati disponibili su Windows…
La compilazione di un file si divide in due fasi: le seconda è quella di convertire il sorgente C++ in linguaggio macchina; qua il compilatore ha bisogno che tutte le funzioni siano dichiarate nel file. La prima fase, eseguita dal preprocessore, serve dunque a preparare il sorgente. Il preprocessore risponde alle sue direttive (le linee che iniziano con #), ad esempio:
#include
#include "FileA"
Il file fileA viene copiato pari pari nel punto corrente (dopo essere stato anche esso preprocessato).
Nel primo caso FileA viene cercato nella directory predefinita del sistema (/usr/include su Linux). Nel secondo caso viene cercato nella directory corrente.
#define MACRO VALUE
Definisce una macro: nel sorgente ogni occorrenza del testo MACRO viene sostituito con VALUE.
Esempi:
#define PI 3.14 #define SUCCESSIVO(x) (x+1) ... double a = 2 * PI; // int a = 2 * 3.14; int due = 2; int tre = SUCCESSIVO(1) // int tre = (2 + 1)
#error "Errore!!!"
Stampa il messaggio di errore e interrompe la compilazione.
[/list:u:s99hg4sz]
E molti altri. qua una buona descrizione del preprocessore.
In questo modo durante la seconda fase il compilatore si trova un file sorgente che contiene tutte le dichiarazioni delle funzioni all'inizio, e il tuo codice alla fine, quindi conosce le funzioni quando le chiami.
Alla fine della compilazione il linker si occupa di recuperare l'implementazione effettiva delle funzioni dichiarate nell'header e di copiarla* nel file eseguibile. Per le funzioni standard questo è automatico, ma in generale devi dire al linker dove trovare la libreria. Ad esempio se su Linux usi le funzioni matematiche dovrai dire al linker di "linkare" la libreria m (matematica), chiamando gcc ...sorgenti... -lm.
* In realtà spesso si tratta di librerie condivise: viene copiato solo un riferimento, e il sistema operativo si occupa di caricarle durante l'esecuzione.
Spero fosse abbastanza chiaro ed esaustivo (purtroppo il C++ è complicato).
Concludiamo con un esempio:
// File header.h double sqrt(double); #define PI 3.14
// File sorgente.cpp #include "header.h" int main() { double a = 2.0 * PI; double b = sqrt(a); // sqrt??? Mai sentita prima. return 0; }
Viene eseguito il preprocessore (puoi vedere da te il risultato se usi GCC con gcc -E sorgente.cpp):
double sqrt(double); int main() { double a = 2.0 * 3.14; double b = sqrt(a); // Ok, sqrt è stata dichiarata qualche linea fa. return 0; }
Viene eseguito il compilatore, che produce un file oggetto (.obj o .o). Dentro tale file non c'è il codice (macchina) della funzione sqrt, ma solo un suo riferimento.
Il linker trova la relativa libreria e copia il codice (macchina) della funzione sqrt, generando così l'eseguibile finale.