Является ли C # надмножеством C? - PullRequest
11 голосов
/ 26 января 2009

Является ли C # надмножеством C в любом случае, как Objective-C или C ++? Есть ли способ скомпилировать C онлайн с помощью конструкций таких флагов компилятора?

Ответы [ 8 ]

37 голосов
/ 26 января 2009

Одним словом, нет.

13 голосов
/ 26 января 2009

Не имеет никакого смысла. Он вдохновлен C (среди прочих), но это совершенно разные языки.

10 голосов
/ 26 января 2009

C # происходит из семейства "c-like" в том, что касается синтаксиса , но в архитектуре это больше похоже на Java (без указателей [ОК, как указано ниже, вы можете использовать их, но большинство людей не знают или не заботятся об этом], массивы проверяются, память собирается и т. д.).

Вы можете получить большую часть этого в C ++, но не в ядре.

8 голосов
/ 26 января 2009

Скажем так:

C и C# похожи как rm -rf . / и # rm -rf . / похожи

Короче говоря, никакой C не является подмножеством C #. Внешний вид многих управляющих структур основан на C. Например, for-loop, switch, while и так далее. В то же время C # запрещает потенциально опасные конструкции, такие как выпадение регистра в переключателе, когда забываете разрыв; или помещать целое число как условие if, где ожидается логическое значение. Приведенная выше цитата означает, что C # и C могут выглядеть очень похожими, но приводить к совершенно разным результатам. Если C не помешает вам удалить все из вашего раздела, C # защитит вас от этого по ошибке, образно говоря.

На другом уровне C позволяет вам приводить указатели к целым числам, перемещать их по кругу, приводить назад и затем получать доступ к ячейкам памяти, которые затем сохраняются в этом указателе. C не защитит вас от доступа к памяти, которая не выделена вами. Вы получите крах - в лучшем случае. C # - с другой стороны - будут исключения, которые замечают вас, когда вы делаете такие вещи, как доступ к объекту через нулевую ссылку.

4 голосов
/ 26 января 2009

C ++ также не является реальным надмножеством C (см. текст ссылки )

3 голосов
/ 26 января 2009

C # и C на самом деле не связаны (кроме аналогичного синтаксиса). C # записывается в машинный код из IL при запуске программы. C # не имеет указателей за исключением типов значений в этом стеке. C # полностью безопасен по типу, C - нет. C требует явного управления памятью, где C # является сборщиком мусора. Список различий можно продолжать и продолжать ...

2 голосов
/ 26 января 2009

C # очень отличается от C (а также C ++ очень отличается от C). Это не потому, что семантика, которая в конце не слишком различна, а из-за концепций, идей, стоящих за C #.

Когда вы программируете на C #, вы должны думать иначе , чем вы привыкли делать, если вы используете C: это основное отличие.

0 голосов
/ 13 ноября 2010

C является обязательным условием. C # является объектно-ориентированным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...