• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Biblioteka <cstdlib> czy <windows.h>

0 głosów
25,935 wizyt
pytanie zadane 8 czerwca 2015 w C i C++ przez Nabu Użytkownik (790 p.)
edycja 8 czerwca 2015 przez Nabu
Witam wszystkich. Moje pierwsze pytanie.

W lekcji nr 4, w przykładzie ze zgadywaniem losowej liczby mamy bibliotekę <cstdlib> i użyte 'liczba = rand()%1-100'. Natomiast w przykładzie z dużym lotkiem zamiast niej mamy <windows.h> i także 'liczba = rand()%49+1'.

Czy obie te biblioteki pokrywają się częściowo? Można stosować je zamiennie w niektórych przypadkach?

5 odpowiedzi

+4 głosów
odpowiedź 8 czerwca 2015 przez Dorion300 Szeryf (90,250 p.)
cstdlib jest lepszym pomysłem gdyż ta biblioteka nie tylko działa na Łindowsie ale i także na Linuxie.

A gdy użyjesz windows.h to będziesz mial błąd gdy skompilujesz do wersji linuxowej

 
Warto jeszcze dodać że biblioteczka Windows.h korzysta z cstdlib i ją includuje.

Jeśli ją includuje to możemy także my z niej korzystać.
+2 głosów
odpowiedź 8 czerwca 2015 przez Radfler VIP (101,030 p.)

Oczywiście, że <cstdlib> http://en.cppreference.com/w/cpp/header/cstdlib, gdyż:

1. Jest to nagłówek standardowy,

2. <windows.h> posiada elementy charakterystyczne dla windowsa i wg mnie początkujący programista nie powinien jej używać,

3. Wszystkie elementy z <cstdlib> powinny działać na różnych platformach,

4. <windows.h> załącza <cstdlib>, czyli wychodzi na to samo.

PS. dla więkoszości funkcji z <windows.h> są alternatywy w bibliotekach standardowych, np. dla funkcji Sleep():

#include <iostream>
#include <thread>
#include <chrono>
using namespace std;

int main() {

    cout << "Start" << endl;
    this_thread::sleep_for(chrono::milliseconds(2000)); // Taki tam Sleep()
    cout << "Stop" << endl;
}

 

0 głosów
odpowiedź 8 czerwca 2015 przez adrian17 Mentor (355,240 p.)
To proste - windows.h wewętrznie też potrzebuje tego nagłówka, więc gdzieś w jego środku znajduje się #include <stdlib.h>. Jeśli potrzebujesz tylko rand(), wystarczy <cstdlib>. (lub <random> do nowszego odpowiednika rand())
0 głosów
odpowiedź 8 czerwca 2015 przez draghan VIP (106,230 p.)

W żadnym wypadku te biblioteki nie są 'wymienne'. W nagłówku windows.h zadeklarowane są funkcje, struktury i inne ciekawe rzeczy charakterystyczne dla systemu Windows, natomiast cstdlib to nagłówek z biblioteki standardowej C++, odziedziczony z biblioteki standardowej C (co sugeruje przedrostek c-, w języku C odpowiada mu nagłówek stdlib.h). W ctsdlib zadeklarowane są funckje ogólnego użytku, jak atoi(), exit(), malloc() czy rand().

Jednakże funkcja rand() z obu nagłówków działa w ten sam sposób (nie gwarantuję, że dają takie same wyniki - wszystko zależy od konkretnej implementacji biblioteki standardowej).

0 głosów
odpowiedź 13 lutego 2021 przez Waran3 Początkujący (460 p.)

Temat <windows.h> mnie zainteresował więc postanowiłem coć tam skubnąć ale nie idzie. :-)

Wpisałem to ( programuję w C):

#include <windows.h>
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpszCmdLine, int iCmdShow)
{
    return 0;
}

...i same błędy.

Ostrzeżenie    C28251    Niespójna adnotacja dla „WinMain”: w tym wystąpieniu jest brak adnotacji. Patrz c:\program files (x86)\windows kits\10\include\10.0.18362.0\um\winbase.h(933).     Testy    L:\aplikacje_w_C\Testy\winapi.c    2   


Błąd    LNK2019    nierozpoznany symbol zewnętrzny _main przywołany w funkcji "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ)    Testy    L:\aplikacje_w_C\Testy\MSVCRTD.lib(exe_main.obj)    1   


Błąd    LNK1120    liczba nierozpoznanych elementów zewnętrznych: 1    Testy    L:\aplikacje_w_C\Testy\Debug\Testy.exe    1   
 

Odpalam to na Visual Studio Community 2019 - Win 10.
Proszę o chociaż o jakąś sugestię, gdzie szukać.

Pozdrawiam serdecznie

 

 

1
komentarz 13 lutego 2021 przez ScriptyChris Mędrzec (190,170 p.)

Ten temat jest z 2015 roku, więc swoim pytaniem go odkopujesz. Utwórz proszę nowy temat i swój kod wstaw w odpowiedni bloczek.

Podobne pytania

0 głosów
2 odpowiedzi 1,416 wizyt
pytanie zadane 22 stycznia 2018 w C i C++ przez Corgam Nowicjusz (170 p.)
0 głosów
2 odpowiedzi 1,434 wizyt
pytanie zadane 29 marca 2020 w C i C++ przez XiverKi Bywalec (2,050 p.)
0 głosów
1 odpowiedź 202 wizyt
pytanie zadane 20 stycznia 2019 w C i C++ przez Alan Kruszyński Obywatel (1,410 p.)

93,774 zapytań

142,731 odpowiedzi

323,383 komentarzy

63,378 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...