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