Привет, *Harry*!
/среда, 06 апреля 2005/ *Harry Zhurov* писал(а) к *Andrey Solomatov* по поводу *Текстовые строки (было: Embedded OS):*
[кусь]
AS>> Угу. Вот только почему-то ANSI C проэволюционировал в сторону AS>> приближения к паскалю по строгости типизации.
HZ> С какого фига к паскалю-то? К С++!
А C++ на пустом месте рождался? Да и мало он был распространён на момент стандартизации.
AS>> Может быть вернёмся к C&R C?
HZ> А это что?
Керниган и Ритчи. Авторы, вообще-то, "исходного" языка C. Скажем, обявление функции: func() int a; char *c; { } /* это по ихнему */
[кусь]
HZ> Причем тут это? маллоки и прочее - это работа со свободной памятью, HZ> которая имеет отношение к менеджерам памяти и подобному. А прямое HZ> обращение к памяти - это прямое обращение к памяти. Или ты не знаешь HZ> как это делается?
Нет, не знаю. Расскажи.
[кусь]
HZ> Никакие не "50/50", а именно низкоуровневое (и поэтому опасное, но HZ> эффективное) средство для манипуляции объектами через их HZ> непосредственные адреса.
Вот только мне, почему-то, за ~15 лет понадобилось пару-тройку раз. Причём - исключительно в силу "грязности" алгоритма, потом я "это" безжалостно выкинул.
[кусь]
HZ> Эта... Я не знаток паскаля, но про рантаймовые проверки, например, HZ> при работе с массивом все же знаю. А ты нет?
Знаю конечно. А ещё в паскале можно подключать всякую отладочную информацию - в результате чего размер модуля растёт. ;)) Всё это опции, которые включаются ручками. Уж поверь мне на слово, пожалуйста.
[кусь]
HZ> Сколько программ на С++ ты написал? Сколько строк кода (хотя бы HZ> очень приблизительно) на С++ ты написал?
Мало, мало, успокойся. Штуки 3 - 4 -5 (если "до конца"). Ты всерьёз хочешь меня уверить, что в C++ легко "выйти за границы"? Вообще говоря, "свобода" в C всегда обуславливалась "мы не знаем, чего Вы хотите, поэтому вот Вам минимум, а за его границами Вы бегаете на свой страх и риск". В C++ больше возможностей описать разнообразное поведение именно _по правилам_. И возложить на компилер заботу следить за соблюдениями правил.
[кусь]
AS>> А чем ты предлагаешь пользоваться? AS>> Переписывать каждый раз все определение типа?
HZ> ??? А про typedef ты ничего не слышал?
Не люблю typedef. Лишняя прибамбасина, с достаточно невнятным синтаксисом. И вообще, если я в C++ пишу:
struct TAbc { // // Здесь дли-иинное определение структуры // }; /* TAbc */
то здесь достаточно ясно и понятно. И typedef не нужен (бо никакой функциональности не несёт). В C же надо писать:
struct { // // Здесь дли-иинное определение структуры // }TAbc;
Что, во первых, хуже читается - разделено имя типа и его описание; во вторых - тот самый struct; и в третьих - если не охота юзать struct - надо засовывать ещё невнятный typedef. Ну его, C++ лучшее. ;)) AS>> [кусь]
[кусь]
HZ> Кстати, какие вещи из С не компилируются в С++?
Это экзамен? На память - в C++ func() эквивалентно func(void), а в C - func(int); и с присвоением указателей на void есть какие-то тонкости (в С++ - _жёстче_ правила). Ну и плюс - перегрузка. Фактически при этом явного выхода за пределы С не происходит - просто делаешь набор get, отличающийся перечнем аргументов. А в С - низзяааа. ;))
[кусь]
HZ> И на какую платформу ты перешел в ++?
А я и тогда - и до, и после - сидел на писюке. А сейчас перешёл на эмбедды - и тихо матерюсь от реализаций C на них (кто там дифирамбы поет "стандартности C")?
---------------- Пишем: func() { ...
Верещание компилера: "Хачу декларацию, пачиму у Вас дефиниция без декларации?"
--------------- Добавляю: func(); func() { ...
Визги: "Какая-то непонятная декларация. Как Вы посмели переопределить тип функции func?"
-------------- Оказывается надо: func(void); func() { ...
Тьфу... Кто бы мог подумать...