docs: Update toolchain requirement to C11

We have required C99 for a while; in the meantime, most C toolchains
have moved on to C11 or later as the default C standard.

We still allow for C99 toolchains, but in the future we are going to
require a C11 toolchain to build and use GLib.
This commit is contained in:
Emmanuele Bassi 2023-09-11 11:20:53 +01:00 committed by Philip Withnall
parent 9e680ff8f4
commit 5697c11f1f
2 changed files with 11 additions and 8 deletions

View File

@ -1,14 +1,15 @@
Toolchain/Compiler requirements
===
GLib requires a toolchain that supports C99.
GLib strongly recommends a toolchain that supports C11, and requires a toolchain
that supports C99.
GLib contains some fall back code that allows supporting toolchains that are not
fully C99-compatible.
fully C11-compatible.
GLib makes some assumptions about features of the C library and C preprocessor,
compiler and linker that may go beyond what C99 mandates. We will use features
beyond C99 if they are substantially useful and if they are supported in a wide
compiler and linker that may go beyond what C11 mandates. We will use features
beyond C11 if they are substantially useful and if they are supported in a wide
range of compilers.
In general, we are primarily interested in supporting these four compilers:
@ -116,11 +117,10 @@ _Hard requirement._
Your compiler must support `alloca()`, defined in `<alloca.h>` (or `<malloc.h>`
on Windows) and it must accept a non-constant argument.
(C11) support for type redefinition
C11 support for type redefinition
---
**This requirement has been temporarily suspended (on account of OpenBSD
carrying an old version of gcc) but it will probably return in the future.**
_Hard requirement._
Your compiler must allow “a typedef name [to] be redefined to denote the same
type as it currently does”, as per C11 §6.7, item 3.
@ -193,4 +193,3 @@ GLib [requires a C99 `stdint.h`](https://gitlab.gnome.org/GNOME/glib/-/merge_req
with all the usual sized integer types (`int8_t`, `uint64_t` and so on),
believed to be supported by all relevant Unix platforms/compilers, as well as
Microsoft compilers since MSVC 2013.

View File

@ -215,6 +215,10 @@ G_STATIC_ASSERT (G_SIGNEDNESS_OF (guint64) == 0);
G_STATIC_ASSERT (G_SIGNEDNESS_OF (int64_t) == 1);
G_STATIC_ASSERT (G_SIGNEDNESS_OF (uint64_t) == 0);
/* C11 §6.7, item 3 allows us to rely on this being allowed */
typedef struct Foo Foo;
typedef struct Foo Foo;
/**
* g_mem_gc_friendly:
*