Knihovny stdarg.h a limits.h

Knihovna stdarg.h

Tato knihovna slouží funkcím s proměnlivým počtem argumentů. Popis maker, které obsahuje a jejich použití je probráno v kapitole o proměnlivém počtu argumentů.

Funkce vprintf()

Funkce vprintf() dělá to samé co printf(), jen má trochu jiné argumenty.

int vprintf(const char *format, va_list ap);

Tahle funkce se vám bude hodit, když budete chtít napsat podobnou funkci jako printf() s proměnlivým počtem argumentů.

  1. /*------------------------------------------------*/
  2. /* c23/vprintf1.c                                 */
  3.  
  4. #include <stdio.h>
  5. #include <stdarg.h>
  6.  
  7. int printf_v_ramecku(const char *format, ...)
  8. {
  9.         int n;
  10.         va_list ap;
  11.         va_start(ap, format);
  12.         printf("***********************************\n");
  13.         printf("* ");
  14.         n = vprintf(format, ap);
  15.         printf(" *\n");
  16.         printf("***********************************\n");
  17.         va_end(ap);
  18.         return n;
  19. }
  20.  
  21. int main(void) {
  22.         (void) printf_v_ramecku("%s %5.5f", "Hello world!",1.0/3);
  23.         return 0;
  24. }
  25.  
  26. /*------------------------------------------------*/

Výstup v programu:

***********************************
* Hello world! 0.33333 *
***********************************

Existují ještě funkce vsprintf() a vsnprintf(), které jsou obdobou funkcí sprintf() a snprintf().

Knihovna limits.h

Knihovna <limits.h> obsahuje makra určující rozsah hodnot celočíselných datových typů. Tyto makra lze použít i v preprocesoru pro podmíněný překlad, jinak se nejčastěji používají v podmínkách programu. Hodnoty, které vidíte v tabulce, jsou jen orientační a v různých implementacích překladačů se liší (jinak by snad ani neměli význam). Například INT_MAX je pro 16bitové překladače 32767 a pro 32bitové 2147483647. Makra začínající písmenem U jsou pro čísla unsigned (čísla bez znaménka, např UINT_MAX. Jde vždy o hodnotu MAX, protože MIN je u čísel bez znaménka pochopitelně 0 (např. UINT_MIN není definováno)).

Konstanty z knihovny <limits.h>
Makro Hodnota Význam
CHAR_BIT 8 Počet bitů v datovém typu char.
SCHAR_MIN -128 Minimální hodnota typu signed char (typ char se znaménkem).
SCHAR_MAX 127 Maximální hodnota typu signed char
UCHAR_MAX 255 Maximální hodnota typu unsigned char
SHRT_MIN -32768 Minimální hodnota typu signed short int (krátké celé číslo se znaménkem)
SHRT_MAX 32767 Maximální hodnota typu signed short int
USHRT_MAX 65535 Maximální hodnota typu unsigned short int
INT_MIN (-INT_MAX -1) Minimální hodnota typu signed int
INT_MAX 2147483647 Maximální hodnota typu signed int
UINT_MAX 4294967295U Maximální hodnota typu unsigned int
LONG_MAX 2147483647L  
LONG_MIN (-LONG_MAX - 1L)  
ULONG_MAX 4294967295UL  
Komentář Hlášení chyby
Created: 29.8.2003
Last updated: 28.8.2014