On Tue, Aug 19, 2025 at 10:48:27PM +0200, Walter Alejandro Iglesias wrote:
> Hello Ingo,
>
> On Tue, Aug 19, 2025 at 05:39:13PM +0200, Ingo Schwarze wrote:
> > Hi Walter,
> >
> > Walter Alejandro Iglesias wrote on Mon, Aug 18, 2025 at 06:40:04PM +0200:
> >
> > > Question for the experts. Let's take the following example:
> > >
> > > ----->8------------->8--------------------
> > > #include <stdio.h>
> > > #include <string.h>
> > > #include <wchar.h>
> > >
> > > #define period 0x2e
> > > #define question 0x3f
> > > #define exclam 0x21
> > > #define ellipsis L'\u2026'
> > >
> > > const wchar_t p[] = { period, question, exclam, ellipsis };
> >
> > In addition to what otto@ said, this is bad style for more than one
> > reason.
> >
> > First of all, that data type of the constant "0x2e" is "int",
> > see for example C11 6.4.4.1 (Integer constants). Casting "int"
> > to "wchar_t" doesn't really make sense. On OpenBSD, it only
> > works because UTF-8 is the only supported character encoding *and*
> > wchar_t stores Unicode codepoints. But neither of these choices
> > are portable. What you want is (C11 6.4.4.4 Character constants):
> >
> > #define period L'.'
> > #define question L'?'
> > #define exclam L'!'
As I made this change to my code (https://en.roquesor.com/fmtroff.html)
the following reminded me why, at some point, I decided to switch to
hexadecimal notation.
#define backslash L'\\'
#define apostrophe L'\''
It isn't very confusing there, but among the arguments of a function or
a conditional...
--
Walter