Dubbi sul c++

franbisc
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.

Risposte
Summerwind78
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 :D

Il termine "include" penso che non abbia bisogno di spiegazioni :-D

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 :P).

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

franbisc
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?

Summerwind78
Per la panoramica mi sa che devi guardare in internet

sinceramente saprei dove trovarla altrimenti

apatriarca
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.

Summerwind78
grazie apatriarca, questa non la conoscevo neanche io :D

Sempre utilissimo!

franbisc
"Summerwind78":
grazie apatriarca, questa non la conoscevo neanche io :D

Sempre utilissimo!

Si,infatti,è perfetto :D

Giant_Rick
"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!!

Summerwind78
figurati... quando posso dare una mano mi fa piacere

Giant_Rick
"Summerwind78":
figurati... quando posso dare una mano mi fa piacere


Mi prenoto per delle domande quando studierò C :-D

Summerwind78
Mi prenoto per delle domande quando studierò C


Prenotato :D

claudio862
"Mifert4":
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.

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.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.