FishHook
Ну не код же эти гигабайты занимает, в самом то деле.
Код, не код - один хрен. Код там точно такой же неэкономный.
FishHook
на этом сейчас никто не экономит, вот и гагабайты выходят
Тогда, как и сейчас, тоже были такие неэкономные, это свойственно для всех времён. Я помню игры на сотни мегабайт, которые были по функционалу не более, чем лайнс или тетрис. Известно, чем они закончили - о них даже никто не помнит, что они вообще были когда-то. А есть игры типа танчиков с восьмибитки, про которые до сих пор статьи появляются с восхищением как это всё засунули в 256 байт.
Не зря про fortress написал, реально квейк и квейк, только не на 300 мегов, а на 15 гигов.
doza_and
Не кое чего нет, а более жесткие проверки типов.
Да, и как же так получилось, что C - подмножество, но код не компилируется в C++?
doza_and
Если вы возьмете другой компилятор С то тоже будут аналогичные выкрутасы и потребуется корректировать код.
Не, это стандарт, в любом компиляторе C он скомпилируется. Почему? Потому что в стандарте C разрешено присваивать void'овые указатели в обе стороны без всяких приведений.
doza_and
При этом вы можете использовать плюсовой компилятор, Я не знаю полезных свойств сишного компилятора которые отсутствуют в плюсовом компиляторе.
Это другой язык с другими правилами. Он один и тот же код компилирует в разные программы. Это как буква “с” в русском языке и буква “c” в английском языке, выглядят они идентично, а произносятся по-разному.
В C++ можно объявлять переменную до первого оператора, а в C, который якобы является подмножеством, - нет. Только потом это в C добавили в 99 году.
doza_and
может на ваш вкус ее перегнули в C++.
Понимаешь, там просто взяли и нивелировали то, что было в C, - лаконичность языковых конструкций. В C специально сделали фигурные скобки вместо паскалевских begin и end, чтобы кода было меньше. А Страуструп на это положил и снова стал вводить и лишние конструкции, и длинные конструкции, убирать ограничения, которые нужны. Почему Go (свежий язык) такой минималистичный? Да потому что это правильно.
doza_and
На мой вкус в C++ принципиально наличие template которые позволяют снизить ограничения накладываемые типизацией.
Классы, шаблоны, пространства имён, снятые ограничения на длину имён - это всё, что надо в C. Ну, итераторы, может быть. Но никак не десяток умных и полуумных указателей, десяток разновидностей приведений типов, когда это вообще мало где нужно, новые ненужные ключевые слова, медленные потоки вывода.
Вот в C такое запрещено, в C++ зачем-то разрешили определять переменные в условиях:
#include <iostream>
using namespace std;
int main()
{
int n = 1;
if (int n = 2) cout << n << endl;
return 0;
}
doza_and
Валидный сишный код и невалидный код для C++ (опять более жесткие проверки типов).
Это не из-за проверки типов, а из-за того, что раньше в C они вообще не проверялись у аргументов, поэтому для обратной совместимости со старым кодом в C ввели void. И это называется определением функции в старом стиле, тогда как в C++ никакого старого стиля нет.
http://c-faq.com/ansi/maindecl.htmlСтарый стиль означает, что аргументы передаваемые в функцию, не проверяются ни по количеству, ни по типам. У них там ещё разные преобразования типов аргументов при передаче в зависимости от стиля.
doza_and
Но для вызова с точки зрения ОС разницы помоему нет. В C++ логично было конечно генерировать ошибку при передаче аргументов программе которая декларируется как int main(void); Но увы, исторические корни ….
Тут речь вообще про любые функции, что они могут быть записаны в коде вот так, но в разных компиляторах (для разных языков) будут восприняты по-разному. А main() - это распространённая ошибка цппшников, когда они код на C пишут. Подловил одну бабу на зарубежном форуме на этой теме ;) Она там выпендривалась, а я ей говорю “что ж у тебя, у такой умной, код на C неправильно записан?”, так и срубил ферзюшку.