From: already5chosen@yahoo.com   
      
   On Sun, 11 Jan 2026 22:47:40 -0800   
   Keith Thompson wrote:   
      
   > Michael S writes:   
   > > On Sun, 11 Jan 2026 11:51:43 -0800   
   > > Tim Rentsch wrote:   
   > >> Michael S writes:   
   > [...]   
   > >> > Properties are:   
   > >> > a) uint32_t aliased to 'unsigned long'   
   > >> > b) 'unsigned int' is at least 32-bit wide.   
   > >>   
   > >> It seems unlikely that any implementation would make such a   
   > >> choice. Can you name one that does?   
   > >   
   > > Four out of four target for which I write C programs for living in   
   > > this decade:   
   > > - Altera Nios2 (nios2-elf-gcc)   
   > > - Arm Cortex-M bare metal (arm-none-eabi-gcc)   
   > > - Win32-i386, various compilers   
   > > - Win64-Amd64,various compilers   
   >   
   > I find that surprising. I just tried a test program that prints   
   > the name of the type uint32_t is an alias for (using _Generic),   
   > and it's alias to unsigned int on every implementation I tried.   
   > (Your properties are limited to systems with 32-bit int and long.)   
   >   
   > For an implementation where int and long are both 32 bits, it   
   > wouldn't have surprised me for uint32_t to be an alias either for   
   > unsigned int or for unsigned long, and I wouldn't care either way   
   > beyond idle curiosity, but all the implementations I've tried choose   
   > to use unsigned int.   
   >   
      
   Did you try any implementation that is not based on SysV ABI?   
      
   > > Well, if I would be pedantic, then in this decade I also wrote   
   > > several programs for Arm32 Linux, where I don't know whether   
   > > uint32_t is alias of 'unsigned int' or 'unsigned long', few   
   > > programs for AMD64 Linux, where I know that uint32_t is an alias of   
   > > 'unsigned long' and may be one program for ARM64 Linux that is the   
   > > same as AMD64 Linux. But all those outliers together constitute a   
   > > tiny fraction of the code that I wrote recently.   
   >   
   > One advantage of my approach is that I don't have to know or care   
   > what the underlying type of uint32_t is.   
   >   
      
   By 'you approach' you mean casting to 'unsigned long' and using %ld   
   formatter?   
   As I said in other post, ideologically I like it. The only reason I   
   don't adapt that approach myself is because 'unsigned long' is long   
   (many characters).   
   I'd do exactly that in case of int32_t, except that in practice   
   int32_t is very rare in my code and printing it rarer still.   
   [O.T.]   
   When I can, I try to use signed integer types in preference of unsigned   
   types, but those are mostly plain 'int' and ptrdiff_t, occasionally   
   int16_t, rarely 'long'. int32_t and int64_t are very rare.   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   
|