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

Есть хорошие бесплатные курсы по C++ на https://www.coursera.org/

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

Курс назывался C++ для Си программистов.

спасибо. посмотрю.

 

Ну так переименуйте файлы .c в .cpp и делов-то.

Вон даже Mentor в своей операционке Nucleus Plus так делать не стесняется.

И в Symbian так наверняка было сделано.

а если проверят? а там ни класов ни строковых типов. :)

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


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

Ну так переименуйте файлы .c в .cpp и делов-то.

Вон даже Mentor в своей операционке Nucleus Plus так делать не стесняется.

И в Symbian так наверняка было сделано.

 

Кстати, могут возникнуть некоторые забавные глюки от такого переименования.. Может потребоваться тонкая доводка исходников молотком и напильником :)

Ну, например, если в С-файле была использована переменная с именем, которое является зарезервированным в С++, ("new", например).

Опять же, name mangling появится, что-то там было про разное отношение к one definition rule.

 

 

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


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

а если проверят? а там ни класов ни строковых типов. :)

 

Строковые типы? В embedded? На Cortex-M4 с сотней килобайт RAM-а на борту? Это очень самоуверенно я вам скажу.

 

Хотя если речь про Raspberry PI, то все нормально.

Но это чудо теперь и на C# программируется.

Я прямо сейчас для него на C# пишу сервер IoT.

 

 

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


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

Строковые типы? В embedded? На Cortex-M4 с сотней килобайт RAM-а на борту? Это очень самоуверенно я вам скажу.

Если имеется ввиду std::string, то да, лучше не использовать. Но со строками как-то работать надо, поэтому колхозим свой велосипед:

#pragma once

#include <cstring>
#include <string>
#include <algorithm>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

namespace mylib{
    
template <size_t S>
struct String
{
    String()
    {
        clear();
    }
    
    String(const char * str)
    {
        clear();
        copy(str);
    }
    
    size_t size() const
    {
        return S;
    }
    
    // количество символов в буфере, исключая терминирующий \0
    size_t occupied() const
    {
        return std::char_traits<char>::length(buf);
    }
    
    void clear()
    {
        std::fill(buf, buf + S, 0);
    }
    
    bool contains(const char * str) const
    {
        return std::strstr(buf, str) != NULL;
    }
    
    String<S> & operator=(const char * str)
    {
        copy(str);
        return *this;
    }
        
    char buf[S];
    
private:
    // копируем по указателю str символов не более (размер нашей строки - 1).
    // если копируемая строка меньше (размер нашей строки - 1), остаток добивается \0
    void copy(const char * str)
    {
        size_t size = std::min(S - 1, std::char_traits<char>::length(str));
        std::char_traits<char>::copy(buf, str, size);
    }    
};

}

Класс добивается своими методами по потребностям. Можно полностью содрать интерфейс с std::string.

Если встречу хорошо написанный класс строки, с удовольствием выкину свою поделку :)

 

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


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

Если имеется ввиду std::string, то да, лучше не использовать. Но со строками как-то работать надо, поэтому колхозим свой велосипед:

Класс добивается своими методами по потребностям. Можно полностью содрать интерфейс с std::string.

Если встречу хорошо написанный класс строки, с удовольствием выкину свою поделку :)

Вы как понимающий знаете что и где колхозить. а что делать начинающему?

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


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

Вы как понимающий знаете что и где колхозить. а что делать начинающему?

Учиться.

Нужны материалы?

Просто С++ - любые 3 хорошие книги (читать в фоне).

Со спецификой embedded - мне очень понравилась эта книга https://vk.com/wall-112797241_4

 

Быстрый старт.

1. Начните использовать ссылки.

2. Начните использовать С++ приведения типов reinterpret_cast, static_cast, const_cast. Запретите себе приведение типов в стиле C.

3. Используйте namespace.

4. Используйте перегрузку функций (если надо конечно).

3. Пробуйте проектировать простые классы. Напишите класс светодиода, пусть плохенький (для начала). Это уже объектно-ориентированный анализ и проектирование, есть отдельные книги.

Спрашивайте здесь, как написать класс под ту или иную задачу.

 

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


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

Учиться.

Нужны материалы?

Просто С++ - любые 3 хорошие книги (читать в фоне).

Со спецификой embedded - мне очень понравилась эта книга https://vk.com/wall-112797241_4

 

Быстрый старт.

1. Начните использовать ссылки.

2. Начните использовать С++ приведения типов reinterpret_cast, static_cast, const_cast. Запретите себе приведение типов в стиле C.

3. Используйте namespace.

4. Используйте перегрузку функций (если надо конечно).

3. Пробуйте проектировать простые классы. Напишите класс светодиода, пусть плохенький (для начала). Это уже объектно-ориентированный анализ и проектирование, есть отдельные книги.

Спрашивайте здесь, как написать класс под ту или иную задачу.

спасибо.

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


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

которые по дикому желанию заказчика должны быть написаны на С++. что я могу поделать.

Жесть. Заказчик требует определенный язык пр-ия... и может отругать за то, что не он использован. :smile3046:

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


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

А чего не жабку или пхытон? Не, даже жабоскрипт! Если уж и быть извращенцем, так по полной!

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


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

Жесть. Заказчик требует определенный язык пр-ия... и может отругать за то, что не он использован. :smile3046:

что тут удивительного? в военных проектах (да и не только в военных. любой серьезный заказчик.) обычно определяют и язык програмирования и RTOS и среду тестирования и еще много чего. например был авиационный проект там вообще запретили микроконтроллеры. все писали на FPGA.

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

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


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

что тут удивительного?

C++ и embedded — это промежуточный шаг к ардуйне! Хотя, ацефалия нонче в моде.

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


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

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

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


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

Если не для себя, а для заказчика, то да, проще всего сделать как советовал AlexandrY - переименовать c в cpp и переработать код, добавив классы. Вроде такой стиль программирования так и называют - "си с классами". Если другие фишки C++ при этом не использовать, то в производительности/ресурсах вроде не потеряете, а некоторые удобства (например, инкапсуляция) добавятся.

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

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


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

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

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


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

Если другие фишки C++ при этом не использовать, то в производительности/ресурсах вроде не потеряете
Существует множество других возможностей плюсов, которые не тянут за собой ни грамма производительности/ресурсов, а исходник (и, как следствие, его написание/сопровождение) упрощают. Но для этого надо хоть немного напрячься в изучении языка, а это горазно сложнее, чем размахивать флагом "плюсы - это раздутый код и тормоза". Но мы то знаем, что за этими заявлениями кроется опыт "настоящих программистов", пишущих на Паскале на любом языке.

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


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

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

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

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

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

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

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

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

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

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