Является ли часть C библиотеки C ++ автоматически C99? - PullRequest
2 голосов
/ 27 февраля 2011

Все ли функции в совместимой реализации C ++ 98/03 / 0x полностью совместимы с C99?

Я думал, что C ++ 0x добавил некоторые функции C99 ( language ), но никогда не слышал и не читал ничего определенного о функциях библиотеки C.

Чтобы избежать путаницы, я говорю о программе на C ++, использующей функции, объявленные в наборе заголовков <c*>.

Спасибо.

Ответы [ 2 ]

7 голосов
/ 27 февраля 2011

Большая часть стандартной библиотеки C99 была импортирована в C ++ 0X, но не все. Из памяти, в то, что не было импортировано, есть

  • <ctgmath> просто включает <ccomplex> и <cmath>,
  • <ccomplex> ведет себя так, как будто оно включено <complex>
  • <cmath> имеет довольно много настроек (обеспечивая функции перегрузки и шаблонов, дополняющие C99)
  • Некоторые другие заголовки (<cstdbool>, <iso646.h>, ...) имеют настройки для учета различий между языками (bool примитивен в C ++, макрос, предоставляемый <stdbool.h> в C, например), но ничего из области математической части.

Заголовки <xxx.h>, чья форма <cxx> не работает, так как версия C99 просто объявляет содержимое <cxxx> в глобальном пространстве имен, они не ближе к содержимому C99 <xxx.h>.

Связанная вещь: C ++ 0X предоставляет некоторые заголовки в формах cxxx и xxx.h, которые не определены в C99 (<cstdalign> и <cuchar>, второй определяется в C TR)

(я вспомнил, что набор математических функций из C99 был помещен в TR1, но не сохранен в C ++ 0X, я ошибался, что этот набор математических функций не был частью C99 в первую очередь).

4 голосов
/ 27 февраля 2011

Нет. C ++ 03 соответствует ANSI C89 / ISO C90, а не C99.

Ожидается, что будущий стандарт C ++ 0x будет в некоторой степени приведен в соответствие с C99. См. Пункт 17.6.1.2 в текущем проекте , в котором перечислены ccomplex, cinttypes, cstdint и т. Д. Обратите внимание, что, как упоминает AProgrammer, некоторые заголовки не совсем одинаковы; далее, что заголовок cuchar соответствует техническому отчету C 19769 , а не C99.

...