c prefix i *.h

Błędzący
  • Rejestracja:około 11 lat
  • Ostatnio:około 11 lat
  • Lokalizacja:Polska
  • Postów:4
0

Witam,
zastanawia mnie czy:

Kopiuj
#include<cmath>

i

Kopiuj
#include<math.h>

robią to samo? Gdzieś wyczytałem, że druga wersja jest z c i definiuje coś globalnie, a pierwsza w przestrzeni nazw. Ale niestety wiem tylko tyle.

Zastanawia mnie też czemu jak się dołącza np:

Kopiuj
#include<iostream>

to pomija się ".h" oraz czym różni się zapis:

Kopiuj
#include "cos.h" 

od

Kopiuj
#include <cos.h> 

Pozdrawiam

Elles
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 11 lat
  • Postów:15
2
edytowany 2x, ostatnio: Elles
Błędzący
Już biorę się za czytanie 2 linku, dzięki.
Błędzący
Jeśli możesz to edytuj swojego posta i dorzuć trzeci link(ten od namespace) jaki jest w komentarzu tak aby ktoś ko znajdzie tą dyskusję nie miał problemów z znalezieniem odpowiedzi :)
Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

@Błędzący
math.h to nagłówek z C a cmath to nagłówek z C++
include z "" szuka w katalogu projektu nagłówka do zalączenia a z <> szuka w naglówkach w ścieżce do zainstalowanych bibliotek


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
Elles
no chyba nie do końca tak jest w pkt 2. polecam przeczytać standard czyli 2 mój link, ale szybko już wydano wyrok, sami eksperci http://ideone.com/pEw0Yj
Shalom
@Elles wszystko w tym języku jest implementation-dependent ;) Ja napisałem jak zwykle bywa :)
Błędzący
Czyli jeśli np. używam SDL2 w projekcie to lepiej pliki nagłówkowe SDL-a zawierać w "<>"?
Elles
@Shalom no luz, ale nie możemy uczyć nowych jak to bywa, tylko jak jest :) pozdrawiam @Błędzący ja w swoim projekcie wrzucam <> wszystko co jest z zewnątrz dla danej biblioteki, a w "" wszystko co znajdue sie w tej samej bibliotece
Błędzący
  • Rejestracja:około 11 lat
  • Ostatnio:około 11 lat
  • Lokalizacja:Polska
  • Postów:4
0

Dziękuję wam obojgu. Z linku wyłuskałem, że:

Including cstdio imports the symbol names in std namespace and possibly in Global namespace.
Including stdio.h imports the symbol names in Global namespace and possibly in std namespace.

co mnie przekonuje do użycia wersji z .h.

edytowany 1x, ostatnio: Błędzący
Zobacz pozostałe 5 komentarzy
n0name_l
Nie spowolni na tyle, zeby ktokolwiek to odczul. W sensie uzycie using namespace.
Błędzący
To nieodczuwalne spowolnienie to tylko w czasie kompilacji?
Elles
ogólnie nie polecam używanie using namespace std w global namespace ani w sumie nigdzie http://stackoverflow.com/questions/6474756/where-to-put-using-namespace-std, chcesz użyć czegoś z STL to użyj std:: i tyle, zawsze wiadomo o co Ci wtedy chodzi
Azarien
nie ma żadnej mierzalnej różnicy w czasie kompilacji, a już na pewno żadnej w czasie działania programu.
Błędzący
Przyjąłem, przeczytałem, zrozumiałem :) Dzięki za pomocne linki :)
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:4 minuty
1

ale po co ci te funkcje w globalnej przestrzeni nazw, po to wymyślili nagłówki bez .h żeby używały przestrzeni std::.

Robisz tak:

Kopiuj
#include <cmath>
#include <iostream>
using namespace std;

i używasz wszystkich funkcji bez konieczności pisania std::.

oraz czym różni się zapis:
#include "cos.h"
od
#include <cos.h>

<cos.h> jest nagłówkiem systemowym, a "cos.h" jest nagłówkiem należącym do twojego projektu. upraszczam, ale taka jest generalna zasada.

Zastanawia mnie też czemu jak się dołącza np:
#include<iostream>
to pomija się ".h"
Bo tak sobie wymyślili, że ten nagłówek ma się nazywać iostream a nie iostream.h. Równie dobrze mogliby nazwać aaa.iostream.bbb ale wtedy też byś się pytał dlaczego tak :-)

edytowany 4x, ostatnio: Azarien
Błędzący
Zostałem o tym poinformowany w komentarzach do mojej ostatniej wypowiedzi, ale i tak dzięki :) Co do edita: racja i tak bym pytał :D Do edit2: wolę bez namespace - @Elles dał linka gdzie jasno jest wytłumaczone czemu to ZUO.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.