Uživatel:Jkl~cswikiversity/Studuji cpp/Standardní knihovny
Chyby
editovat#include <errno.h> // blablabla chyba = errno; perror("nepodařilo se otevřít soubor - chyba "); // a je vymalováno, přilepí to popis chyby fprintf(stderr, "nepodařilo se otevřít soubor: %s\n", strerror(chyba)); //takhle bych to asi nedělal if (chyba >= 0 && chyba < sys_nerr) fprintf(stderr, "nepodařilo se otevřít soubor: %s\n",sys_errlist[chyba]); //to je moc dlouhý :-(
math.h
editovatJe nutné kompilovat s cc -lm !!
- modf - má rozdělit celou a desetinou část - nutno dostudovat
- fabs(x) - abs(x) v double
- fmod - zbytek po dělení dvou doublů
- pow(x,y) x^y
- log, log10, sqrt - klasika
time.h
editovattime_t t; //typ proměnné pro Unixový timestamp t = time(NULL); // jak překvapivé, že ...
- komplikovanější ukázka práce s datem je tady
pseudonáhodná čísla
editovat#include <stdlib.h> void srand(unsigned int seed); // odpovídá pascalskému "randomize" int rand(void); // 0 - RAND_MAX
Třídění
editovat- ve standardní knihovně je implementovaný quicksort a binární vyhledávání (nutné setříděné pole):
void qsort(void *base, size_t nmemb, size_t size, int (* compar)(const void *, const void *)); void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (* compar)(const void *, const void *));
- více zde
locale.h
editovatsetlocale(LC_ALL, ""); // uvozovky nastaví default int islapha(int c); /* Je znak písmeno? */ int isdigit(int c); /* Je znak číslice? */ int isalnum(int c); /* Je znak písmeno nebo číslice? */ int islower(int c); /* Je znak malé písmeno? */ int isupper(int c); /* Je znak velké písmeno? */ int isprint(int c); /* Je znak tisknutelný? */ int isspace(int c); /* Jde o "bílý" znak? (mezera, tab, ...) */ int tolower(int c); /* Velká písmena na malá, ostatní znaky nechat. */ int toupper(int c); /* Malá písmena na velká, ostatní znaky nechat. */
Přerušení běhu
editovatvoid abort(void); // okamžitě spadne s SIGABRT void exit(int status); // odpovídá return(int status) int atexit(void (*function)(void)); // nastaví funkci, která se má zavolat po ukočení exitem - je to FILO !!
Assert
editovat#include <assert.h> int main(void) { int pole[10]; int i; for (i = 0; i <= 10; i++) { assert(i < sizeof(pole) / sizeof(int)); // tady otestujeme, jestli nemá i divnou hodnotu pole[i] = 0; } return 0; }
pokud nechceme, aby to házelo assert error, tak nastavím
gcc assert.c -o assert -DNDEBUG