Информация об изменениях

Сообщение Re[12]: Достаточно ли знать С без знания С++ для устройства от 05.09.2014 5:06

Изменено 05.09.2014 5:07 eskimo82

E>>>>Стандарты разные бывают. Ко всему прочему есть де-факто стандарты.
C>>>Вот в С11 их взяли из С++.
E>>C11 когда приняли ? а когда появились всякие __sync_fetch_and_sub ?
C>И что дальше-то?
Причинно-слдедственная связь.

E>>>>Много чего. Возврат структурных типов из функций, например.

C>>>Не позорься, а?
E>>Да это ты не позорься, если не знал.
C>
C>struct test_t
C>{
C>   int a, b;
C>};

C>test_t testit()
C>{
C>   return {1, 2};
C>}

C>int main()
C>{
C>   test_t res = testit();
C>   printf("%d %d\n", res.a, res.b);
C>}
C>

C>Всё ОК.
Не позорься:
1. В языке Си есть 3 непересекающихся (в отличии от C++) пространства имен — для struct, union и глобальное для typedef. И твой код не соберется ибо test_t не определен в глобальном пространстве имен. Он собрался бы, если бы ты написал bstruct test_t testit()
2. Возвращать структурные типы стало можно в C99.

C>>>
C>>>- пусто -
C>>>

E>>Не в состоянии составить список ?
C>Нет, это полный список.
Это не полный список, как минимум потому, что ты в него не включил даже того о чем написал сам.

C>>>И всё. Тем более, что такая ошибка — это вообще из стиля "ну вот я тут забыл написать весь код и оно ничего не работает".

E>>Дело в том, что в C++ такую ошибку допустить в принципе нельзя.
C>Да ну?
Именнно так:
C>
C>class AAA
C>{
C>    IdentityHashMap nodes;

C>    AAA()
C>    {
C>        // everything is ok
C>    }
C>};
C>

C>Про всякие int'ы вообще молчу.
С интами как раз все прекрасно. Неиниуиализированые значения не приводят к падению.

C>>>В отличие от С, в Java доступны нетривиальные in-place конструкторы.

E>>Мне абсолютно побоку на "нетривиальные in-place конструкторы", я на них не надрачиваю.
C>Только что подрочил уже.
Хм, просто показал что можно выстрелить себе в ногу можно в любом языке и развеял очередной миф.

C>>>Работает плохо, и разбухивает код. Не говоря уж о сплошных ODR-нарушениях при попытках оптимизировать.

E>>МММ, щас ты меня будеш лечить что templates в C++ не разбухивают код ? Угомонись уже, код оптимизируется очень хорошо.
C>Не разбухивают, по сравнению с макросами.
Да ну ? Давай приводи сравнительный пример.
E>>>>Стандарты разные бывают. Ко всему прочему есть де-факто стандарты.
C>>>Вот в С11 их взяли из С++.
E>>C11 когда приняли ? а когда появились всякие __sync_fetch_and_sub ?
C>И что дальше-то?
Причинно-следственная связь.

E>>>>Много чего. Возврат структурных типов из функций, например.

C>>>Не позорься, а?
E>>Да это ты не позорься, если не знал.
C>
C>struct test_t
C>{
C>   int a, b;
C>};

C>test_t testit()
C>{
C>   return {1, 2};
C>}

C>int main()
C>{
C>   test_t res = testit();
C>   printf("%d %d\n", res.a, res.b);
C>}
C>

C>Всё ОК.
Не позорься:
1. В языке Си есть 3 непересекающихся (в отличии от C++) пространства имен — для struct, union и глобальное для typedef. И твой код не соберется ибо test_t не определен в глобальном пространстве имен. Он собрался бы, если бы ты написал bstruct test_t testit()
2. Возвращать структурные типы стало можно в C99.

C>>>
C>>>- пусто -
C>>>

E>>Не в состоянии составить список ?
C>Нет, это полный список.
Это не полный список, как минимум потому, что ты в него не включил даже того о чем написал сам.

C>>>И всё. Тем более, что такая ошибка — это вообще из стиля "ну вот я тут забыл написать весь код и оно ничего не работает".

E>>Дело в том, что в C++ такую ошибку допустить в принципе нельзя.
C>Да ну?
Именнно так:
C>
C>class AAA
C>{
C>    IdentityHashMap nodes;

C>    AAA()
C>    {
C>        // everything is ok
C>    }
C>};
C>

C>Про всякие int'ы вообще молчу.
С интами как раз все прекрасно. Неиниуиализированые значения не приводят к падению.

C>>>В отличие от С, в Java доступны нетривиальные in-place конструкторы.

E>>Мне абсолютно побоку на "нетривиальные in-place конструкторы", я на них не надрачиваю.
C>Только что подрочил уже.
Хм, просто показал что можно выстрелить себе в ногу можно в любом языке и развеял очередной миф.

C>>>Работает плохо, и разбухивает код. Не говоря уж о сплошных ODR-нарушениях при попытках оптимизировать.

E>>МММ, щас ты меня будеш лечить что templates в C++ не разбухивают код ? Угомонись уже, код оптимизируется очень хорошо.
C>Не разбухивают, по сравнению с макросами.
Да ну ? Давай приводи сравнительный пример.