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?
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++).
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.
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>
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.
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
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).
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