• Как правильно подключать make-файл из одной директории к make-файлу из другой?

    @res2001
    Developer, ex-admin
    При включении с помощью include так и делают, т.к. для включенного makefile текущим каталогом будет каталог откуда вызван первичный makefile, а отсюда файлы в подкаталоге доступны только с указанием пути. include же по сути просто вставляет текст одного файла в другой и все.
    Другой вариант - не использовать include, а запускать make рекурсивно для каждого подкаталога с переходом в этот подкаталог (вроде ключ -с в make).
    Ответ написан
    Комментировать
  • В каких случаях логичней чтобы получить половину умножать на 1/2, а в каких делить на 2?

    @res2001
    Developer, ex-admin
    Есть такие микроконтроллеры, где нет аппаратного деления. Оно там реализовывается программно и работает оооочень долго. Вот прям заметно дольше. И если деление на константу идет в цикле, то в таком случае выгоднее один раз перед циклом вычислить 1/2, а затем умножать на результат деления. 1/2 тут для примера, конечно.
    С подобными процами лично сталкивался и был неприятно удивлен фактом такой просадки производительности на делении.
    В общем случае, даже на современных настольных процах от интел или амд операция деления выполняется дольше умножения. Счет идет на несколько процессорных тактов. Иногда это может играть роль.

    Если же речь о целочисленном делении на 2, то тут эта операция заменяется сдвигом вправо на 1 бит, что работает быстрее и умножения и деления. Впрочем подобные вещи компилятор сам в состоянии сделать при включенной оптимизации.
    Ответ написан
    Комментировать
  • Как организовать ввод данных в bat-файле?

    @res2001
    Developer, ex-admin
    В составе putty есть клиент командной строки, там можно задать пароль в командной строке или сохранить в конфигурации putty и использовать конфигурацию для подключения.
    Для правки конфига, наверное, есть смысл конфиг просто скачать, локально его отредактировать, а затем записать новый. Для скачивания файлов из ком.строки в putty то же есть утилита.
    Ответ написан
  • Как исправить код?

    @res2001
    Developer, ex-admin
    Видимо препод хочет, чтоб программа могла работать с несколькими значениями А и N.
    1. Ввод A и N и расчет периметра выносите в отдельную функцию.
    2. В main делаете вечный цикл, где спрашиваете пользователя что-нибудь типа "Давай еще посчитаем (1 - да; 0 - нет)". Если пользователь вводит 1, то выполняете функцию из п.1, после ее выполнения снова спрашиваете пользователя. Если пользователь вводит 0 - break из цикла и завершение программы.
    Ответ написан
    Комментировать
  • Как считывать данные в файл?

    @res2001
    Developer, ex-admin
    cin и cout - это объекты классов потоков ввода и вывода в консоль. Объекты cin и cout объявляются автоматически, т.е. вам не нужно создавать эти объекты, они уже созданы внутри стандартной библиотеки.
    Есть в std классы ifstream и ofstream, которые являются потоками ввода/вывода в файлы. Объекты этих классов не создаются автоматически, но вы можете создать эти объекты вручную и указать при создании с каким файлом объект должен работать. Дальше заменяете все cin/cout на объекты классов ifstream/ofstream.

    Есть другой вариант. Вообще не менять программу, но при запуске перенаправлять потоки stdin/stdout в файлы, что-то типа такого:
    prog.exe <file_input.txt >file_output.txt
    В этом случае в программе объекты cin/cout автомтатически начинают использовать file_input.txt для ввода и file_output.txt для вывода.
    Ответ написан
    Комментировать
  • Можно ли управлять всеми настройками windows через cmd?

    @res2001
    Developer, ex-admin
    Сейчас более актуально управление из powershell. По крайней мере сама микрософт сейчас активно posh продвигает.
    В cmd из коробки можно управлять много чем. Многие настройки винды лежат в реестре, а реестр править из cmd можно, правда применять большую часть настроек, внесенных правкой реестра на прямую, придется перезагрузкой компа.
    Выключить и перезагрузить комп можно командой shutdown.
    Ответ написан
    Комментировать
  • Проблема компилятора?

    @res2001
    Developer, ex-admin
    Поставь MSVC, там компилятор со всем необходимым входит в комплект.
    VSCode - это просто текстовый редактор, весь остальной функционал требует плагинов и другого программного обеспечения, не входящего в состав.
    Ответ написан
    Комментировать
  • Видит ли провайдер сети сервера vpn ip клиента?

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

    @res2001
    Developer, ex-admin
    Вот это void BubbleSort(vector<int> v); не вызов функции. Это ее объявление. В коде предварительные объявления функций могут встречаться где угодно, синтаксически это верно, потому компилятор и не ругается. Но вызова не происходит, потому что его нет.
    Ну и учтите замечание 12rbah
    Ответ написан
    Комментировать
  • Как узнать размер массива, который был передан в шаблонную функцию?

    @res2001
    Developer, ex-admin
    Потому что при передаче в функцию статического/автоматического массива передается указатель, а не сам массив.
    8 - размер указателя на 64-битной платформе.
    Размер нужно передавать отдельным параметром, как писал mayton2019
    Ответ написан
    Комментировать
  • Чем отличаются size_type, size_t, unsigned X?

    @res2001
    Developer, ex-admin
    size_type - это обычно typedef из других типов, который разработчик контейнера решил использовать в контейнере. Скорее всего это будет тот же size_t. Для данного конкретного контейнера логично использовать его size_type.
    Размер size_t привязан к размеру указателя, т.е. sizeof(void*) == sizeof(size_t).
    Как раз это и обеспечивает, то что size_t может индексировать всю возможную память (по байту) для конкретной архитектуры процессора. Размер size_t на х32 - 4 байта, на х64 - 8 байт. Размер указателя, в свою очередь, равен размеру адресной шины процессора.
    В общем случае для счетчиков элементов и т.п. вещей всегда используйте size_t. Но если вы точно знаете, что у вас вот в этом конкретном контейнере/массиве не может быть больше n-ого количества элементов (например массив фиксированного размера), то можно использовать тип меньшей разрядности, достаточный для индексации контейнера.
    Переменные счетчиков, индексов и т.п. обычно делаются беззнаковыми (size_t - беззнаковый), потому что обычно алгоритмически эти переменные никогда не принимают отрицательных значений. Так зачем терять лишний значащий разряд? Но это не всегда так, в каждом конкретном случае нужно делать свой выбор, универсальных решений нет.
    Бывает ли на практике размер контейнера таких размеров которые вмещаются в size_t? В базах данных запросто может быть таблица размером больше, чем помещается в 4 байтовый size_t. Максимальное значение 8 байтового size_t - это ооочень большое число. В практических задачах вряд ли найдется контейнер, вмещающий такое количество объектов (но всегда могут быть исключения). Но итерироваться или считать можно не только объекты в контейнере, можно считать например байты/сектора на диске или пакеты в интернете или контейнер может лежать в распределенной системе хранения размером в экзабайты или больше (сейчас это уже реально).
    Ответ написан
    2 комментария
  • Как посчитать количество символов в char на С?

    @res2001
    Developer, ex-admin
    Конкретно для приведенного примера можно делать так: (sizeof(text) - 1)
    Это будет работать только в подобных случаях, когда text - это статический/автоматический массив фиксированного размера (как в данном примере). -1 требуется, чтоб удалить завершающий нулевой символ.
    Преимущество перед strlen в том, что sizeof вычисляется на этапе компиляции, т.е. по факту в коде вместо этого выражения будет константа 14, вычисленная компилятором.
    Кстати, можно делать еще так: sizeof("Literal string") - 1

    Если text будет определена по другому, например char *text = "Literal string";, то такой подход уже не прокатит.
    Универсальный вариант, который будет работать для всех случаев однобайтной строки с завершающим нулем - использовать strlen.
    Ответ написан
    Комментировать
  • Как повторно отправить нужный мне tcp пакет?

    @res2001
    Developer, ex-admin
    В общем случае нужно заставить игру саму отправить этот повторный пакет.
    Дся TCP подключения для отправки повторного пакета нужно "ломать" игру, чтоб отправить пакет в этом же TCP соединении.
    Для UDP могут быть варианты, но надо знать как проверяет соединение серверная сторона, чтоб выдать сторонний процесс за процесс игры. Понятно, что в UDP соединений нет, но они могут быть организованы вышестоящим протоколом игры.
    Ответ написан
    Комментировать
  • Как в bat файле удалить текущую директорию?

    @res2001
    Developer, ex-admin
    Текущий каталог вы не удалите, т.к. он занят вашим же процессом cmd.exe. Надо перейти в другой каталог, а затем уже удалять.
    Ответ написан
    Комментировать
  • В чем разница const char* и char const*?

    @res2001
    Developer, ex-admin
    Между const char * и char const * - разницы нет. Допустимо использовать обе записи.
    Но кроме самих данных, на которые указывает указатель, можно делать константным и сам указатель, как написал Adamos.
    Ответ написан
  • Совет в написании своей ОС?

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

    @res2001
    Developer, ex-admin
    На винде микросовтовский компилятор, по ощущениям, лучше. Специально замеры не проводил, все субъективно. Причем не обязательно использовать студию, можете сидеть на том же CLion (или QtCreator) и собирать с помощью cl. Можно поставить вообще только MS Build Tools - туда как раз и входит компилятор без IDE. На счет лицензирования - вопрос интересный. Предоставляют компилятор бесплатно, но могут быть лицензионные ограничения на разработку коммерческого софта.

    На линукс gcc или clang.

    Разница между компиляторами, конечно, есть. Разные расширения, разная степень поддержки стандартов, особенно свежих. Могут отличаться возможности оптимизации и т.п. Например микрософт никогда не поддерживала стандарты Си и там много чего нет еще с С99. Стандарты С++ они официально поддерживают.
    Если вы пишите приложение используя только стандартизованные языковые возможности (без расширений компилятора), то, по идее, не должно быть проблем пересесть на другой компилятор в рамках одной ОС.
    Кстати в gcc по умолчанию расширения включены.

    Есть и другие компиляторы. Например у интел хороший оптимизирующий компилятор, но он стоит денег.
    Ответ написан