2010-11-14 19 views
5

Quando compilo un programma con #includeDove posso vedere il codice utilizzato nelle librerie standard C++?

dove posso vedere il contenuto di quel file, e anche dal momento che quel file contiene dichiarazioni, dove posso vedere il codice effettivo usato in quelle funzioni?

È aperto a tutti o non è disponibile al pubblico?

+1

Non esiste un'implementazione della libreria standard. Puoi scoprire dove sono le intestazioni per la tua implementazione cercando le intestazioni sul tuo sistema. È probabile che siano tutti nello stesso posto. –

+1

taggato * osx * per fmunshi commento sulla domanda doron. –

+1

Ok un Mac, quale compilatore/IDE stai usando? – pinkfloydx33

risposta

5

Il codice attuale è nelle librerie standard specifiche della piattaforma che vengono con il compilatore, si può vedere guardando il sorgente di implementazione libreria standard.

Ecco la documentazione (e la fonte) per libstdc++ di GNU (viene fornito con gcc): http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/index.html.

scaricare il sorgente da uno di questi specchi: http://gcc.gnu.org/mirrors.html

+0

Grazie per l'ottimo link! Ha esattamente quello che stavo cercando. – fmunshi

1

Se si utilizza qualcosa come Visual Studio, si può mettere un punto di interruzione e quindi avviare la linea per linea passando attraverso il codice e si aprirà i file inclusi come si va avanti. La via più veloce in un file secondo me. Altrimenti puoi trovare il codice da qualche parte sul tuo PC ... sul mio è in C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\crt\src\ostream ad esempio, sostituendo ostream con iostream, sstream, ecc. (Nota che quelli sono nomi di file senza estensioni) ma anche se guardi la directory vedere un sacco di file .he .c

1

Tutta la nave intestazioni sistema con il compilatore. Sui sistemi Linux, questi possono normalmente essere trovati sotto /usr/include. Su altre piattaforme, normalmente vivrà dove hai installato il compilatore.

Le biblioteche commerciali normalmente non inviano il codice sorgente. Su Linux, questi possono essere normalmente trovati nei pacakges sorgente.

+0

che dire su un mac, dove posso trovare i pacchetti sorgente – fmunshi

2

Dipende da cosa toolchain che si sta utilizzando, non tutti i vendor sta facendo la sua implementazione pubblica. Puoi dare un'occhiata alla libreria GNU C per i principianti: http://www.gnu.org/software/libc/

Dinkumware, la società dietro la libreria di modelli standard C++ utilizzata in Visual Studio, ad esempio, offre un prodotto commerciale, quindi il codice non è disponibile per tutti - dipende davvero dalla tua licenza. Alcune versioni di Visual Studio vengono fornite con il codice sorgente del runtime incluso.

quanto riguarda lo STL, c'è anche STLport, un'implementazione sorgente AWL aperta.

La cosa migliore sarà davvero i progetti che gcc/g ++ dipendono.

3

In genere il file #included è leggibile, ma la libreria che implementa in genere non è leggibile. I file include su un mac sono in /usr/include/C++.

Il codice della libreria dipende dal compilatore. Per Gnu C++ usato in linux e Mac puoi sicuramente vedere il codice. Potrebbe essere necessario scaricarlo. È disponibile presso http://gcc.gnu.org/libstdc++/

Non credo di Windows C++ codice della libreria è disponibile.

+0

Sto usando un mac, quindi dove posso vedere il codice – fmunshi

+0

fmunshi: risposto alla tua domanda su mac, modmi su. –

2

standard C++ per sé è proprio questo: uno standard. L'implementazione di cui è fatto da molti fornitori. STLport e GNU libstdC++ sono entrambi open source e possono essere considerati nel loro complesso. Visual Studio viene fornito con la libreria standard Dinkumware C++. È una fonte chiusa.

Tuttavia, è sempre possibile vedere la fonte delle intestazioni aprendo la directory di inclusione del lib C++ standard. I file sono nominati proprio come li includi. Gran parte di essa è implementata comunque nelle intestazioni. Ma sono praticamente illeggibili per l'occhio inesperto.

Ma quando si tratta di usare la libreria C++ non dipendono dal codice sorgente esatto di esso, ma piuttosto da quello che dice lo standard C++. Non programmare su un'implementazione, ma piuttosto sullo standard.

1

Eseguire questo comando dalla riga di comando:

find /usr -name iostream 

Che vi dirà la directory che si desidera.

+0

grazie mille, ha funzionato! – fmunshi

Problemi correlati