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

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

Если нет, какая из функций находится в С++ и которые не являются?

Ответ 1

Следующие функции 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-функции не поддерживаются С++:

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

Ответ 2

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