Re[16]: Достаточно ли знать С без знания С++ для устройства
От: eskimo82  
Дата: 05.09.14 08:40
Оценка: -3
C>>>А она есть. Сначала появился драфт в комитете С++, потом его принял комитет С.
E>>А перед этим появились различные интересные функции в компиляторах для Си.
C>А перед этим появилась первая бактерия.
Несомненно. Но поддержка атомиков появилась в С раньше чем в С++.

E>>>>1. В языке Си есть 3 непересекающихся (в отличии от C++) пространства имен — для struct, union, enum и глобальное для typedef. Твой код просто не соберется, ибо test_t не определен в глобальном пространстве имен. Он собрался бы, если бы ты написал struct test_t testit().

C>>>И що?
E>>Не позорься, вот и то.
C>Я это знаю прекрасно, мне просто непонятно причём тут это.
Очень хорошо, что ты знаеш это прекрасно. Осталось совсем малое — писать код без ошибок.

E>>>>2. Возвращать структурные типы стало можно в C99.

C>>>Бредишь. Это возможно чуть ли не с K&R C, точно было в C89. Классика жанра — возвращение структуры POINT в WinAPI.
E>>1. Что я неприпоминаю, что там за функция в Win32 API возвращает POINT. Можеш напомнить ?
Итак, какая функция в WinAPI возвращает POINT ?

C>В общем, я считаю, что ламеризм (воинствующее незнание) надо наказывать долларом. Так что предлагаю поспорить на $100, что в С89 есть возврат структур, аналогичный побайтному копированию.

Вот и начни с себя. Потрать доллары на своё образование.

C>>>Нету в С преимуществ.

E>>Исходя из разговора с тобой, мне видно, что языка Си ты вообще-то незнаеш. Грубая путаница с C++.
C>LOL.
Ага, ЛОЛ.

C>>>Это не эквивалентный код. В Java используется reference-тип.

E>>И там и там приведен код который обьекта — агрегата.
C>ЩИТО? В Java все объекты — это reference-типы. Если бы в Java были value-типы, то тоже всё было бы как в С++.
Если у бабушки был бы член, она была бы дедушкой. Но в обоих случаях осталась бы престарелым человеком. Так и в случае с агрегатными обьектами.

C>>>Оно скомпилируется и будет падать.

E>>Как мы видим, здесь указатель, а не int. Какой неприкрытый фейл...
C>Можно и int, не вопрос:
C>
C>int mode;
C>chmod("/some/file", mode); //Are you feeling lucky today?
C>

1. Глобальная переменная в С и С++ инициализируется нулем. Балбес.
2. Этот код также не упадет.

E>>>>Хм, просто показал что можно выстрелить себе в ногу можно в любом языке и развеял очередной миф.

C>>>В С это делается на порядки проще.
E>>Куда уж проще чем в Java-то ? Тебя носом даже в пример потыкали.
C>У тебя нос уже давно в навозе.
Ты свой нос с чужим не путай.

C>В Java пишется так:

А в С++ пишется по другому. И в обоих языках можно элементарно выстрелить себе в ногу.

C>В чистом С пишется так:

C>
C>struct list_t
C>{
C>    struct list_t *next;
C>    int payload;
C>};

C>struct something_t
C>{
C>    struct list_t head;
C>};
C>

C>А потом ищутся баги с неинициализированным next.
ЛОЛ, Что ?

C>>>Создай пару контейнеров, разворачивающихся в static-функции.

E>>В Си это делается на порядок проще. Но пример ты так и не привел, ожидаем-с.
C>Да ну?
C>
C>#define LIST_CLAZZ(T,NM) \
C>    struct NM { struct NM* next; T payload; }; \
C>    static void add_to_#NM(NM* tail, T payload) {...};
C>

C>"Методы" add_to... будут в каждом используемом файле инстанцироваться отдельно, за счёт static'а. Если static убрать, то получим конфликты времени связывания и/или неоптимальный код из-за отсутствия inlining'а.
Теперь напиши пример в templates и сравни как будут инстанцироваться методы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.