Upozornenie: Prezeranie týchto stránok je určené len pre návštevníkov nad 18 rokov!
Zásady ochrany osobných údajov.
Používaním tohto webu súhlasíte s uchovávaním cookies, ktoré slúžia na poskytovanie služieb, nastavenie reklám a analýzu návštevnosti. OK, súhlasím









A | B | C | D | E | F | G | H | CH | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

C2x

C2x is an informal name for the next (after C17) major C language standard revision.[1][2] It is expected to be voted on in 2023 and would therefore become C23.[3] The most recent publicly available draft of C23 was released on January 24, 2023.[4]

The first WG14 meeting for the C2x draft was held in October 2019, then virtual remote meetings were held due to COVID-19 pandemic in March/April 2020, October/November 2020, March/April 2021, August/September 2021, November/December 2021, January/February 2022, May 2022, July 2022, January 2023.[3][4]

Features

Changes integrated into the latest C23 draft are:[4]

Standard Library (new functions)
  • add memset_explicit() function in <string.h> to erase sensitive data, where memory store must always be performed regardless of optimizations.[5]
  • add memccpy() function in <string.h> to efficiently concatenate strings - similar to POSIX and SVID C extensions.[6]
  • add strdup() and strndup() functions in <string.h> to allocate a copy of a string – similar to POSIX and SVID C extensions.[7]
  • add memalignment() function in <stdlib.h> to determine the byte alignment of a pointer.[8]
  • add bit utility functions / macros / types in new header <stdbit.h> to examine many integer types. All start with stdc_ to minimize conflict with legacy code and 3rd party libraries.[9]
    • In the following, replace * with uc, us, ui, ul, ull for five function names, or blank for a type-generic macro.[9]
    • add stdc_count_ones*() and stdc_count_zeros*() to count number of 1 or 0 bits in value.[9]
    • add stdc_leading_ones*() and stdc_leading_zeros*() to count leading 1 or 0 bits in value.[9]
    • add stdc_trailing_ones*() and stdc_trailing_zeros*() to count trailing 1 or 0 bits in value.[9]
    • add stdc_first_leading_one*() and stdc_first_leading_zero*() to find first leading bit with 1 or 0 in value.[9]
    • add stdc_first_trailing_one*() and stdc_first_trailing_zero*() to find first trailing bit with 1 or 0 in value.[9]
    • add stdc_has_single_bit*() to determine if value an exact power of 2 (return true if and only if there is a single 1 bit).[9]
    • add stdc_bit_floor*() to determine the largest integral power of 2 that is not greater than value.[9]
    • add stdc_bit_ceil*() to determine the smallest integral power of 2 that is not less than value.[9]
    • add stdc_bit_width*() to determine number of bits to represent a value.[9]
Standard Library (existing functions)
  • add %b binary conversion specifier to printf() function family, prepending non-zero values with 0b, similar to how %x works. Implementations that previously didn't use %B as their own extension are encouraged to implement and prepend non-zero values with 0B, similar to how %X works.[10]
  • add %b binary conversion specifier to scanf() function family.[10]
  • add 0b and 0B binary conversion support to strtol() and wcstol() function families.[10]
  • make the functions bsearch(), bsearch_s(), memchr(), strchr(), strpbrk(), strrchr(), strstr(), and their wide counterparts wmemchr(), wcschr(), wcspbrk(), wcsrchr(), wcsstr() return a const qualified object if one was passed to them.[11]
Preprocessor
  • add #elifdef and #elifndef directives[12] are essentially equivalent to #elif defined and #elif !defined. Both directives were added to C++23 and GCC 12 too.[13]
  • add #embed directive for binary resource inclusion.[14]
  • add #warning directive for diagnostics.[15]
  • add __has_include allowing the availability of a header to be checked by preprocessor directives.[16]
  • add __has_c_attribute allowing the availability of an attribute to be checked by preprocessor directives.[17] (see C++ compatibility group below for new attribute feature)
  • add __VA_OPT__ functional macro for variadic macros which expands to its argument only if a variadic argument has been passed to the containing macro.[18]
Types
  • add nullptr_t type.[19]
  • add _BitInt(N) and unsigned _BitInt(N) types for bit-precise integers. Add BITINT_MAXWIDTH macro for maximum bit width.[20][21] Add ckd_add(), ckd_sub(), ckd_mul() macros for checked integer operations.[22]
  • Variably-modified types (but not VLAs which are automatic variables allocated on the stack) become a mandatory feature.[23]
  • Standardization of the typeof(...) operator.[24]
  • the meaning of the auto keyword was changed to cause type inference while also retaining its old meaning of a storage class specifier if used alongside a type.[25]
Constants
  • add nullptr constant for nullptr_t type.[19]
  • add wb and uwb integer literal suffixes for _BitInt(N) and unsigned _BitInt(N) types,[26] such as 6uwb yields an unsigned _BitInt(3), and -6wb yields a signed _BitInt(4) which has three value bits and one sign bit.
  • add 0b and 0B binary literal constant prefixes,[27] such as 0b10101010 (equating to 0xAA).
  • add ' digit separator to literal constants,[28] such as 0xFE'DC'BA'98 (equating to 0xFEDCBA98), 299'792'458 (equating to 299792458), 1.414'213'562 (equating to 1.414213562).
  • add the ability to specify the underlying type of an enum.[29]
C++ compatibility
  • add C++11 style attribute syntax[30] using double square brackets . Add attributes [31] deprecated,[32] fallthrough,[33] maybe_unused,[34] nodiscard,[35] and noreturn attribute for compatibility with C++11, then deprecate _Noreturn, noreturn, header <stdnoreturn.h> features introduced in C11.[36] Duplicate attributes are allowed for compatility with C++23.[37]
  • add u8 prefix for character literals to represent UTF-8 encoding for compatibility with C++17.[38][39]
  • add #elifdef and #elifndef preprocessing directives for compatibility with C++23.[12] (see preprocessor group above)
Other
  • Support for the ISO/IEC 60559:2020, the current version of the IEEE 754 standard for floating-point arithmetic, with extended binary floating-point arithmetic and (optional) decimal floating-point arithmetic.[40][41]
  • Single-argument _Static_assert.[42]
  • Labels can appear before declarations and at the end of compound statements.[43]
  • Unnamed parameters in function definitions.[44]
  • Better support for using const with arrays.[45]
  • Zero initialization with {} (including initialization of VLAs).[46]
  • alignas, alignof, bool, true, false, static_assert, thread_local become keywords.[47][48]
  • The constexpr specifier for objects but not functions, unlike C++'s equivalent.[49]
  • variadic functions no longer need a named argument before the ellipsis and the va_start macro no longer needs a second argument nor does it evaluate any argument after the first one if present.[50]
  • add the char8_t type for storing UTF-8 encoded data and change the type of u8 character constants and string literals to char8_t. Also, the functions mbrtoc8() and c8rtomb() to convert a narrow multibyte character to UTF-8 encoding and a single code point from UTF-8 to a narrow multibyte character representation respectively.[51]
  • allow storage class specifiers to appear in compound literal definition.[52]

Obsolete featuresedit

Some old obsolete features are either removed or deprecated:

  • Remove Trigraphs.[53]
  • Remove K&R function definitions/declarations.[54][55]
  • Remove representations for signed integers other than two's complement. Two's complement signed integer representation will be required.[56]
  • The *_HAS_SUBNORM macros in <float.h> are obsolescent features.[57]

Compiler supportedit

The GCC 9,[58] Clang 9.0,[59] and Pelles C 11.00[60] compilers implement an experimental compiler flag to support this standard.

See alsoedit

Referencesedit

  1. ^ "History of C". cppreference.com. 2022-06-27. Archived from the original on October 19, 2022.
  2. ^ "WG14-N2086 : C2x Charter". open-std.org. 2016-09-20. Archived from the original on December 22, 2022.
  3. ^ a b "WG14-N2984 : Revised C23 Schedule" (PDF). open-std.org. 2022-05-05. Archived (PDF) from the original on October 25, 2022.
  4. ^ a b c "WG14-N3088 : Draft for ISO/IEC 9899:2023" (PDF). open-std.org. January 24, 2023. Archived (PDF) from the original on January 25, 2023.
  5. ^ "WG14-N2897 : memset_explicit()". open-std.org. 2021-12-27. Archived from the original on October 25, 2022.
  6. ^ "WG14-N2349 : Toward more efficient string copying and concatenation". open-std.org. 2019-03-18. Archived from the original on September 30, 2022.
  7. ^ "WG14-N2353 : strdup() and strndup()". open-std.org. 2019-03-18. Archived from the original on December 24, 2022.
  8. ^ "WG14-N2974 : Queryable pointer alignment" (PDF). open-std.org. 2022-04-15. Archived (PDF) from the original on October 13, 2022.
  9. ^ a b c d e f g h i j k "WG14-N3022 : Modern Bit Utilities". open-std.org. 2022-07-06. Archived from the original on December 24, 2022.
  10. ^ a b c "WG14-N2630 : formatted input/output of binary integer numbers" (PDF). open-std.org. 2021-01-01. Archived (PDF) from the original on December 14, 2022.
  11. ^ "WG14-N3020 : Qualifier-preserving standard library functions" (PDF). open-std.org. 2022-06-13. Archived (PDF) from the original on October 13, 2022.
  12. ^ a b "WG14-N2645 : Add support for preprocessing directives #elifdef and #elifndef" (PDF). open-std.org. 2020-01-25. Archived (PDF) from the original on November 28, 2022.
  13. ^ "GCC 12 Adds Support For New #elifdef #elifndef Directives". phoronix. May 12, 2021. Archived from the original on December 27, 2022.
  14. ^ "WG14-N3017 : #embed - a scannable, tooling-friendly binary resource inclusion mechanism". open-std.org. 2022-06-27. Archived from the original on December 24, 2022.
  15. ^ "WG14-N2686 : #warning" (PDF). open-std.org. 2022-07-22. Archived (PDF) from the original on November 28, 2022.
  16. ^ "WG14-N2799 : __has_include for C" (PDF). open-std.org. 2021-08-30. Archived (PDF) from the original on December 24, 2022.
  17. ^ "WG14-N2553 : Querying attribute support" (PDF). open-std.org. 2020-08-04. Archived (PDF) from the original on October 14, 2022.
  18. ^ "WG14-N3033 : Comma omission and comma deletion". open-std.org. 2022-07-20. Archived from the original on December 27, 2022.
  19. ^ a b "WR14-N3042 : Introduce the nullptr constant". open-std.org. 2022-07-22. Archived from the original on December 24, 2022.
  20. ^ "WG14-N2763 : Adding a Fundamental Type for N-bit integers" (PDF). open-std.org. 2021-06-21. Archived (PDF) from the original on December 27, 2022.
  21. ^ "WG14-N3035 : _BitInt Fixes" (PDF). open-std.org. 2022-07-21. Archived (PDF) from the original on October 13, 2022.
  22. ^ "WG14-N2867 : Checked N-Bit Integers" (PDF). open-std.org. 2021-11-28. Archived (PDF) from the original on December 14, 2022.
  23. ^ "WG14-N2778 : Variably-Modified Types" (PDF). open-std.org. 2021-07-11. Archived (PDF) from the original on December 22, 2022.
  24. ^ "WG14-N2899 : Not-so-magic - typeof for C". open-std.org. 2022-01-21. Archived from the original on December 24, 2022.
  25. ^ "WG14-N3007 : Type inference for object definitions". open-std.org. 2022-06-10. Archived from the original on December 24, 2022.
  26. ^ "WG14-N2775 : Literal suffixes for bit-precise integers" (PDF). open-std.org. 2021-07-13. Archived (PDF) from the original on December 27, 2022.
  27. ^ "WG14-N2549 : Allow for binary integer constants" (PDF). open-std.org. 2020-07-30. Archived (PDF) from the original on December 22, 2022.
  28. ^ "WG14-N2626 : Digit separators" (PDF). open-std.org. 2020-12-15. Archived (PDF) from the original on December 19, 2022.
  29. ^ "WG14-N3030 : Enhancements to Enumerations". open-std.org. 2022-07-19. Archived from the original on November 26, 2022.
  30. ^ "WG14-N2335 : Attributes in C" (PDF). open-std.org. 2019-03-09. Archived (PDF) from the original on October 26, 2022.
  31. ^ "WG14-N2554 : Minor attribute wording cleanups" (PDF). open-std.org. 2020-08-04. Archived (PDF) from the original on November 28, 2022.
  32. ^ "WG14-N2334 : The deprecated attribute" (PDF). open-std.org. 2019-01-22. Archived (PDF) from the original on October 19, 2022.
  33. ^ "WG14-N2408 : The fallthrough attribute" (PDF). open-std.org. 2019-08-11. Archived (PDF) from the original on December 25, 2022.
  34. ^ "WG14-N2270 : The maybe_unused attribute" (PDF). open-std.org. 2018-07-06. Archived (PDF) from the original on December 25, 2022.
  35. ^ "WG14-N2267 : The nodiscard attribute" (PDF). open-std.org. 2018-07-06. Archived (PDF) from the original on October 19, 2022.
  36. ^ "WG14-N2764 : The noreturn attribute" (PDF). open-std.org. 2021-06-21. Archived (PDF) from the original on December 25, 2022.
  37. ^ "WG14-N2557 : Allow Duplicate Attributes" (PDF). open-std.org. 2020-09-01. Archived (PDF) from the original on November 28, 2022.
  38. ^ "WG14-N2418 : Adding the u8 character prefix" (PDF). open-std.org. 2019-09-02. Archived (PDF) from the original on January 13, 2023.
  39. ^ What is the point of the UTF-8 character literals proposed for C++17?; Stack Overflow.
  40. ^ "WG14-N2341 : ISO/IEC TS 18661-2 - Floating-point extensions for C - Part 2: Decimal floating-point arithmetic" (PDF). open-std.org. February 26, 2019. Archived (PDF) from the original on December 27, 2022.
  41. ^ "WG14-N2601 : Annex X - IEC 60559 interchange and extended types" (PDF). open-std.org. October 15, 2020. Archived (PDF) from the original on December 27, 2022.
  42. ^ "Harmonizing static_assert with C++" (PDF).
  43. ^ "WG14-N2508 : Free Positioning of Labels Inside Compound Statements" (PDF). open-std.org. 2020-03-28. Archived (PDF) from the original on December 27, 2022.
  44. ^ "WG14-N2510 : Allowing unnamed parameters in a function definition" (PDF). open-std.org. 2020-04-09. Archived (PDF) from the original on December 24, 2022.
  45. ^ "WG14-N2607 : Compatibility of Pointers to Arrays with Qualifiers" (PDF). open-std.org. 2020-10-31. Archived (PDF) from the original on October 13, 2022.
  46. ^ "WG14-N2900 : Consistent, Warningless, and Intuitive Initialization with {}". open-std.org. 2022-01-01. Archived from the original on December 27, 2022.
  47. ^ "WG14-N2935 : Make false and true first-class language features" (PDF). open-std.org. 2022-02-15. Archived (PDF) from the original on November 21, 2022.
  48. ^ "WG14-N2934 : Revise spelling of keywords" (PDF). open-std.org. 2022-02-15. Archived (PDF) from the original on December 24, 2022.
  49. ^ "WG14-N3018 : The constexpr specifier for object definitions". open-std.org. 2022-07-06. Archived from the original on December 24, 2022.
  50. ^ "WG14-N2975 : Relax requirements for variadic parameter lists" (PDF). open-std.org. 2022-04-15. Archived (PDF) from the original on November 28, 2022.
  51. ^ "char8_t: A type for UTF-8 characters and strings (Revision 1)".
  52. ^ "WG14-N3038 : Introduce storage-class specifiers for compound literals". open-std.org. 2022-07-21. Archived from the original on November 26, 2022.
  53. ^ "WG14-N2940 : Removing trigraphs??!" (PDF). open-std.org. 2022-03-02. Archived (PDF) from the original on October 26, 2022.
  54. ^ "WG14-N2432 : Remove support for function definitions with identifier lists proposal" (PDF). open-std.org. September 25, 2019. Archived (PDF) from the original on December 27, 2022.
  55. ^ "WG14-N2841 : No function declarators without prototypes". open-std.org. 2021-10-10. Archived from the original on November 12, 2022.
  56. ^ "WG14-N2412 : Two's complement sign representation" (PDF). open-std.org. August 11, 2019. Archived (PDF) from the original on December 27, 2022.
  57. ^ "WG14-N2993 : Make *_HAS_SUBNORM be obsolescent". open-std.org. 2022-06-06. Archived from the original on December 5, 2022.
  58. ^ "GCC 9 Release Notes". GNU Project. Archived from the original on December 27, 2022.
  59. ^ "Clang 9.0 - add new language mode for C2x". LLVM Project Repository. May 14, 2019. Archived from the original on December 27, 2022.
  60. ^ "Pelles C - major changes between 10.00 and 11.00". smorgasbordet.com. Archived from the original on December 27, 2022.

External linksedit

Preceded by C language standards Latest
Zdroj:https://en.wikipedia.org?pojem=C2x
>Text je dostupný pod licencí Creative Commons Uveďte autora – Zachovejte licenci, případně za dalších podmínek. Podrobnosti naleznete na stránce Podmínky užití.
Zdroj: Wikipedia.org - čítajte viac o C2x





Text je dostupný za podmienok Creative Commons Attribution/Share-Alike License 3.0 Unported; prípadne za ďalších podmienok.
Podrobnejšie informácie nájdete na stránke Podmienky použitia.