Formatovany tisk pro 8bit

Miroslav Mraz mrazik na volny.cz
Úterý Duben 23 11:40:40 CEST 2024


V C++ se prostě nepoužívá, protože není potřeba. Není potřeba ani v C99, 
můžete prostě napsat (je to jen ilustrace, prakticky je to blbost)

void test () {
   const int value = -123456;
   const char * fmt = "value = %d\n";
   // jen spočti výslednou délku výpisu
   const int l = snprintf(NULL, 0, fmt, value);
   printf("len = %d\n", l);
   {
   //char * buffer = alloca (l + 1);  // postaru
     char buffer [l + 1];             // C99
     snprintf(buffer, l, fmt, value); // výpis
     puts(buffer);
   }
   /* ... zde je buffer již uvolněn */
}
A ještě poznámka k vlastní implementaci printf. Pro gcc/clang je dobré 
deklarovat funkci v hlavičce např. takto
extern int printf (const char *__restrict fmt, ...) 
__attribute__((__format__(__printf__, 1, 2)));

Překladač pak zkontroluje správnost formátovacích značek podle 
argumentů. Blbě se to hledá v dokumentaci, když nevíte, že to jde.

Mrazík


On 23. 04. 24 9:05, Jan Waclawek wrote:
> ...
> alloca() alokuje miesto na zasobniku, akoby sa jednalo o lokalnu premennu,
> t.j. vobec netreba mechanizmy okolo malloc() aj s ich sprievodnymi javmi.
> Znova, neviem, ci v C++ je vobec k dispozicii, ...


Další informace o konferenci Hw-list