[C++] Care sunt header-ele C++?

Despre limbajul de programare C++ si biblioteca standard STL (forum moderat)
Post Reply
User avatar
Marius Bancila
Fondator
Fondator
Posts: 2344
Joined: 11 Jul 2007, 11:45
Judet: Timiş
Location: Timisoara
Contact:

[C++] Care sunt header-ele C++?

Post by Marius Bancila » 31 Jul 2007, 10:52

Intrebare: Care sunt headerele traditionale (pre-standard) C++?

Raspuns: Headerele traditionale (pre-standard) definesc clase, valori, macrouri si functii in fisiere cu extensia .h; acestea includ header-ele STL ne-standardizate cu extensia .h (iostream.h, fstream.h, vector.h, etc.) si header-ele C cu aceasi extensie (stdlib.h, stdio.h, etc.). Toate header-ele pre-standard folosesc namespace-ul global.


Intrebare: Care sunt header-ele C++ standard?

Raspuns: Acestea sunt header-ele specificate de standardul C++.


Intrebare: Cum recunosc aceste headere?

Raspuns: Modalitatea de denumire a acestora se bazeaza pe cea ne-standard, doar ca extensia .h a fost inlaturata. De exemplu fstream.h a devenit fstream iar memory.h a devenit memory.


Intrebare: Dar in ce priveste 'iostream.h'?

Raspuns: Acest header nu a fost niciodata parte a standarului C++. Prin urmare orice compilator poate oferi acest fisier si sa fie considerat in conform standarului C++. Pe de alta parte insa standarul specifica existenta unui header numit iostream.


Intrebare: Cum stau lucrurile cu headerele tranditionale ANSI C?

Raspuns: Headerele tranditionale de ANSI C au fost prefixate cu litera 'c'. Astfel incat 'stdio.h' a devenit 'cstdio', 'math.h' a devenit 'cmath' si asa mai departe. Lista complete este:
  • <assert.h> - <cassert>
  • <ctype.h> - <cctype>
  • <errno.h> - <cerrno>
  • <float.h> - <cfloat>
  • <iso646.h> - <ciso646>
  • <limits.h> - <climits>
  • <locale.h> - <clocale>
  • <math.h> - <cmath>
  • <setjmp.h> - <csetjmp>
  • <signal.h> - <csignal>
  • <stdarg.h> - <cstdarg>
  • <stddef.h> - <cstddef>
  • <stdio.h> - <cstdio>
  • <stdlib.h> - <cstdlib>
  • <string.h> - <cstring>
  • <time.h> - <ctime>
  • <wchar.h> - <cwchar>
  • <wtype.h> - <cwtype>

Intrebare: Care sunt headerele C++ standard?

Raspuns: Pe categorii, acestea sunt:
  • suport pentru limbaj:
    • tipuri: <cstddef>
    • implementare proprietati: <limits>, <climits>, <cfloat>
    • intiere si terminare: <cstdlib>
  • managementul memoriei dinamice: <new>
    • identificare de tipuri: <typeinfo>
    • tratarea exceptiilor: <exception>
    • support runtime: <cstdarg>, <csetjmp>, <ctime>, <csignal>, <cstdlib>
  • Diagnosticare:
    • clase exceptii: <stdexcept>
    • asertii: <cassert>
    • numere de eroare: <cerrno>
  • utilitati generale:
    • componente utilitare: <utility>
    • functori: <functional>
    • memorie: <memory>
    • data si timp: <ctime>
  • Stringuri:
    • caracteristici caractere: <string>
    • clase string: <string>
    • utilitati pentru secvente terminate cu caracterul null: <cctype>, <cwctype>, <cstring>, <cwchar>, <cstdlib>
  • Localizare:
    • Locale: <locale>
    • locale din biblioteca C: <clocale>
  • Containere:
    • secvente: <deque>, <list>, <queue>, <stack>, <vector>
    • containere asociative: <map>, <set>
    • Bitset: <bitset>
    • Iteratori: <iterator>
  • Algoritmi:
    • operatii pe secvente: <algorithm>
    • algoritmi biblioteca C: <cstdlib>
  • Numerice:
    • numere complexe: <complex>
    • siruri numerice: <valarray>
    • operatii generice: <numeric>
    • biblioteca C: <cmath>, <cstdlib>
  • Intrare/Iesire:
    • declaratii forward: <iosfwd>
    • obiecte iostream standard: <iostream>
    • clase de baza iostream: <ios>
    • buffere de streamuri: <streambuf>
    • formatare si manipulare: <istream>, <ostream>, <iomanip>
    • stream-uri pentru string-uri: <sstream>, <cstdlib>
    • stream-uri pentru fisiere: <fstream>, <cstdio>, <cwchar>

Intrebare: Pot folosi in continuare versiune de extensii a headerelor C (stdlib.h, stdio.h, etc.)?

Raspuns: Toate compilatoarele conforme standardului suporta cele 18 headere depreciate cu extensia .h (stdlib.h, stdio.h, etc.). Codul scris folosind aceste fisiere este inca portabil, dar s-ar putea sa nu mai fie in viitor. Este insa putin probabil ca aceste fisiere sa nu mai fie distribuite si in continuare.


Intrebare: Pot folosi in continuare headerele ne-standard C++ (iostream.h, fstream.h, vector.h, etc.)?

Raspuns: Aceste fisiere nu au fost niciodata parte a standardului C++. Cele mai multe compilatoare suporta aceste headere iar unele compilatoare invechite, nu le suporta decat pe acestea. Compilatoarele moderene insa, cum sunt cele de la Microsoft incepand cu VC++ 2003, nu mai distribuie aceste fisiere. Este recomandata folosirea celor standard (fara extensia .h).


Next FAQ >>


Marius Bancila
Fondator Codexpert, Microsoft MVP VC++
Site personal | Blog

Post Reply