#c++
Допустим, я изучил с++. Однако это всего лишь консольные приложения, классы, ссылки, указатели, работа с файлами и т.д. Как писать драйвера? (в какую сторону смотреть, есть ли книги или документация). Что вообще следует писать на с++ и "как, чем"? Какой API лучше использовать для написания оконных приложений и стоит ли это делать на с++? Вот я и не могу понять, как это происходит, ведь в книгах с++ этого нет. Надеюсь вы поняли ход моих мыслей и сможете прояснить. Спасибо.
Ответы
Ответ 1
На мой взгляд одна из самых актуальных проблем современной литературы - много фундаментального и мало более профессионального. Я постараюсь объяснить это так, как вижу сам. Хотя знаний у меня не так уж много, но по крайней мере я попытаюсь. Надеюсь знающие люди подправят, если ошибся. Итак, работа электроники происходит посредственном передачи данных по шинам от одного управляющего устройства другому(процессоры, микропроцессоры, микроконтроллеры и т.д.). В зависимости от того, какие данные переданы, электроника выполняет определенные задачи. Фактически это уровень архитектуры компьютера и ассемблера, которую очень хорошо бы знать на базовом уровне(Тоненбаум - "Архитектура компьютера"). Команды эти обычно объединяются в своего рода блоки, аналогично функциям, которые делают какую-то определенную цель. Иногда создаются целые кучи функций, которые объединяются в библиотеки функций(те самые math, iostream и т.д.). Низкий уровень, драйвера: Для написания драйвером надо посылать эти самые команды управляющим устройствам. Язык С++ не очень подходит под эти задачи, проще пользоваться чистым Си. В самом простом случае подключается какая-то библиотека, которая позволяет посылать значения устройствам и читать их. К примеру, простейший способ обращения к динамику ПК может выглядеть так(учтите, windows не разрешает напрямую обращаться к портам!): #includemain( ) { int store; store = inp (97); /* запоминание начального значения с помощью порта 97 */ printf("пopт 97 = %d \n", store); /* проверка результатов*/ outp(97, 79); /* посылает 79 в порт 97; включение громкоговорителя */ outp(97, store); /* восстановление начального значения */ } Правда добрые люди обычно делают сторонние библиотеки более высокого уровня, которые уже содержат список готовых функций, классов, структур для обращения к устройствам. Например, код выше прекрасно работает из библиотеки функций windows.h, вызывая функцию beep(). Если вы хотите писать драйвера, то вам придется читать о том, как обращаться к устройству из документации разработчиков с оффициальных сайтов, какие команды устройство может выполнять, какие данные надо для этого посылать, есть ли для этого специальные библиотеки от разработчиков и многое другое. Высокий уровень. Люди, которые используют С++, работают обычно с готовыми наборами библиотек или создают свои под те или иные задачи. Например, есть такая вещь как WinAPI для создания графического интерфейса Windows окон. Это опять же готовые функции, вы подключаете библиотеку и работаете с ними. В ответ они делают какую-то работу и выдают результат. Если вы посмотрите на минимальное окно, то в коде вы увидите заполнение знакомых элементов: структуры, вызов функций, использование циклов и т.д. Другое дело, что эти функции и структуры сделали разработчики и они выполняют определенную работу, Вам остается только их вызывать. Для ознакомления с ними есть документация. Все выше и выше. Обычно библиотеки делаются универсальными и их можно использовать повторно. Например, на основе одной можно создать другую которая будет выполнять еще более специализированные функции. Например, можно создать библиотеку с функцией рисования линий. Из нее библиотеку с функцией рисования геометрических фигур. Из нее библиотеку с рисование деталей и т.д. так наращивается функциональность. Есть например программное рисование графики на мониторе, в windows его надстройка winAPI(линии, окошки, цвета уже готовы), но и у него есть более высокоуровневая оболочка MFC или Windows Forms, которые являются более усовершенствованными, но основаными на все том же WinAPI. Как итог: фактически работа программиста заключается в том, что бы выяснить какая библиотека может помочь справиться с нужными задачи и изучить ее. А изучив применить к своим нуждам. Хотите использовать Windows GUI приложения - есть WPF и Windows Form, или на более низком уровне взять WinApi. Хотите использовать видеокарту для 3D приложений - изучайте DirectX. Хотите работать с музыкой, опять же всякие библиотеки типа OpenAL есть в распоряжение. Охота писать драйвера, ищите информацию о том, как можно обращаться к устройствам и посредством какой библиотеки. Хотите узнать почему используются готовые библиотеки, изучите архитектуру компьютера и самые основы ассемблера. В любом случае вы будете пользоваться основными изученными элементами языка С++: структуры, функции, классы, указатели, простые типы данных и т.д. P.S. Пока писал, уже засомневался в правильности написанного)) Советую еще посмотреть вот этот сайт: http://www.firststeps.ru/ Ответ 2
как верно заметил Alexey123 С\С++ довольно много где применяется и объём знаний и практических навыков может кардинально отличаться... из вообще обязательного для любого программиста это: желательное для большинства программистов (хорошо знать основы) уметь читать С\С++ (простые несложные примеры) знать как собирается программа С\С++ понимать как работает процессор и память обязательное для всех программистов, лично я считаю что лучше это осваивать на примере С++, так как там можно сравнить функциональный и ООП стиль и заодно сравнить по скорости. знать и уметь вычислять Big O notation знать структуры данных: массив, вектор, список, очереди, деревья(бинарные, суффиксные, AVL, RB) знать что такое шаблоны знать контейнеры (реализации выше озвученных структур данных) более высокий уровень знать ООП и паттерны проектирования IDE + дебаггеры системы контроля версий синтаксические анализаторы профайлеры что касается GUI в связке с C++, то нужно держаться подальше от C++ Builder (крайне обидно когда вас громким матом выгоняют с собеседования, через пару секунд после показа проекта в "C++ Builder"). крайне полезно уметь писать на C++ для unix, если хотите писать только под винду то полезно покодить чутка в winapi но глубоко влезать нет смысла на начальном этапе. по GUI в С++ наилучший вариант это QT так как он win+unix при этом он открыт и довольно качественно сделан, за границей при разработке GUI в C++ он наиболее востребователен, однако его незаслуженно обходят стороной в наших учебных заведениях. лично мне видится (по вакансиям и по знакомству с языками программирования (ЯП)) что GUI постепенно исчезает в C++ (исключение QT) и переходит в более высокоуровневые языки С#, Java, так как там проще и дешевле создавать сложные проекты (по сравнению с C\C++), при этом C\C++ ни сколько не умирает, а просто переходит в другую плоскость работы в виде связки C\C++ + (Java,C#) например в виде "нативная часть" + "обёртка" (android) или в виде "низкоуровневый графический движок" + "высокоуровневая игра"Ответ 3
Посмотрите например здесь: Написание драйверов под Windows / Программирование драйверов и здесь: Книги по C++ и СиОтвет 4
Как писать драйвера? (в какую сторону смотреть, есть ли книги или документация). Читай в инете материал по DDK. Это по разработке драйверов. Что вообще следует писать на с++ и "как, чем"? Все, что пожелаешь. Ограничения ставит лишь фантазия. Какой API лучше использовать для написания оконных приложений и стоит ли это делать на с++? Взаимодействие между окнами в Windows идет через winApi. Тут придется разобраться с основами. Чтобы знать кухню изнутри. Все остальные либы взаимодействия это прослойка над winApi. Например, легко можно создать оконное приложение использовав Wtl или Mfc. PS А вообще самое лучшее найти друга или компанию и к ним затисаться. 2 месяца и ты начнешь плавать в материале. :-)
Комментариев нет:
Отправить комментарий