На этой странице перечислены 53 функции, которые были новыми в C99 (т.е. они находятся на C99, но не на C89). Все эти функции также находятся в С++? Даже С++ 98?
Если нет, какая из функций находится в С++ и которые не являются?
На этой странице перечислены 53 функции, которые были новыми в C99 (т.е. они находятся на C99, но не на C89). Все эти функции также находятся в С++? Даже С++ 98?
Если нет, какая из функций находится в С++ и которые не являются?
Следующие функции C99 (ISO 9899: 1999) полностью поддерживаются С++ (ISO 14882: 2017):
(хотя заголовки библиотеки будут <cname>
, а не <name.h>
:
- поддержка библиотеки широкого символа в
<wchar.h>
и<wctype.h>
(изначально указанному в ISO/IEC 9899: 1990/Amd.1:1995).- типичные математические макросы в
<tgmath.h>
- функции long long int и библиотеки
- расширенные целые типы
- увеличены минимальные пределы перевода
- дополнительные характеристики с плавающей запятой в
<float.h>
- удалить неявный int
- надежное целочисленное деление
- универсальные имена символов (\ u и \U)
- расширенные идентификаторы
- шестнадцатеричные константы с плавающей запятой и% a и% A printf/scanf conversion спецификаторы
- //комментарии
- заданные ширины целочисленных типов и соответствующие библиотечные функции в
<inttypes.h>
и<stdint.h>
- удалить объявление неявной функции
- арифметика препроцессора, выполненная в intmax_t/uintmax_t
- смешанные декларации и утверждения
- новые области блоков для операторов выбора и итераций
- правила целочисленного типа константы
- правила целых рекламных кампаний
- семейство функций vscanf в
<stdio.h>
и<wchar.h>
- дополнительные функции математической библиотеки в
<math.h>
- обработка условий ошибки с помощью математических функций библиотеки (math_errhandling)
- доступ к среде с плавающей точкой в
<fenv.h>
- IEC 60559 (также известный как арифметика IEC 559 или IEEE)
- конечная запятая, разрешенная в объявлении enum
- % lf спецификатор преобразования разрешен в printf
- встроенные функции
- семейство функций snprintf в
<stdio.h>
- идентификаторы idempotent
- пустой аргумент макроса
- дополнительные предопределенные имена макросов
- Операция препроцессора Pragma
- стандартные прагмы
__func__
предопределенный идентификатор- макрос va_copy
- дополнительные параметры преобразования strftime
- Приложение для совместимости с LIA
- deprecate ungetc в начале двоичного файла
- удалить устаревшие параметры массива aliased
- преобразование массива в указатель не ограничивается lvalues
- ослабленные ограничения на инициализацию агрегата и объединения
- ослабленные ограничения на имена переносных заголовков
- return без выражения, не разрешенного в функции, которая возвращает значение (и наоборот) Versa)
- макросы с переменным числом аргументов
Следующие функции C99 имеют схожие функции в С++, но существуют различия в реализации и языки не совместимы с кодом:
- поддержка ограниченных наборов символов с помощью орграфов и
<iso646.h>
(изначально указано в ИСО/МЭК 9899: 1990/Amd.1:1995).- более точные правила псевдонимов через эффективный тип
- комплексная (и мнимая) поддержка в
<complex.h>
- boolean type в
<stdbool.h>
- правила совместимости нового типа структуры (совместимость тегов)
Следующие C99-функции не поддерживаются С++:
- ограниченные указатели
- массивы переменной длины
- Элементы гибкого массива
- статические и типы классификаторов в деклараторах массива
- составные литералы
- назначенные инициализаторы
Гибкие элементы массива не являются частью любого стандарта С++ (и dynarray было не адаптировано в С++). И есть много других менее используемых функций C99, которые не находятся на С++.