Все ли функции C99 также в C ++?

Эта страница перечисляет 53 функции, которые были новыми в C99 (то есть они в C99, но не в C89). Все ли эти функции есть и в C ++? Даже С ++ 98?

Если нет, то какие функции есть в C ++, а какие нет?

14

Решение

Следующие функции 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 ++:

  • ограниченные указатели
  • массивы переменной длины
  • члены гибкого массива
  • статические и классификаторы типов в объявлениях массива параметров
  • составные литералы
  • назначенные инициализаторы
28

Другие решения

Гибкие члены массива не являются частью какого-либо стандарта C ++ (и dynarray предложение было не адаптировано в C ++). И есть много других менее используемых функций C99, которых нет в C ++.

3

По вопросам рекламы [email protected]