## Code Organization and Semantics
-- For our codebase we intend to use ISO C11 *with* GNU extensions (aka
- "gnu11"). Public APIs (i.e. those we expose via `libsystemd.so`
+- For our codebase we intend to use ISO C17 *with* GNU extensions (aka
+ "gnu17"). Public APIs (i.e. those we expose via `libsystemd.so`
i.e. `systemd/sd-*.h`) should only use ISO C89 however (with a very limited
set of conservative and common extensions, such as fixed size integer types
- from `<inttypes.h>`), so that we don't force consuming programs into C11
+ from `<inttypes.h>`), so that we don't force consuming programs into C17
mode. (This discrepancy in particular means one thing: internally we use C99
`bool` booleans, externally C89-compatible `int` booleans which generally
have different size in memory and slightly different semantics, also see
below.) Both for internal and external code it's OK to use even newer
- features and GCC extension than "gnu11", as long as there's reasonable
+ features and GCC extension than "gnu17", as long as there's reasonable
fallback #ifdeffery in place to ensure compatibility is retained with older
compilers.
version : files('meson.version'),
license : 'LGPLv2+',
default_options: [
- 'c_std=gnu11',
+ 'c_std=gnu17',
'prefix=/usr',
'sysconfdir=/etc',
'localstatedir=/var',
if conf.get('BPF_FRAMEWORK') == 1
bpf_clang_flags = [
- '-std=gnu11',
+ '-std=gnu17',
'-Wno-compare-distinct-pointer-types',
'-fno-stack-protector',
'-O2',
]
bpf_gcc_flags = [
- '-std=gnu11',
+ '-std=gnu17',
'-fno-stack-protector',
'-fno-ssa-phiopt',
'-O2',
#if HAVE_THREADS_H
# include <threads.h>
#elif !(defined(thread_local))
-# if __STDC_VERSION__ >= 201112L && !(defined(__STDC_NO_THREADS__))
+# ifndef __STDC_NO_THREADS__
# define thread_local _Thread_local
# else
# define thread_local __thread