logo
volkov / C++ / Бьерн Страуструп-Справочное руководство по С++

R.18 Приложение b: Совместимость

Это приложение не относится к справочному руководству С++ и не

является определением конструкций языка.

Язык С++ основывается на С (описание в книге Кернигана и Ритчи,

78 г., дальше K&R) и включает большинство изменений, предложенных

в ANSI стандарте для С. При конвертировании программ на языках

С++, K&R C и ANSI C могут возникнуть трудности в связи с различным

вычислением в них выражений. Транслятор должен распознавать все различия

между С++ и ANSI C. Программы на С++ и ANSI C должны иметь одинаковый

смысл за исключением трех следующих случаев:

В языке С выражение sizeof('a') равно sizeof(int), а в С++

оно равно sizeof(char).

Если есть описание

enum e { A };

то sizeof(A) равно в С sizeof(int), тогда как в С++ оно равно sizeof(e)

и не обязано быть равно sizeof(int).

Имя структуры, описанной во внутреннем блоке, может скрывать имя

объекта, функции, элемента перечисления или типа из внешнего блока.

Приведем пример:

int x[99];

void f()

{

struct x { int a; };

sizeof(x); /* для C это размер массива */

/* а для C++ размер структуры */

}