Войти на сайтРегистрацияЗабыли пароль?
Android
Меню
Топ-игры
Counter Strike 1.6 для Android
Каталог
Новинки
anxieest — Слив
Машера — слив с зубной щеткой (телеграм
Машера — слив с пультом (телеграм кружоч
Слив Машеры с Чупа Чупсом — тг кружочки
Слив Машеры с огурцом — слив телеграм кр
Слив Даши Дошик детский костюм
Парадокси — Слив Par4d0xy
Популярные статьи
Как сделать днс сервер на айфоне? (пошаговая инструкция ...
Смотрешка – как отключить подписку? (инструкция) – быст ...
Как сделать выдержку 30 секунд на айфоне? (инструкция) ...
Как изменить формат фото на айфоне? (пошаговая инструкц ...
Как включить вх в КС 2 через консоль с ботами? (инструк ...
Как изменить тему на айфоне? (инструкция) – быстрый спо ...
Как обновить Кинопоиск на телевизоре? (пошаговая инстру ...
Huawei Pura X2: необычный складной смартфон получит пре ...
Infinix GT 30: доступный игровой смартфон с триггерами
Как посмотреть подписки на айфоне? (инструкция) – прост ...


 Си++ не включает в себя Си
TexnoMozg
15 июня 2009 16:25
Сообщение #1


Руководитель проекта
  • 85

Репутация: 378
Группа: Администраторы
Сообщений: 13453
Регистрация: 14.04.2009
ICQ:3262504
Реклама
Несмотря на то что большая часть кода Си будет справедлива и для Си++, Си++ не является надмножеством Си и не включает его в себя. Существует и такой верный для Си код, который неверен для Си++. Это отличает его от Объектного Си, ещё одного усовершенствования Си для ООП, как раз являющегося надмножеством Си.

Например, следующий фрагмент кода корректен с точки зрения Си, но некорректен с точки зрения Си++:
typedef struct mystr {
int a;
int b;
} mystr;


Дело в том, что в Си идентификаторы структур (теги структур), то есть идентификаторы, используемые при описании структуры в качестве имени структуры, являются сущностями отдельного вида, имеющими обособленное пространство имён, тогда как в Си++ идентификатор структуры представляет собой попросту её тип. Таким образом, в языке Си вышеприведённый фрагмент вводит структуру mystr и новый тип mystr, тогда как в Си++ этот же фрагмент будет воспринят как попытка дважды описать тип с именем mystr.

Другим источником несовместимости являются добавленные ключевые слова. Так, описание переменной
int try;


является вполне корректным для Си, но заведомо ошибочным для Си++, поскольку слово try является в Си++ ключевым.

Существуют и другие различия. Например, Си++ не разрешает вызывать функцию main() внутри программы, в то время как в Си это действие правомерно. Кроме того, Си++ более строг в некоторых вопросах; например, он не допускает неявное приведение типов между несвязанными типами указателей и не разрешает использовать функции, которые ещё не объявлены.

Более того, код, верный для обоих языков, может давать разные результаты в зависимости от того, компилятором какого языка он оттранслирован. Например, на большинстве платформ следующая программа печатает «С», если компилируется компилятором Си, и «С++» — если компилятором Си++. Так происходит из-за того, что символьные константы в Си (например 'a') имеют тип int, а в Си++ — тип char, а размеры этих типов обычно различаются.
#include <stdio.h>

int main()
{
printf("%sn", (sizeof('a') == sizeof(char)) ? "C++" : "C");
return 0;
}

--------------------

*´¨)
¸.•´¸.•*´¨) ¸.•*¨)
(¸.•´ (¸.•` ¤ TexnoMozg.
Перейти в начало страницы
 
« · C++ · »
 Информация
Нужно зарегистрироваться, чтобы отвечать на форуме, а сейчас Вы, как Гости


  Сейчас: 4 декабря 2025 02:14