Re: Formátovaný tisk bylo Re: sprintf - co delam blbe?
Miroslav Mraz
mrazik na volny.cz
Středa Duben 17 13:19:48 CEST 2024
Mě zmátlo, že z toho tak jak to bylo napsané
String fnc (...) {
char buf [11];
// ...
return buf;
}
není jasné, co to vlastně vrací. Pokud bych napsal
return String(buf);
nemusel bych koukat do zdrojáků a bylo by to stejné. Anonymní String se
instancuje voláním konstruktoru String(const char *cstr = ""). To je
vše. Ano, překladač přeuspořádá zásobník, je to dost brutální, ale
nemusíte se o to starat, dále se pak pracuje s kopií a její platnost
končí na konci bloku, kde se používá.
Jakýkoli String v C++ je hrůza a je lepší se tomu pokud možno vyhnout.
Mrazík
On 17. 04. 24 12:29, Jan Waclawek wrote:
>> Arduino nepouľívám, takľe mi také není jasné jak to přesně funguje, ale
>
> No ved je k dispozicii kompletna dokuemntacia.. ;-)
> https://github.com/arduino/ArduinoCore-API/blob/master/api/String.h
> https://github.com/arduino/ArduinoCore-API/blob/master/api/String.cpp
>
> Ale bez ohladu na to, kedze C++ nepouzivam a nepoznam, tak mi nie je jasne,
> ako a kedy sa ten anonymny objekt, ktory je nasledkom pouzitia triedy ako
> navratoveho typu, instancuje; resp. co je na zasobniku v akom poradi a
> akym sposobom a v ktorom okamihu sa tam ten buffer prenesie.
>
> Zaujima ma to preto, lebo toto je dost casty problem, kde by som chcel, aby
> nejaku pamat alokovala "leaf" funkcia a aby sa po jej "pouziti"
> automaticky ta pamat dealokovala. Tak ma zaujima, ako to ten C++ skutocne
> robi.
>
>> Jde to sice takhle dělat i v čistém C, ale není to zvykem.
>
> Neviem, ako by som v cistom C zabezpecil zivotnost toho buffra dlhsie ako
> je koniec funkcie, v ktorom bol definovany, a ako by som zabezpecil, aby
> po pouziti bol ten buffer "dealokovany". V asm si viem predstavit, ze by
> som pri navrate z tej funkcie preusporiadal zasobnik, ale pripada mi to
> dost brutalne.
>
> wek
Další informace o konferenci Hw-list