ISO C23 specification:
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3220.pdf sections 6.5.3.4, 6.7.5, 7.15.
C++11 specification:
https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf section 18.10.
POSIX specification:
https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/stdalign.h.html
Portability problems fixed by Gnulib:
<stdalign.h>
must be included before using
alignas
or alignof
. For example, GCC versions before 13 do not
support these keywords, which were standardized by C23.
On C23 and later platforms, <stdalign.h>
has no effect and need
not be included.
(Gnulib-using code should not include
<stdalign.h>
without also employing Gnulib’s now-deprecated
stdalign-h
module.)
<stdalign.h>
does not define alignof
.
alignof
macro returns too large values for
the types double
and long long
in GCC 4.7.0.
_Alignas
and _Alignof
keywords or macros.
This portability problem should not matter with code using this module,
as such code should use alignas
and alignof
instead.
<stdalign.h>
defines the macros
__alignas_is_defined
and
__alignof_is_defined
to 1.
In C23, these macros are not defined.
This portability problem should not matter with code using Gnulib’s
alignasof
module, as such code should use alignas
and
alignof
without checking these two macros. (Gnulib’s
now-deprecated stdalign-h
module defines these two macros.)
alignas
attribute in the
specifier-qualifier position of a member declaration.
Portability problems not fixed by Gnulib:
alignof
must be a
parenthesized type. Recent versions of GCC support an extension in
which the operand can also be a unary expression, as with
sizeof
. The Gnulib substitute does not support this extension.
alignof
cannot be a structure type containing a
flexible array member.
alignas
keyword or macro is not always supported.
Supported compilers include any compiler supporting C11 or later,
which includes GCC, IBM C, Sun C 5.9 and later,
and MSVC 7.0 and later.
alignas
of auto
variables (i.e.,
variables on the stack). They diagnose and ignore the alignment: Sun
C 5.11.
alignas
that are greater than 8: mingw.
alignas
to be a single integer constant, not an expression: MSVC 7.0 through
at least 10.0.
alignas
. The bug is fixed in Sun C 5.15, also known as Oracle
Developer Studio 12.6 (2017).
alignas
and alignof
are reserved words;
they might be macros.