xvr 12 5 марта, 2022 Опубликовано 5 марта, 2022 · Жалоба 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 не знаю, но подозреваю, что так же Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 190 5 марта, 2022 Опубликовано 5 марта, 2022 · Жалоба 22 минуты назад, xvr сказал: const метод класса можно вызывать для const экземпляров класса. Обычные методы вызывать нельзя. Хм. Хороший пример. Спасибо. Действительно здесь нужно было взглянуть немного с другого угла. 22 минуты назад, xvr сказал: Компилятор хочет что бы вы ему посвежее стандарт поставили... В C++21 внесли обратно, это правда. Но только вот Keil-у нельзя его поставить Вот в чем суть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Edit2007 3 9 марта, 2022 Опубликовано 9 марта, 2022 · Жалоба Цитата Я уже готов тупо подавить конкретно этот warning, только вот как, чтобы еще не задавить остальные причастные warning-и? в сообщении номер варнинга обычно указывается, тогда в Keil можно сделать такую фишку #pragma diag_suppress 1300 // 1300 - это номер предупреждения, который давим // здесь код, который вызывает предупреждение #pragma diag_default 1300 // восстанавливаем вывод данного предупреждения Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 190 9 марта, 2022 Опубликовано 9 марта, 2022 · Жалоба Спасибо, попробую. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 9 марта, 2022 Опубликовано 9 марта, 2022 · Жалоба muteable не? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 18 марта, 2022 Опубликовано 18 марта, 2022 · Жалоба On 3/5/2022 at 12:14 PM, xvr said: Компилятор хочет что бы вы ему посвежее стандарт поставили (С++11 не поддерживает эти фичи, их внесли обратно из С99 позже) Если быть точным, то в C++20 добавили только designated initializers (как это по-русски? назначенный?..) для структур. Для массивов, как в исходном вопросе, поддержки нет (я невнимательно слежу за развитием языка, но вроде б эту фишку и не обсуждали для добавления в последующие стандарты). Также в C++ есть ограничение, что члены структуры должны инициализироваться в том же порядке, как они расположены в самой структуре (с C можно было инициализировать как угодно). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 190 19 марта, 2022 Опубликовано 19 марта, 2022 · Жалоба 9 часов назад, esaulenka сказал: Также в C++ есть ограничение, что члены структуры должны инициализироваться в том же порядке, как они расположены в самой структуре (с C можно было инициализировать как угодно). Я думаю, что в Си компилятор неявно тоже инициализирует все по порядку (это банально проще для реализации библиотеки начальной инициализации Си-кода). Просто дает синтаксическую возможность программисту записать порядок инициализации любым, каким ему удобно. А C++, за счет более строгой типизации, не дает так сделать. Поэтому даже при определении конструктора со списком инициализации порядок инициализации соответствует порядку объявления членов класса/структуры и только. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
byRAM 24 19 марта, 2022 Опубликовано 19 марта, 2022 · Жалоба Вставлю свои 5 копеек, пока не нагрянули неистовые фанаты C++ или C#, как человек, работавший на всём этом, кроме последнего: Недавно поступил на предприятие HEX-код от программиста из Москвы. После анализа HEX-кода выяснилось, что примерно третья часть памяти микроконтроллера ушла в nop за счёт ублюдочного компилятора C++. После анализа самого исходного кода C++ выяснилось, что программисты включили в код не слишком уж важные утилиты из библиотеки C++ для этого МК. Исходя из этой информации, особенно в текущей ситуации, считаю, что переход программистов МК с ассемблера и Си на чистый C++ на нашем предприятии будем рассматривать как саботаж. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 19 марта, 2022 Опубликовано 19 марта, 2022 · Жалоба 15 минут назад, byRAM сказал: считаю, что переход программистов МК с ассемблера и Си на чистый C++ на нашем предприятии "На кону мочало, начинай сначала". Если программист умеет - выходной код будет не хуже, а исходник компактнее, понятнее и написан быстрее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 60 19 марта, 2022 Опубликовано 19 марта, 2022 · Жалоба 44 minutes ago, byRAM said: Недавно поступил на предприятие HEX-код от программиста из Москвы. Это настоящие гуру программирования 27 minutes ago, Сергей Борщ said: Если программист умеет - выходной код будет не хуже, а исходник компактнее, понятнее и написан быстрее. То есть всё определяется прокладкой между стулом и клавиатурой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
byRAM 24 19 марта, 2022 Опубликовано 19 марта, 2022 · Жалоба 24 минуты назад, Сергей Борщ сказал: Если программист умеет - выходной код будет не хуже, а исходник компактнее, понятнее и написан быстрее. А какие доводы будут у меня против программиста, нашКОДившего на C++, если треть ПЗУ сожрали nop только из-за ублюдочного компилятора C++? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 19 марта, 2022 Опубликовано 19 марта, 2022 · Жалоба 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 19 марта, 2022 Опубликовано 19 марта, 2022 · Жалоба 1 hour ago, byRAM said: переход программистов МК с ассемблера и Си на чистый C++ на нашем предприятии будем рассматривать как саботаж Отличная шутка, особенно в свете известных событий 1 hour ago, byRAM said: Недавно поступил на предприятие HEX-код от программиста из Москвы. После анализа HEX-кода ... Очень бы хотелось посмотреть на это "предприятие", где занимаются подобной ... деятельностью. Видать, что-то уж очень "секретное", коли исходники не дают. Скоро и прошивки перестанут давать, заставят рыться в залоченных процах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 19 марта, 2022 Опубликовано 19 марта, 2022 · Жалоба 5 часов назад, Arlleex сказал: Я думаю, что в Си компилятор неявно тоже инициализирует все по порядку (это банально проще для реализации библиотеки начальной инициализации Си-кода). Просто дает синтаксическую возможность программисту записать порядок инициализации любым, каким ему удобно. А C++, за счет более строгой типизации, не дает так сделать. Поэтому даже при определении конструктора со списком инициализации порядок инициализации соответствует порядку объявления членов класса/структуры и только. Имхо: Компоновщик каждого конкретного компилятора, создаёт список инициализации, соответствующий возможностям си-стартап кода данного компилятора. Как-то просматривал код какого-то си-стартапа, так там список инициализации состоял из множества таких записей: {базовый_адрес_исполняемый_блока_данных, длина_блока_данных, блок_данных(N_байт)} И стартап код просто последовательно обрабатывал эти записи, копируя блоки данных в их исполняемые адреса. Но я допускаю, что завтра может выйти более умная версия компилятора, которая для: struct Name1 { char m0[50], m1, m2[2]; } static body1 = { .m1 = 1 }; вместо того, чтобы как предыдущие, менее умные версии, создавать запись инициализации с блоком данных длиной = 53 байта, поместит body1 в секцию нуль-инициализируемых данных, обнулит, а затем часть стартап-кода, инициализирующая инициализируемые переменные, поверх скопирует в m1 один байт == 1. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
byRAM 24 19 марта, 2022 Опубликовано 19 марта, 2022 (изменено) · Жалоба 11 минут назад, Forger сказал: Отличная шутка, особенно в свете известных событий Шутка, не шутка, но моя одноклассница, начальница отдела программистов, уже натерпелась уже от быдлокодеров и попросила моей помощи в избавлении от такого мусора Программист должен подстраиваться под микроконтроллер и схему, а не наоборот! В догонку могу ещё один довод подкинуть: не хочешь опускаться до Си и ассемблера - отпустишься до биржи труда и там будешь свои права качать Изменено 19 марта, 2022 пользователем byRAM Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться