Ответы пользователя по тегу C++
  • С какой книге по c++ рассказывается о создании библиотек(dll,so)?

    @res2001
    Developer, ex-admin
    По большому счету, создание библиотек отличается от создания исполняемого файла опцией компилятора.
    Ну и в библиотеке не нужно делать main, т.к. он находится в вызывающей библиотечные функции программе.
    Ответ написан
    Комментировать
  • Какова судьба MFC и C++?

    @res2001
    Developer, ex-admin
    С/С++ не выйдут из моды еще долго, у них своя область применения и там они практически вне конкуренции.
    MFC - не стоит тратить на нее время. Она уже 20 лет назад была похожа на неповоротливого монстра, не думаю, что с тех пор что-то изменилось в лучшую сторону. К тому же привязка к одной платформе и одному компилятору, в наше время - это большой минус. И, кстати, на сколько я знаю, в бесплатных версиях VS MFC нет.
    Ответ написан
    Комментировать
  • Как происходит линковка приложений?

    @res2001
    Developer, ex-admin
    1.обычно у каждого компилятора свой runtime. Для VC - это разные версии msvcrt.dll.
    2.Читайте на сайте разработчика компилятора. В основном это не сильно принципиально, разве что вы используете какие-то специфические плюшки, которые не описаны в стандарте, но есть в конкретном компиляторе и его стандартной библиотеке.
    3.runtime - это как правило стандартная библиотека + точка входа и завершения программы (а ваш main вызывается уже из runtime).
    4.Можно. Обычно стандартная библиотека поставляется как в виде динамической библиотеки, так и статической. Выбор какую использовать за вами, задается опциями компилятора.
    5.Не большой. Но тут лучше говорить не про оверхед, а про "написание программы на чистом" WinAPI/POSIX и других OS API. На сколько это трудозатратней по сравнению с использованием стандартной библиотеки.
    По собственному опыту скажу, что написание на чистом WinAPI довольно трудозатратное (и время затратное) занятие, затратнее примерно в 1.5 по сравнению использованием stdlib. Но у меня это был первый и пока единственный опыт, дальше, видимо должно быть проще.
    Ответ написан
    2 комментария
  • Как обновлять TCP сервер с подключенными клиентами?

    @res2001
    Developer, ex-admin
    Как в nginx - запускается вторая копия процесса уже обновленного, которая принимает новые соединения, а старые дообрабатывает старый. Старый, конечно, должен при этом закрыть слушающий сокет.
    Когда все соединения обработает, он сам завершается. Механизм сложный в реализации, но тут простого и не будет.

    Еще где-то видел такой подход : слушающий процесс и обработчики реализованы в отдельных библиотеках как плагины. Плагины можно загружать и выгружать на лету. При таком механизме становится довольно удобно обновлять приложение - можно обновлять только плагин.
    Ответ написан
    4 комментария
  • Можно ли сделать массив меток goto?

    @res2001
    Developer, ex-admin
    Возможно setjmp/longjmp это то что вам нужно?
    Ответ написан
    Комментировать
  • Corecrt.h file not found - Как решить?

    @res2001
    Developer, ex-admin
    Вы в тегах ставите Visual Studio, а компилируете gcc?
    Видимо, вы пытаетесь собрать свой хеловорд с помощью mingw?
    Тогда запустите сначала оболочку mingw - она обычно запускается стартовыми скриптами: "MinGW-w64 Win64 Shell" и такой же для x32 версии.
    Оттуда и компилируйте, а не из командной строки винды.
    Ответ написан
  • Не могу использовать функции из .c файла, хотя она объявлена в .h файле. что делать?

    @res2001
    Developer, ex-admin
    Не нужно в включать gd_filter.c!
    Просто добавьте его к компиляции:
    gcc CPPImageCorrector.cpp gd_filter.c -o CPPImageCorrector.exe -lgd.dll
    Ответ написан
    Комментировать
  • Как сделать разные цели в одном makefile?

    @res2001
    Developer, ex-admin
    Ну и сделайте так:
    ud-button:
    PROJECT_SOURCEFILES += ud-dag_node.c 
    DEFINES+=PROJECT_CONF_H=\"ud-button.project-conf.h\"
    CONTIKI = ../..
    CONTIKI_WITH_IPV6 = 1
    include $(CONTIKI)/Makefile.include
    
    ud-rpl_root:
    PROJECT_SOURCEFILES += 
    DEFINES+=PROJECT_CONF_H=\"ud-rpl_root.project-conf.h\"
    CONTIKI = ../..
    CONTIKI_WITH_IPV6 = 1
    include $(CONTIKI)/Makefile.include

    make запускать соответственно:
    make ud-rpl_root
    или
    make ud-button

    А для цели all можно написать так:
    all: ud-button ud-rpl_root
    Ответ написан
  • Почему Qt creator выводит ошибку?

    @res2001
    Developer, ex-admin
    Может потому что вы пытаетесь скормить компилятору С++ код на питоне?
    Ответ написан
  • Как быть с отладкой внутренностей Qt?

    @res2001
    Developer, ex-admin
    Откомпилируйте себе версию с отладочной информацией и наслаждайтесь полноценной отладкой.
    Ответ написан
    Комментировать
  • Как решить задачу с массивом NxN?

    @res2001
    Developer, ex-admin
    0.Оформление кода жуткое, не читабельно совсем.
    1.Выделяйте память сразу для всего массива размером b*c - не зачем дробить каждую строку. Обычно динамическое выделение памяти достаточно дорогостоящая процедура (сейчас то вам это не принципиально).
    2.Забудьте про оператор goto. Единственное место, где его оправданно использовать это выход из глубоких вложенных if или циклов, но даже это можно решить другими способами, правда обычно более затратно, чем goto. В данном случае у вас он используется правильно, но ведь есть break для вашего случая, а это гораздо лучше, чем goto.
    3.В общем и целом у вас почти все верно. Но:
    Строка 80 явно лишняя:
    int g[i];
    Т.к. вы объявляете g[] выше. И кстати выше (в 71 строке) объявляете его не правильно, т.к. переменной e не присвоено никакое значение к моменту ее использования.
    4.В последнем цикле вы видимо пытались сделать сортировку - не получилось. Попробуйте еще раз. И нужно сначала отсортировать, а потом вывести. По другому не получится.
    Возможно вам придется сделать g[] не массивом intов, а массивом структур, где в каждой структуре будет содержаться "сумма четных отрицательных элементов каждой строки" и в другом элементе структуры - индекс строки. Сортировать нужно будет массив структур по сумме.
    5.Про остальное писать не буду, т.к. на решение задачи не влияет.

    Желаю удачи!
    Ответ написан
    6 комментариев
  • TCP/IP: что делать, если в процессе чтения сервером пакета от клиента пропадает интернет?

    @res2001
    Developer, ex-admin
    В общем целиком поддерживаю Smithson и Олег Цилюрик
    Проверяйте коды ошибок, возвращаемые методами передачи/приема. При работе с сетью всегда нужно закладываться на то, что передача или прием пройдет с ошибкой или будут приняты/переданы не все данные.
    Т.е. фактически вы должны писать программу исходя из того что ошибки приема/передачи не то что возможны, а они точно будут всегда.
    И да, кастомные keep-alive для TCP - это полная фигня - в протоколе уже все реализовано.
    Ответ написан
    5 комментариев
  • Переопределить operator() для получения доступа к члену класса?

    @res2001
    Developer, ex-admin
    Может вас устроит наследование вашего Window от Graphics?
    Эффект от наследования точно такой какой вы хотите получить другими способами.
    Ответ написан
  • Как посчитать сумму с помощью thread?

    @res2001
    Developer, ex-admin
    Вы в каждом потоке считаете полную сумму, а надо в каждый поток передавать свой диапазон n0-n1, отличный от других. И избавьтесь от мьютексов - выделите для каждого потока свое место куда он будет складывать сумму. Это намного увеличит производительность. После того как все потоки отработают в главном останется только сложить суммы.
    Кстати, можете посмотреть в сторону OpenMP - эта библиотека для подобных задач хорошо подходит.
    Ответ написан
    2 комментария
  • Как повысить свои навыки программирования на С/С++?

    @res2001
    Developer, ex-admin
    Найдите работу программистом. В коллективе и на реальной задаче гораздо быстрее оттачиваются навыки.
    Ответ написан
    Комментировать
  • Можно ли написать в Microsoft Visual Studio 2015 на языке C без C++?

    @res2001
    Developer, ex-admin
    Есть соответствующий параметр в настройках проекта: С/С++ -> Advanced -> Compile As (параметры компилятора /TP или /TC).
    Ответ написан
    Комментировать
  • Как быстро разобратся в сишном коде?

    @res2001
    Developer, ex-admin
    Начните разбираться в коде, уже через неделю другую плотной работы станете довольно бегло понимать что пытался сказать разработчик своим кодом.
    Си сам по себе очень простой язык, самая сложная вещь в нем - указатели, стоит что-нибудь почитать на эту тему, все остальное не сильно отличается от других языков.
    Соберите софт с отладочной информацией и погоняйте под отладчиком, обычно отладчик выдает сообщения про утечки памяти при завершении программы, это может дать толчок для поиска мест где возможны утечки.
    Так же можно воспользоваться каким-либо анализатором кода. Но там, скорее всего, будет много второстепенных ошибок и из всего их обилия придется долго и нудно выделять те что действительно важны на данном этапе.
    Ответ написан
    Комментировать
  • Как прочитать из консоли LPCWSTR?

    @res2001
    Developer, ex-admin
    Если на чистом WinAPI, то надо сначала получить кодировку консоли (GetConsoleCP) (в русской винде она как правило 866 или 1251), прочитать строку в обычный PSTR, а затем преобразовать в PWSTR с помощью WideCharToMultiByte. Кодировка консоли нужна, чтоб передать ее в WideCharToMultiByte.
    wcin - делает это все сам.
    Ответ написан
    1 комментарий
  • [С++ ]Поставил begin — поставь и end. Как распознать вложения и правильно поставить в коде end?

    @res2001
    Developer, ex-admin
    Никак.
    Если бы можно было легко предугадывать куда вставить end, то все компиляторы давно бы этим занимались, а они почему то этого не делают, а только выдают сообщение об ошибке при этом, как правило указывается строка даже близко не указывающая на то место где не хватает endа.
    И прочитайте внимательно задание - вам не надо вставлять end. Делайте как компилятор - считаете количество begin и end, если не равно - ошибка.
    Ответ написан
    5 комментариев
  • Перемещение по текстовому файлу?

    @res2001
    Developer, ex-admin
    Если опасаетесь читать файлы целиком можно использовать механизм файлов отображаемых в память.
    Ответ написан
    Комментировать