Перейти к содержанию
    

Стили оформления программ на C/C++ и их применимость

А какой смысл вообще использовать си сейчас? Когда практически все компиляторы умеют си++?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, jcxz сказал:

А какой смысл вообще использовать си сейчас?

Например, если нет желания использовать ООП, не?))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 1/3/2024 at 2:04 PM, mantech said:

Например, если нет желания использовать ООП, не?))

Одной из парадигм С++ является процедурное программирование.

Но действительно, зачем С++, если достаточно Си ?

 

Вот, что мне лично в С++ не нравится, так это приведение типов.
 

 

Сейчас начнется :sarcastic:

Надо как-то вовремя остановиться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 минут назад, mantech сказал:

Например, если нет желания использовать ООП, не?))

А какая связь? между тёплым и мягким...

Я вот не пользуюсь ООП, почти. Но это не мешает мне пользоваться си++.

2 минуты назад, dimka76 сказал:

Но действительно, зачем С++, если достаточно Си ?

Ну например хотя-бы для того, чтобы можно было переменные объявлять где угодно. И куча других мелких плюшек. Коих нет в си.

Ибо - не ООП единым жив си++.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 1/3/2024 at 2:20 PM, jcxz said:

Я вот не пользуюсь ООП, почти. 

А в чем вы лично видите преимущество С++ ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 минуту назад, dimka76 сказал:

А в чем вы лично видите преимущество С++ ?

В куче полезных и удобных мелочей.

6 минут назад, dimka76 сказал:

Но действительно, зачем С++, если достаточно Си ?

Зачем вы пользуетесь авторучкой, если достаточно гусиного пера?

 

ЗЫ: Или вы гусиным пером шкрябаете?  :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 1/3/2024 at 2:23 PM, jcxz said:

В куче полезных и удобных мелочей.

Исчерпывающий ответ :good3:

On 1/3/2024 at 2:20 PM, jcxz said:

Ну например хотя-бы для того, чтобы можно было переменные объявлять где угодно.

Си это тоже позволяет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 1/3/2024 at 2:20 PM, jcxz said:

Ну например хотя-бы для того, чтобы можно было переменные объявлять где угодно.

точка с запятой после метки делает код стандартным если что

https://godbolt.org/z/Wjr3bnTd9

On 1/3/2024 at 2:20 PM, jcxz said:

Ибо - не ООП единым жив си++

лет 20 назад альтернатив особо не было, а сейчвс смысла его использовать в новом коде нет, как и С держится в топе только за счёт старого кода. Я даже не знаю где он нужен кроме игроделия.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 часов назад, dimka76 сказал:

А зачем ее объявлять без инициализации ? Все равно рано или поздно эта переменная должна быть инициализирована. 

И вы в своем примере следующей же строкой ее инициализируете.

Ну, разве только чтобы передать указатель на нее в функцию, где ей присвоится значение.

Ну, ладно. Вот такой пример

case SETIDLETIMEOUT_CMD:
  //{
  t_StdAnswer* p_StdAnswer;
  p_StdAnswer = (t_StdAnswer*)answ_buf;
  SetIdleTimeoutCmdHandler((t_SetIdleTimeoutCmd*)p_hdr, p_StdAnswer);
  uint32_t axis_cnt;
  axis_cnt = gsettings.get_common().AxisCount;
  send((uint8_t*)p_StdAnswer, (axis_cnt * sizeof(t_SetIdleTimeoutCmd)), addr, port);
  //}
  break;

В MSVC и GCC в режиме СРР проходит без ошибок.

А GCC в режиме Си выдает ошибку следующего содержания

 

В Си (до C23) должна быть ошибка, показанная Вами, и действительно лишь по той причине, которую Вы обозначили - после метки должен быть оператор. В плюсах, в данном случае, тоже корректно. Но причина "корректности" в другом - нет инициализации.

Вообще, глянув бегло на все показанные тут примеры, никаких багов компиляторов не вижу. Все, вроде, законно. Покажите, где, якобы, нет. Интересно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, sasamy сказал:

Я даже не знаю где он нужен кроме игроделия.

В embedded.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 часа назад, sasamy сказал:

лет 20 назад альтернатив особо не было,

А сейчас какие альтернативы? Инетоподобные интерпретаторы что-ли?)))))))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

C++ актуален везде, где требуется эффективность и быстродействие. При этом последние версии Стандарта приближают возможности использования к языкам высокого уровня. 

Например, код Python:

numbers_out = [x//2 for x in numbers_in if x%2 == 0]

Формирование списка методом фильтрации из входящей последовательности чётных значений с целочисленным делением пополам. Очень удобно и выразительно вот так одной строчкой сформировать объект по правилам. Это делает программу более короткой, более выразительной и сокращает писанину, за что и любят ЯП высокого уровня.

Вариант на плюсах (строчек больше, но это потому, что пример полный):

#include <iostream>
#include <ranges>
#include <vector>

namespace rng = std::ranges;
namespace view = rng::views;

std::vector<int> numbers_in = {100, 55, 80, 2, -1};
  
void f() 
{
    auto even = [](int i) { return i%2 == 0; };
    auto half = [](int i) { return i/2; };
    
    auto numbers_out = numbers_in | view::filter(even) | view::transform(half); // <---- собственно преобразование
      
    for (auto i : numbers_out) {
        std::cout << i << std::endl; // 50, 40, 1 
}

При этом всё это работает очень быстро и накладных почти нет: предикаты инлайнятся, код генерится по шаблонам.

В этом основная фишка развития С++ -- приблизить использование к ЯП высокого уровня с эффективностью равной или лучшей C.

Вообще, использование стандартной библиотеки радикально преображает код программы, избавляя от множества рутинных и опасных операций (работы с памятью напрямую, к примеру). Сохраняя эффективность. Путь развития стандартный: упрощение интерфейса (использования) за счёт усложнения внутренностей (стандартной библиотеки -- там внутри на уровне реализации всё очень непросто).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, dxp сказал:

Формирование списка методом фильтрации из входящей последовательности чётных значений с целочисленным делением пополам.

Где это можно применить в МК? В скорости раз в 70-100 потеряете, но да, одной строчкой))))))))))) Плюс эту птичью запись еще понять нужно, особенно в чужом коде...

ЗЫ. Честно никогда не пожертвую читабельностью и кода ради его размера, благо редакторы еще не лимитируют размер текста)))

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Во-первых, речь в языке программирования, которому, якобы, нет места в будущем и который живёт исключительно за счёт старого кода.

Во-вторых, МК бывают разные.

В-третьих, про 70-100 раз вы сами придумали? Тут "потери" могут быть только из-за алокации контейнера, ну так замените стандартный алокатор на свой, если хочется скорости. Хотя даже в МК можно и с этим не заморачиваться, если ограничиться урезанной функциональностью контейнера, исключив случаи реалокации -- например, создавая объекты на старте и не меняя их размер. Альтернативный по функциональности код, написанный традиционным способом, будет многословнее, запутаннее и более подвержен ошибкам.

В-четвёртых, если вам лично не понятно, что там написано, так это вопрос вашего образования в этой области. Если вам это интересно, вы можете легко расширить познания и взять на вооружение. Если не интересно, просто проходите мимо, не нужно тут свою точку зрения озвучивать как истину. Язык не стоит на месте, развивается. Благодаря этому он становится более мощным в средствах и более простым в использовании при решении одни и тех же задач. Но нужно дать себе труд познакомиться с этими средствами и взять их на вооружение.

Конкретно с этим примером? Что там ахрисложного? Вы не знаете, что такое предикат? Или С++ лямбды вызывают не понимание? Да даже не вникая в код, там ясно, что они делают: одна определяет чётность числа, вторая выполняет деление. Из реально нового там только вот эта фишка с ranges, позволяющая формировать цепочки действий -- очень удобная идиома для формирования структур данных.

Многие участники форума, я видел, уже давно и успешно используют возможности C++11 (а может и 14), не испугались нововведений, хотя из-за них код программ местами сильно поменялся. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

21 минуту назад, dxp сказал:

Многие участники форума, я видел, уже давно и успешно используют возможности C++11 (а может и 14), не испугались нововведений, хотя из-за них код программ местами сильно поменялся. 

Да лишь бы в радость, пусть, если хотят, вкорячивают в МК питоны, явы, еще что там понапридумано, по мне, это можно сделать в обычном Си, это будет понятно и читабельно - ну и супер, на нем и сделаю, ибо люблю, когда взглянешь и не надо напрягать мозги, распознавая всю эту "компактность" не понятно для чего и с какими целями, ИМХО.

21 минуту назад, dxp сказал:

Если не интересно, просто проходите мимо, не нужно тут свою точку зрения озвучивать как истину.

Причем тут истина, тут полно тех, кто показывает себя самыми умными, что я никогда не пытался о себе заявить, а для начинающих особенно мои предложения вполне удачны...

21 минуту назад, dxp сказал:

Язык не стоит на месте, развивается. Благодаря этому он становится более мощным в средствах и более простым в использовании при решении одни и тех же задач.

Ну на счет понятности вопрос спорный, это как китайский для китайца очень понятный))))))))

Сомневаюсь, что для человека, который тут с уартами не мог разобраться, вот такие компактности помогли б понять все это лучше...

28 минут назад, dxp сказал:

В-третьих, про 70-100 раз вы сами придумали? Тут "потери" могут быть только

Нет не сам. И ваша программа будет состоять явно не из этой одной строки, а тут речь шла о потерях в быстродействии всей программы, относительно программы на Си. Если вам все равно, что ради текстовой компактности можно пожертвовать такими потерями в скорости - ваше дело, но не мой выбор...

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...