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

Плавный переход C -> C++ под МК

2 hours ago, Arlleex said:

Итак, вопрос следующий: а какой практический смысл в const-методах класса?

const метод класса можно вызывать для const экземпляров класса. Обычные методы вызывать нельзя.

Например:

class Test {
  public:
  void const_method() const;
  void no_const_method();
};

void test_func(const Test& test)
{
  test.const_method(); // ok
  test.no_const_method(); // error
}

 

45 minutes ago, Arlleex said:

Понятно, что компилятор не хочет, чтобы я "вручную" указывал элементы массива в списке инициализации.

Компилятор хочет что бы вы ему посвежее стандарт поставили (С++11 не поддерживает эти фичи, их внесли обратно из С99 позже)

46 minutes ago, Arlleex said:

Я уже готов тупо подавить конкретно этот warning, только вот как, чтобы еще не задавить остальные причастные warning-и?

Он же пишет в самом варнинге -Wc99-designator. В gcc это отключается -Wno-c99-warning, как в Keil не знаю, но подозреваю, что так же

 

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


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

22 минуты назад, xvr сказал:

const метод класса можно вызывать для const экземпляров класса. Обычные методы вызывать нельзя.

Хм. Хороший пример. Спасибо. Действительно здесь нужно было взглянуть немного с другого угла.

22 минуты назад, xvr сказал:

Компилятор хочет что бы вы ему посвежее стандарт поставили...

В C++21 внесли обратно, это правда. Но только вот Keil-у нельзя его поставить:sad: Вот в чем суть.

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


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

Цитата

Я уже готов тупо подавить конкретно этот warning, только вот как, чтобы еще не задавить остальные причастные warning-и?

в сообщении номер варнинга обычно указывается, тогда в Keil можно сделать такую фишку
 

#pragma diag_suppress 1300  // 1300 - это номер предупреждения, который давим

// здесь код, который вызывает предупреждение

#pragma diag_default 1300 // восстанавливаем вывод данного предупреждения

 

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


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

On 3/5/2022 at 12:14 PM, xvr said:

Компилятор хочет что бы вы ему посвежее стандарт поставили (С++11 не поддерживает эти фичи, их внесли обратно из С99 позже)

Если быть точным, то в C++20 добавили только designated initializers (как это по-русски? назначенный?..) для структур. Для массивов, как в исходном вопросе, поддержки нет (я невнимательно слежу за развитием языка, но вроде б эту фишку и не обсуждали для добавления в последующие стандарты).

Также в C++ есть ограничение, что члены структуры должны инициализироваться в том же порядке, как они расположены в самой структуре (с C можно было инициализировать как угодно). 

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


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

9 часов назад, esaulenka сказал:

Также в C++ есть ограничение, что члены структуры должны инициализироваться в том же порядке, как они расположены в самой структуре (с C можно было инициализировать как угодно). 

Я думаю, что в Си компилятор неявно тоже инициализирует все по порядку (это банально проще для реализации библиотеки начальной инициализации Си-кода). Просто дает синтаксическую возможность программисту записать порядок инициализации любым, каким ему удобно. А C++, за счет более строгой типизации, не дает так сделать. Поэтому даже при определении конструктора со списком инициализации порядок инициализации соответствует порядку объявления членов класса/структуры и только.

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


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

Вставлю свои 5 копеек, пока не нагрянули неистовые фанаты C++ или C#, как человек, работавший на всём этом, кроме последнего:

Недавно поступил на предприятие  HEX-код от программиста из Москвы. После анализа HEX-кода выяснилось, что примерно третья часть памяти микроконтроллера ушла в nop за счёт ублюдочного компилятора C++. После анализа самого исходного кода C++ выяснилось, что программисты включили в код не слишком уж важные утилиты из библиотеки C++ для этого МК.

Исходя из этой информации, особенно в текущей ситуации, считаю, что переход программистов МК с ассемблера и Си на чистый C++ на нашем предприятии будем рассматривать как саботаж.

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


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

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

считаю, что переход программистов МК с ассемблера и Си на чистый C++ на нашем предприятии

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

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


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

44 minutes ago, byRAM said:

Недавно поступил на предприятие  HEX-код от программиста из Москвы.

Это настоящие гуру программирования

27 minutes ago, Сергей Борщ said:

Если программист умеет - выходной код будет не хуже, а исходник компактнее, понятнее и написан быстрее.

То есть всё определяется прокладкой между стулом и клавиатурой.

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


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

24 минуты назад, Сергей Борщ сказал:

Если программист умеет - выходной код будет не хуже, а исходник компактнее, понятнее и написан быстрее.

А какие доводы будут у меня против программиста, нашКОДившего на C++, если треть ПЗУ сожрали nop только из-за ублюдочного компилятора C++?

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


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

14 часов назад, esaulenka сказал:

Также в C++ есть ограничение, что члены структуры должны инициализироваться в том же порядке, как они расположены в самой структуре

Да ладно!

.cpp:

struct Fi1 {
  u8 m1;
  u8 m2;
  u8 m3;
  u8 m4;
  u8 m5;
};
__root Fi1 const fi1 = {
  .m3 = 3,
  .m2 = 2,
  .m4 = 4
};

.lst:

IAR C/C++ Compiler V7.12.1.987/W32 for MSP430
...
                     In  segment DATA16_C, align 1, align-sorted, root
0002030400   DC8 0, 2, 3, 4, 0

:unknw:

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


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

1 hour ago, byRAM said:

переход программистов МК с ассемблера и Си на чистый C++ на нашем предприятии будем рассматривать как саботаж

Отличная шутка, особенно в свете известных событий :good2:

 

1 hour ago, byRAM said:

Недавно поступил на предприятие  HEX-код от программиста из Москвы. После анализа HEX-кода ...

Очень бы хотелось посмотреть на это "предприятие", где занимаются подобной ... деятельностью.

Видать, что-то уж очень "секретное", коли исходники не дают. Скоро и прошивки перестанут давать, заставят рыться в залоченных процах. :biggrin:

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


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

5 часов назад, Arlleex сказал:

Я думаю, что в Си компилятор неявно тоже инициализирует все по порядку (это банально проще для реализации библиотеки начальной инициализации Си-кода). Просто дает синтаксическую возможность программисту записать порядок инициализации любым, каким ему удобно. А C++, за счет более строгой типизации, не дает так сделать. Поэтому даже при определении конструктора со списком инициализации порядок инициализации соответствует порядку объявления членов класса/структуры и только.

Имхо: Компоновщик каждого конкретного компилятора, создаёт список инициализации, соответствующий возможностям си-стартап кода данного компилятора.

Как-то просматривал код какого-то си-стартапа, так там список инициализации состоял из множества таких записей:

{базовый_адрес_исполняемый_блока_данных, длина_блока_данных, блок_данных(N_байт)}

И стартап код просто последовательно обрабатывал эти записи, копируя блоки данных в их исполняемые адреса.

 

Но я допускаю, что завтра может выйти более умная версия компилятора, которая для:

struct Name1 { char m0[50], m1, m2[2]; } static body1 = { .m1 = 1 };

вместо того, чтобы как предыдущие, менее умные версии, создавать запись инициализации с блоком данных длиной = 53 байта, поместит body1 в секцию нуль-инициализируемых данных, обнулит, а  затем часть стартап-кода, инициализирующая инициализируемые переменные, поверх скопирует в m1 один байт == 1.

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


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

11 минут назад, Forger сказал:

Отличная шутка, особенно в свете известных событий :good2:

Шутка, не шутка, но моя одноклассница, начальница отдела программистов, уже натерпелась уже от быдлокодеров и попросила моей помощи в избавлении от такого мусора :acute:

Программист должен подстраиваться под микроконтроллер и схему, а не наоборот!

В догонку могу ещё один довод подкинуть: не хочешь опускаться до Си и ассемблера - отпустишься до биржи труда и там будешь свои права качать :biggrin:

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

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


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

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

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

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

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

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

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

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

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

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