aboutsummaryrefslogtreecommitdiffhomepage
path: root/doc/cstd.md
blob: 84dd9a295d752191932bb663d146b9014dd657d7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
A list of missing standard C features:

## ANSI/C89
  - K&R style function definitions with type declarations: `h(a, b) int a; double b; { ... }`

## C99
  - Variable-length arrays (VLAs)
  - Proper `long double` support in platforms with extended floats (currently equivalent to `double`)
  - `<tgmath.h>` header
  - digraphs
  - Universal character names (`\uXXXX`, `\UXXXXXXXX`)
  - IEEE 754 float support Annex F IEC 60559 (`FLT_EVAL_METHOD`, `FENV_ACCESS` pragma) (not even GCC or Clang care about this)

## C11
  - `_Alignas`, `max_align_t`
  - Multithreading support (`_Thread_local`, atomics)
  - `u8".."` string literals

## C23
  - Decimal floating-point types (`_Decimal32`, `_Decimal64`, and `_Decimal128`)
  - Bit-precise integers (`_BitInt`)
  - `nullptr`, `nullptr_t`
  - Binary integer constants
  - `char8_t`
  - Digit separator '
  - Attributes (`[[...]]` syntax)
  - Labels followed by declarations and }
  - `auto` for type inference, `typeof_unqual`, `constexpr`
  - `unreachable` macro in `<stddef.h>`
  - checked int arithmetic (`<stdckdint.h>`)
  - tagged type compatibility [N3037](https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3037.pdf)
  - storage class specifier for compound literals
  - preprocessor `#embed` directive, `__has_include`, `__has_c_attribute`
  - Pragmas for float rounding direction (`STDC FENV_ROUND`, `STDC FENV_DEC_ROUND`)
  - IEEE 754 decimal floats, interchange and extended types. various `<float.h>` macros,...