Эта страница перечисляет 53 функции, которые были новыми в C99 (то есть они в C99, но не в C89). Все ли эти функции есть и в C ++? Даже С ++ 98?
Если нет, то какие функции есть в C ++, а какие нет?
Следующие функции C99 (ISO 9899: 1999) полностью поддерживаются C ++ (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
спецификаторы- // Комментарии
- указанные целочисленные типы ширины и соответствующие библиотечные функции в
<inttypes.h>
а также<stdint.h>
- удалить неявное объявление функции
- арифметика препроцессора выполняется в intmax_t / uintmax_t
- смешанные декларации и заявления
- новые области блока для операторов выбора и итерации
- правила целочисленных констант
- целочисленные правила продвижения
- семейство функций VSCANF в
<stdio.h>
а также<wchar.h>
- дополнительные функции математической библиотеки в
<math.h>
- обработка состояний ошибки с помощью функций математической библиотеки (math_errhandling)
- доступ к среде с плавающей точкой в
<fenv.h>
- Поддержка МЭК 60559 (также известная как арифметика МЭК 559 или IEEE)
- конечная запятая допускается в объявлении enum
- % lf спецификатор преобразования разрешен в printf
- встроенные функции
- семейство функций snprintf в
<stdio.h>
- классификаторы идемпотентного типа
- пустые аргументы макроса
- дополнительные предопределенные имена макросов
- Оператор предварительной обработки _Pragma
- стандартные прагмы
__func__
предопределенный идентификатор- макрос va_copy
- дополнительные спецификаторы преобразования strftime
- Приложение LIA совместимости
- не использовать ungetc в начале двоичного файла
- удалить устаревшие параметры псевдонима массива
- преобразование массива в указатель, не ограниченное lvalues
- смягченные ограничения на агрегатную и объединенную инициализацию
- смягченные ограничения на имена переносимых заголовков
- возврат без выражения не разрешен в функции, которая возвращает значение (и наоборот
Versa)- макросы с переменным количеством аргументов
Следующие функции C99 имеют аналогичное использование в C ++, но есть различия в реализации, и языки не совместимы с кодом:
- поддержка ограниченного набора символов с помощью орграфов и
<iso646.h>
(изначально указано
в ISO / IEC 9899: 1990 / Amd.1: 1995)- более точные правила наложения по эффективному типу
- комплексная (и мнимая) поддержка в
<complex.h>
- логический тип в
<stdbool.h>
- новые правила совместимости типов структур (совместимость тегов)
Следующие функции C99 не поддерживаются C ++:
- ограниченные указатели
- массивы переменной длины
- члены гибкого массива
- статические и классификаторы типов в объявлениях массива параметров
- составные литералы
- назначенные инициализаторы
Гибкие члены массива не являются частью какого-либо стандарта C ++ (и dynarray предложение было не адаптировано в C ++). И есть много других менее используемых функций C99, которых нет в C ++.