• Какие ограничения/возможности функции main?

    @res2001
    Deita, С89 - в мусор. С11 - актуальный, минимум С99.

    С++ - да другой язык, само собой. Но если убрать классы, ссылки, шаблоны, STL - останется практически Си - синтаксис, указатели, макросы, стандартная сишная библиотека. Можно писать программы на С++ не используя вышеперечисленных фич языка и используя функции из стандартной библиотеки Си.
    Даже без вышеперечисленного в С++ все равно останутся некоторые тонкости, отличающие его от Си, но сейчас это вам не важно.
    С++ просто из-за того, что Си - это легко.

    После Си вы не поймете ООП, просто потому что в Си ООП нет. А эта технология разработки используется в огромном количестве языков (в т.ч. в питоне). В С++ ООП есть.
    Вот после того как разберетесь с плюсами, все остальные языки вам покажутся легкими для освоения.
    После Си - скорее всего нет, т.к. многих концепций в Си просто нет (ООП, ссылки, лямбды, ...).

    На ассемблере можно написать все что угодно. Но этого никто не делает, т.к. это трудоемко. В основном сейчас ассемблер используют для каких-то низкоуровневых манипуляций с состоянием процессора и т.п. системных/железных вещей, которых не сделать ни в Си ни где-то еще. Обычно на ассемблере реализуют какой-то очень ограниченный функционал, затем используют этот скомпилированный код как функцию в Си или в С++.
  • Avr-gcc почему не работает обращение к полям структуры по индексу в цикле?

    @res2001
    Не использовал avr-gcc. Интересно, что за баг такой. Подпишусь.
    На вид все нормально.
    Глаз режет только i ++ через пробел, но это не ошибка.
    Я бы посмотрел ассемблерный код на выходе. Вероятно компилятор решил что-то выкинуть.
  • Как запустить два SSH туннеля из одного bat файла и убрать предупреждение о rdp сертификатах?

    @res2001
    winser, Если в сертификате зафиксировано доменное имя сервера или IP адрес и это не 127.0.0.1, то возможно избавиться совсем от предупреждения пользователя не получится. Если нет, то адрес по которому вы ходите на сервер не играет роли.
    Правда я не уверен, что в сертификатах для RDP практикуют привязку к адресу и вообще, что она проверяется.

    Если у вас на серверах развернута полноценная PKI со своим центром сертификации, то вам сертификат сервера не нужно устанавливать. Нужно установить сертификат центра сертификации. Могут быть промежуточные центры сертификации, тогда надо установить всю цепочку сертификатов центров сертификации.
    Если на серверах самоподписанный сертификат (такой используется по умолчанию), то просто ставите сертификат сервера и все. Возможно придется поиграть с тем, в какой контейнер поставить сертификат, чтоб клиент RDP его успешно нашел.
  • Какие ограничения/возможности функции main?

    @res2001
    Deita, С питона можно было бы начать, для изучения азов программирования. Он достаточно прост.
    Дальше можно переключиться на что угодно, что больше по душе или остаться изучать питон глубже.
    JavaScript - такое себе предложение, только если вы планируете связать свою дальнейшую карьеру с вебом.
    Паскаль - стар. Хотя до сих пор жив Дельфи и его бесплатный аналог Lazarus, но там ObjectPascal. В качестве первого языка, наверное, можно использовать. Но в дальнейшем надо будет изучать что-то другое, т.к. Дельфи и Лазарус сейчас мало котируются на рынке.

    Но это не важно. Просто с Си потратите чуть больше времени на понимание указателей, работы с динамической памятью, массивами и строками.

    Сам по себе Си язык маленький и достаточно простой (кроме некоторых вышеперечисленных не очевидных вещей). Так что стоит сразу ориентироваться на С++.
    На чистом Си сейчас мало работы, в основном востребован С++. Иногда в проектах на С++ используется чистый Си для каких-то узких задач. Так что стоит заходить именно на плюсы, а Си подтянете, если будет необходимость. Перейти с плюсов на Си не сложно.
    Начните с покупки толстой книги для начинающих. Прата "Язык Программирования C++" подойдет, смотрите издание по свежее. Есть и несколько других не плохих книг для старта. Но это только начало :)
  • Как запустить два SSH туннеля из одного bat файла и убрать предупреждение о rdp сертификатах?

    @res2001
    winser,
    А сертификатами для rdp что делать

    Сертификаты можно предварительно установить пользователю в систему. Сделайте их доступными для скачивания и дайте пользователю URLы и инструкцию по установке.
    В винде есть утилита командной строки certutil, которую можно использовать для "автоматической" установки сертификата. Но сертификат все равно нужно сначала скачать (или предоставить вместе с батником). Не уверен, что certutil доступна во всех версиях винды, надо проверять. По аргументам то же не подскажу, гуглите (certutil /?).
    Сертификат может быть не один, если используется цепочка сертификатов, то надо предоставить все сертификаты в цепочке, вплоть до корневого центра сертификации. В этом случае устанавливать сертификаты надо в разные контейнеры.
    И кстати certutil можно не вызывать каждый раз при старте mstsс, установить сертификаты достаточно один раз. Собственно так же как и cmdkey - она сохраняет учетные данные во встроенное хранилище винды и дальше можно уже не вызывать cmdkey.

    /noConsentPrompt - это не о том (mstsc /?).
  • Как запустить два SSH туннеля из одного bat файла и убрать предупреждение о rdp сертификатах?

    @res2001
    winser, В команде start первый параметр - название окна, запускаемой программы.
    Используйте ее так:
    start "" ssh ...
    Но у вас не одна команда ssh, а конвейер, так что start нужно добавлять к каждой команде конвейера (к cmdkey, не нужно - она выполняется быстро). На самом деле конвейер тут то же не нужен, просто запишите все команды последовательно, так проще:
    start "SSH1" ssh -L 9088:192.168.0.89:3389 user1@192.168.0.89
    cmdkey /generic:termsrv/127.0.0.1 /user:user1 /pass:123456
    start "" mstsc /v:127.0.0.1:9088
    ...


    UPD: Хотя заголовок - не обязательный параметр start, так что это можно пропустить. Но про конвейер все верно написал.
  • Какие ограничения/возможности функции main?

    @res2001
    Deita, Вы как-то все пытаетесь усложнить. На самом деле все проще. Воспринимайте код буквально. Не нужно строить догадок. Для простоты пока считайте, что все что написано в исходном коде именно так и исполняется. Есть некоторые "тонкие" не явные моменты, но ваш вопрос не об этом.

    Изменяет содержимое переменной только оператор присваивания, если его нет (х+2) - содержимое переменной (х) не меняется.
    Переменные аргументы функции в этом плане немного отличаются от обычных переменных. Первичная инициализация аргументов происходит параметром, заданным при вызове функции. При этом явного оператора присваивания нет.
  • Корректно ли в C++ называть стек статической памятью?

    @res2001
    В программе может быть несколько потоков, у каждого потока свой стек. При старте программы стартует только один главный поток, память для него выделяется загрузчиком ОС. Память для стеков других потоков выделяется при создании соответствующего потока уже во время выполнения программы.

    https://en.cppreference.com/w/cpp/language/storage...
    Поскольку на стеке хранятся переменные с автоматической длительностью хранения, то стек стоит считать автоматической памятью. Но это немного другой взгляд на сегменты памяти.

    Подобная терминология может вводить в заблуждение. И стек и .bss и .data и .rodata и даже .text могут физически находится на одной и той же плашке (или микросхеме) памяти.

    Эти термины относятся к ЯП и к тому как компилятор работает с переменными (т.е. какие инструкции генерирует для доступа к переменным), размещенными в том или ином сегменте памяти.

    Тут главное что бы вы понимали как используется стек и другие сегменты памяти. Терминология может меняться в зависимости от того с какой стороны вы рассматриваете вопрос.
  • Что ещё нужно сделать тут?

    @res2001
    aryzhanki, У меня аналогично.
    Нажмите на ссылку ниже "Подробнее", там будет статья от микрософта на эту тему. Похоже требуется дополнительная настройка, чтоб это работало. Я пока не вникал.
    В статье указано, что применимо только для Windows Server. Это как-то смущает, у меня Вин11. Толи косяк у микрософта, то ли просто статью не обновили до Вин11.
  • Как правильно организовать таблицы?

    @res2001
    Михаил Смирнов, В общем случае это создает дополнительные проблемы и дополнительный код на вышестоящем уровне. С этим вы уже столкнулись, но еще, похоже, не успели окунуться в проблему сполна.
    Это может быть оправдано, только если за год в этой таблице накапливаются миллиарды записей и весят они под несколько десятков/сотен гигабайт. Тогда разные таблицы средствами СУБД можно разнести на разные физические диски. Но и тут есть другие технологии решения проблемы, ниже уже писали. Т.е. подобное усложнение структуры базы и кода можно применять с какой-то целью, а не просто так, потому что хочется. Само по себе это действие не может быть целью.
  • Как правильно организовать таблицы?

    @res2001
    Чем вызвана подобная организация таблиц?
    Что бы так делать, нужны очень веские причины, которые бы перевешивали все возникающие проблемы.
  • Хочу понимать биты/байты и их друзей. Литература?

    @res2001
    Вы же как-то освоили в школе сложение десятичных чисел.
    С двоичными еще проще - тут цифр не десять, а две. Правила, по которым выполняются элементарные арифметические действия, те же.
    Вообще в любом учебнике по информатике это должно быть описано. Да и в интернете полно материалов на эту тему.

    Возможно вам и не нужно вникать в биты. Все зависит от задачи, которую вы ставите перед собой. Из вопроса это не ясно.

    Вот с шестнадцатеричной системой счисления гораздо сложнее - там цифр 16, но правила те же. А еще кое-где применяют 36ричную систему, сам видел.
  • Почему при подключении по ssh с ключем требует пароль?

    @res2001
    winser, На ключ при генерации то же можно повесить пароль. Тогда пароль будет запрашиваться, но уже от ключа.
  • Как настроить VPN на удаленном рабочем столе при подключении через RDP?

    @res2001
    Возможно ТСу как раз и нужен режим default route. Так что сразу выключать не стоит, нужно разобраться в хотелках.
    Даниил Сидоров Поведение при подключении ВПН вполне адекватное при включенном режиме default route.
    Вам нужно понять для чего вам ВПН.
    Если вы планируете выходить через ВПН в интернет, то default route должен быть включен, но в этом случае вам придется смириться с отваливанием RDP соединения. Вновь подключиться к RDP вы сможете только через ВПН.
    Если выход в инет через ВПН не планируется, то необходимости в default route нет, настройку нужно выключить. Проблема с отваливанием RDP соединения отпадет.
  • Как создать массив из типов данных в си?

    @res2001
    Nulltiton, А почему не через _Generic?
    #define GET_TYPE_SIZE(type)    _Generic((type), char: 1, short: 2, int: 4, ...)
    main() {
       printf("%zu\n", GET_TYPE_SIZE(int));
       
    }

    Более универсальный вариант - в _Generic макросе возвращать индекс типа, а не размер. Массив размеров держать отдельно и использовать индекс, возвращаемый макросом, для доступа к нужному элементу.
  • Как сделать сервер маршрутизации?

    @res2001
    Александр Маджугин,
    Есть скрипты разные - это один из них был.

    Поэтому я и просил показать конфиг openvpn сервера.
    Скрипты пишутся под какую-то типовую конфигурацию сети. Конфигураций разных может быть масса. И как правило вы точно не знаете под какую конкретно конфигурацию написан скрипт. Ваша конфигурация не выглядит типовой.

    По мимо поднятия NAT надо добавить маршрут на ноуте, я писал где-то выше. Без этого работать то же не будет. Стоит начать с маршрута, т.к. это можно легко сделать.

    Даже если все настроено правильно и должно работать, фаерволы могут блокировать трафик. Причем фаервол на любом промежуточном узле. Вам надо в iptables разрешить трафик между адерсами openvpn сети и адресами gitlab сети. И на вашем ноуте то же не помешает проверить фаервол.
  • Как сделать сервер маршрутизации?

    @res2001
    Александр Маджугин,
    я не знаю

    Не знаете - погуглите. NATов может быть несколько на одном компе, если у него несколько сетевых интерфейсов.
    NAT привязан к сетевому интерфейсу, поэтому я так и выражаюсь.
    Вот даже погуглил :) https://interface31.ru/tech_it/2021/07/osnovy-ipta...
    добавьте ключ -o и укажите интерфейс fortivps.
  • Как сделать сервер маршрутизации?

    @res2001
    Александр Маджугин, Openvpn сам NAT не поднимает. Возможно вы когда его настраивали добавили соответствующее правило.
    NAT вообще не имеет отношения к ВПН, его можно поднимать, можно не поднимать, зависит от потребностей.
    Во многих статьях в интернете по поднятию ВПН, NAT идет в комплекте, но это не значит что он нужен абсолютно в любых конфигурациях.
    тоже нет (((

    Что именно нет? Как вы тестируете?
  • Как сделать сервер маршрутизации?

    @res2001
    Александр Маджугин, К сожалению не силен в iptables, не подскажу как тут правильно поднять NAT.
    Но причем тут "внешний адрес сервера VPS"?
    Вы должны поднять NAT на интерфейсе foritvps, а там какой-то свой адрес используемый внутри fortivpn.
  • Как сделать сервер маршрутизации?

    @res2001
    Александр Маджугин, Раз без openvpn ваш VPS ходит к gitlab успешно, то как минимум нужный маршрут прописан.
    Но этого мало. Т.к. сеть за fortivps сервером ничего не знает о ваших адресах, то ответы будут где-то теряться. Вам нужно настроить NAT на интерфейсе fortivps, тогда в сеть gitlab вы будете попадать с адресом, полученным при подключении к fortivps.
    Когда вы ходите к gitlab без openvpn, то используется адрес интерфейса fortivps. Благодаря NAT можно получить тот же эффект и для удаленных компьютеров.
    И в конце надо добавить маршрут на вашем компе к сети gitlab через openvpn сервер. Это делается опцией push route в конфиге openvpn сервера.