Це як задача з чайником, за скільки закипить двох кіловатний чайник з літром води, в залежності від точності опису технічного завдання може бути як задачею для дітей 5го класу так і мабуть дипломною бакалавра
Що саме прочитаєте? зображення? так, зчитали, тепер треба зрозуміти де «наш» текст і після цього його перетворити на буковки, але це просто демагогія про те що з таким ТЗ нічого не зробити.
як зчитати з екрану рядок та знайти в ньому всі точки, С++?
є екран компютера, на ньому є текст, як його отримати у свою програму яку ви запустите на цьому компьютері
І так, скажіть скільки точок в тексті, бо по тз там дуже не тривіальна задача, навіть якщо відкинути частину з розпізнаванням
Ні, ви не вмієте читати технічне завдання, з того що він написав тут треба машинний зір підєднувати, але якщо ми всеж припустимо що там було щось типу написати в консольку текст, вивести його і кількість точок в ньому, то знов таки не все так тривіально як каже чат жпт.
«Привіт! Я в тебе вірю. Напиши скільки точок в цьому тексті.»
а потім я посперечаємось
«Вони» це була вся спільнота 15 років тому, виклав шмат коду з питанням, мене заклювали за те що не первіряв приходження нулпоінтера в функцію і ще якась муть на валідність данних, а на питання так і не відповіли.
Дякую за посилання, дуже цікавий дядько.
Добре, давайте від абстрактного до конкретного.
Задача написати функцію по переміщенню данних за допомогою двох ДМА
приймає(номер дма, куди класти, скільки класти, номер другого дма, куди класти, скільки класти)
Специфіка — контроллер, вхідні данні тільки з коду, нічого стороннього не прилетить, проект довгостроковий, не дуже великий, на 10 людей, код не на продаж
варіант перший, законфігурував, штовхнув, в описі написав що треба вирівнювати вказівник і який дма з якого місця які данні тягне. все
Варіант другий, перевірив вирівненність адресси, що не нулпойнтер, перевірив що номери дма існують а не «33», перевірив що номера дма не співпадають, що адресси не співпадають, що розмір данних адекватний.
Написав опис як в перший раз і додав опис оцих всіх еррор кодів.
плюс другого варіанту — якщо хтось шось передасть не те, то буде простіше відслідковувати що саме не те, кожен студентик буде отримувати гарну красиву відповідь про те що він не так зробив
Плюс першого — простий локанічний код, просто слідкуєш шо куди кладеш, все працує.
Я просто зустрічав оби два варіанта схожих задач, спочатку перший мені здавався більш зручним, і логічним, потім зрозумів що ці ві еррор коди мені дають рівно стільки ж інформаціі як і звичайний дебаг після отримання критичної помилки.
Банально просто ну запустив 1 варіант, критікал ерор, брекпоінт, перезапустив подивився шо там ти напхав.
Другий варіант, запустив — отримав повідомлення шо ось тут шось не так, подивився шо у змінній
Тобто різниця тільки в тому що спіймаєш ти краш системи від помилки чи ні, ну і можливо якесь логування чи можливість автоматичного тестування
приємно чути що від «абсолютних практик» вже відійшли, раніше це як закон ома вимагали
ніякий аналізатор коду не зможе зловити помилку все залежить від людини за монітором, ми маємо свідомо думати і контролювати все що ми робимо, за моєю практикою, аналізатори полегшують життя але знижують увагу і в кінцевому результаті виходять проблеми.
Доречі так скмо я ставлюсь до тестів, якщо ти розумієш шо ти і як робиш і як воно працує то вони не потрібні.
з глобальними змінними мене так само(може через те що в мене маленька команда була) але ти сам маєш контролювати що і коли ти змінюєш
ду вайл(0) це або в мене знайомі такі, або магія бо 90+% не розуміють нащо і нахіба
раст я дивився, може я не доріс, але не побачив сенсу, я сам все і так контролюю і не бачу причин нащо це перекладати на процесор(так так, нижчий поріг входу, і все таке) так само як і з більш «високорівневими мовами» ти витрачаєш час на те щоб зрозуміти як вони все контролюють який виходить таким самим ак розібратись як самому все контролювати
Та й взагалі те що звикли називати високорівневими мовами(джава пітон) хоча навіть С це високорівнева мова, але не суть, для мене це просто біль, ці равні абстракції, коли була задача на джаві в ргба зображенні змінити байти місцями для ргб на виході, з мене ти поти зійшло, бо я не розумів чого така проста задача так складно вирішується
Я от ще згадав, для мене ще з поганих пракик часто було виділення глобальних змін замість динамічного виділення памяті, може це через специфіку того що в мене контроллер і я працював по «гіршим» сценаріям і варіант коли памяті не вистачило це крах системи.
Так до суті, є сенс досвідченому програмісту зараз читати щось про гарні практики чи просто достатньо не бути мудаком і писати як пишеться?
Дякую за відповідь, я всеж про більш примітивні погані практики
наприклад використання войд пойнтера, я весь час чув шо так не можна, треба або темплейти або шось подібне, в якийсь момент в мене була велика частина роботи перекидувати данні з одного вхідного масиву по іншим за певними принципами, я просто віднісся до цього як до «абстрактних» данних, войдпоінтер, розмір, крок і кидаємо як попало, так само дурні оптимізації типу переносили не 8 uint8_t а два uint32_t( оптимізація мала б це зробити наче за мене, але чомусь не зробила)
Так само глобальні змінні, я втомився тягати через 10 функцій один вказівник, зробив массив глобальним і просто використовую де хочу.
Знов таки до попершого, темплейти, все життя мені казали що якщо функція під один тип данних ще раз викликається для іншого це ок, якщо в друге переписуємо на темплейт.
В мене перейшло до того що якщо ця функція не змінюється частіше ніж раз на 2 місяці я просто її копіюю під інший тип і взагалі намагаюсь так робити бо виникали ситуації коли різні типи потребували різної доробки, спочатку робимо універсальне потім перероблюємо під конкретне, я так кілька разів погорів, писав лаконічно вийшла кракозябра і тепер просто копіюю код(можу собі дозволити на контроллерах не такі обширні задачі)
от з цим доречі в мене питання до вас, я інколи використовую не зрозумілі для середнього програміста(для нормального зрозумілі але зачасту вони не широкого вжитку) конструкції типу:
do {..} while (0);
Массив вказівників на функції
Це доречі круто і зручно, але скажімо так, коли я сам з таким вперше зіштовхнувся то не зовсім зрозумів, та і інші теж носом крутили, а потім як зрозумів....
Арифметика вказівників, це взагалі те що я люблю, але мене хотіли за це потім на стовпі повісити
мені взагалі якщо чесно важко згадати що таке гарні і погані практики, але я просто памятаю що те що я писав за останні роки дуже-дуже сильно відрізнялось від того як мені казали гарно писати 15 років тому
Я не зовсім зрозумів що ви викрили?
Вам прислали фішингове посилання, ви знайшли домен, та хостінг, під яким висіл а якась пошта та аккаунти в векашечках і чомусь вирішили що вони шахрая(з якого дива)
Ви в поліцію написали заяву, чи «мені далі стало лінь» це весь результат.
Вся боротьба проти шахрайств чудово обмежується порадами від банку і не переходженням по чужим посиланням
Просто всему своё место, мне в моих проектах(обработка сигналов в системах реального времени) всё это ООП как пятое колесо да и в целом плюсовики меня за мой стиль кода заплевали бы в первые же секунды.
С другой стороны я бы посмотрел какие бы они тут строили костыли пытаясь не нарушать правила ООП и как бы оно потом не стало работать ибо одна глобальная переменная с общим доступом из любого места решает очень много проблем.
Но если у меня не ограничений по времени и мощный компьютер то ООП это вполне удобно, размашистые классы и всякие приятные плюшки, не надо думать про то кто когда куда лезет, все продуманно до нас.
А ещё очень многие кто любит говорить начинает городить страшные штуки с абстракциями создавая невменяемое нечто.
Вы бы хоть какую информацию оставили.
Так вы себя не продадите.
Так описався.
В цілому так, ви дали відповідь на моє питання — гарні практики, це ті які створюються головою способом мислення
Ну якось так і працую, якшо це зараз норма це добре