Różnica między # include I #include W C++

Jaka jest różnica między używaniem #include<filename> and #include<filename.h> w C++? Który z nich jest używany i dlaczego jest używany?

Author: Wolf, 2008-11-19

5 answers

C++ tylko include-files not found in the C standard never used filename.h . Od czasu pojawienia się pierwszego standardu C++ (1998) używają filename do własnych nagłówków.

Pliki dziedziczone przez Standard C stały się cfilename zamiast filename.h. Dziedziczone pliki C używane jak filename.h są przestarzałe, ale nadal częścią standardu C++.

Różnica polega na tym, że nazwy nie zdefiniowane jako makra w C znajdują się w przestrzeni nazw std:: w cfilename W C++, podczas gdy nazwy w filename.h znajdują się w przestrzeni nazw globalny zakres przestrzeni nazw. Więc znajdziesz ::size_t w stddef.h i std::size_t w cstddef. Oba są standardem C++, ale użycie:: size_t jest przestarzałe (patrz załącznik D do standardu C++).

To była różnica.

Dlaczego używasz ' filename.h'?

  • kompatybilność z kompilatorami C
  • kompatybilność z bardzo starymi kompilatorami C++

Dlaczego warto używać 'cfilename'?

  • nazwy są w przestrzeni nazw std:: . No name-starcia już nie.
  • [23]} nowe funkcje C++ (np. przeciążone funkcje matematyczne dla float, long)
  • C Compatibility Headers (filename.h) może zniknąć w przyszłości.
 29
Author: Johannes Schaub - litb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-08 14:40:32

#include <foo.h> było powszechne w kodzie C++ przed standardem C++. Standard zmienił go na #include <foo> z wszystkim z nagłówka umieszczonego w przestrzeni nazw std. (Podziękowania dla litb za zwrócenie uwagi, że standard nigdy nie pozwolił .nagłówki H.)

Nie dzieje się żadna magia, pierwszy szuka pliku o nazwie ' foo.h 'i drugi dla pliku o nazwie 'foo'. Są to dwa różne pliki w systemie plików. Standard zmienił właśnie nazwę pliku, który powinien być wliczony w cenę.

W większości kompilatorów stare nagłówki są nadal kompatybilne wstecznie( i kompatybilne z C), ale nowoczesne programy C++, które chcą przestrzegać standardu, nie powinny ich używać.

W przypadku standardowych nagłówków C, wersje C++ mają na początku c, więc nagłówek C

#include <stdio.h>

Staje się

#include <cstdio>
 17
Author: CAdaker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-19 13:58:22

Stary standard używał składni #include <filename.h>. Gdy przestrzenie nazw i szablony zostały dodane do języka, standard został zmieniony na #include <filename>.

Zrobiono to tak, aby wszystkie elementy biblioteki standardowej mogły być umieszczone w przestrzeni nazw std. Starszy kod, który nie miał pojęcia o przestrzeni nazw, nadal będzie działał, Ponieważ pliki #include <filename.h> nie używają przestrzeni nazw.

Nowy kod powinien zawsze używać formatu #include <filename>. Jeśli używasz starszego formatu, wszystkie zdefiniowane przez nie symbole zostaną umieszczone w globalna przestrzeń nazw zamiast std.

 4
Author: Ferruccio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-19 13:13:24

Jeśli mówimy o bibliotekach standardowych (bo inaczej w ogóle nie będą działać), różnica jest taka, że

#include< header >
//my code

Jest poprawnym sposobem wywołania nagłówka zgodnie ze standardem C++, podczas gdy

#include< header.h >
//my code

Jest przestarzały (w standardzie C++, ale nadal niezbędny zgodnie ze standardem C99) i pojawił się wraz z resztą bagażu C.

Więc powinieneś użyć:

#include< cmath >
//my code

Nie:

#include< math.h >
//my code
 2
Author: Robert Gould,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-19 11:16:33

Ci bezh to pliki nagłówkowe C++, podczas gdy te z .h to pliki nagłówkowe C. Dotyczy to tylko standardowych plików nagłówkowych w C++.

Jeśli dołączasz własne pliki lub pliki, które nie są częścią standardowego C++ , zawsze musisz wpisać pełną nazwę pliku(która może być dowolna).

 0
Author: Magnus Westin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-19 11:09:24