From: Keith.S.Thompson+u@gmail.com
Thiago Adams writes:
> On 10/21/2025 2:26 PM, Keith Thompson wrote:
>> Thiago Adams writes:
>>> On 10/20/2025 7:19 PM, Keith Thompson wrote:
>> [...]
>>>> That raises another issue.
>>>> The header was introduced in C99. In C99, C11, and C17,
>>>> that header defines char16_t and char32_t. C23 introduces char8_t.
>>>
>>> I think for all these typedefs related with language concepts, like
>>> size_t which is related with sizeof, char8_t which is related with
>>> u8"" char16_t u"", char32_t U""... etc.. should be built-in typedefs.
>>>
>>> And even others that does not have a association with language
>>> features like int16_t.
>> By "built-in typedefs", do you mean typedefs that are visible
>> without
>> a #include?
>>
>
> yes.
>
>> That would be unprecedented, but I suppose it could work. But I'm not
>> sure it would be all that advantageous. The type of the result of
>> sizeof is some implementation-defined unsigned integer type. The
>> header merely provides a consistent name for that type.
>> I can see that having language features depend (indirectly) on types
>> defined in library headers is a bit messy, but I don't think it causes
>> any real problems.
>>
>
>
> It's not really a problem, but it depends on the includes, which in
> turn depend on the preprocessor.
>
> It seems like the language is partially configured through macros and
> typedefs in includes.
The way I'd describe it is that the type of a sizeof expression is
chosen by the compiler, and the definition of size_t in
documents that choice and makes it visible to programmers.
> Some types that have direct relation with the language:
>
> typedef typeof_unqual(sizeof(0)) size_t;
> typedef typeof_unqual(((char*)1)-((char*)0)) ptrdiff_t;
> typedef typeof_unqual(u8' ') char8_t;
> typedef typeof_unqual(u' ') char16_t;
> typedef typeof_unqual(U' ') char32_t;
> typedef typeof_unqual(L' ') wchar_t;
> typedef typeof_unqual(nullptr) nullptr_t;
>
> I think it does not make sense to have to include a file to describe
> size_t because we can use sizeof without having to include anything.
I suppose if I were defining a new language from scratch, I probably
wouldn't have those types defined in library headers. I might have
made size_t a keyword, for example.
One data point: C++ has wchar_t as a keyword, while C defines it as
a typedef in . C++'s wchar_t has the same representation
as one of the other integral types, called its underlying type.
That could have been a nice approach for C, but I'd say it's too
late to fix it, and the benefits aren't worth the cost.
--
Keith Thompson (The_Other_Keith) Keith.S.Thompson+u@gmail.com
void Void(void) { Void(); } /* The recursive call of the void */
--- SoupGate-Win32 v1.05
* Origin: you cannot sedate... all the things you hate (1:229/2)
|