3 ms·
I mentioned this in another article of mine. Robert Seacord closed the loop on "how do I print numbers the non-shit way?" in C23 with N2680: https://thephd.dev
by __phantomderp 4y ago
I mentioned this in another article of mine. Robert Seacord closed the loop on "how do I print numbers the non-shit way?" in C23 with N2680:
https://thephd.dev/c-the-improvements-june-september-virtual-c-meeting#n2680---specific-width-length-modifiers https://thephd.dev/c-the-improvements-june-september-virtual...
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2680.pdf https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2680.pdf
- teddyh 4y agoGreat, thanks! But that only solves printing. How do I do the reverse operation? I.e. parsing a string to an integer type of an unknown size, while checking for overflow?
- __phantomderp 4y ago¯\_(ツ)_/¯ Someone's got to write a paper to get it in, hopefully based on some sort of existing practice.
- Someone 4y agoI think this would work: first, determine the range. For unsigned variants, we have whatever_max = (whatever)(-1), if it isn’t already defined. That makes parsing the unsigned variant relatively simple. Undefined behavior would be end-of-game, but unsigned addition and multiplication will not invoke that (if you need he,p, look at your favorite multiple-precision library for ideas about detecting wraparound) For parsing signed integers, derive the min and max values of the signed variant from the max value of the unsigned one ((whatever_max - 1) / 2 or something like that Then parse your input to the unsigned variant first, then check whether it fits in the unsigned version.