Ответы пользователя по тегу C++
  • Почему перемещение объявления и инициализации переменной на новую строчку кода влияет на результат работы программы?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В этом коде есть важная ошибка. В циклах for нигде не задано начальное значение переменной i, поэтому она может иметь любое значение, её поведение неопределено. Например, она может выделиться там же, где была выделена предыдущая, поэтому i во втором цикле будет равна последнему значению в предыдущем, то есть 10, даже если в первом цикле повезло попасть на 0.

    Локальные переменные как правило выделяются в стеке, поэтому если между двумя for стоит определение ещё одной переменной, то она, вероятно, выделится на месте i. И поэтому новая переменная i попадёт в другую часть стека, где, если повезёт, будет 0.

    Поэтому неудивительно, что поведение различаетя. Ведь оно в принципе не определено. В разных аппаратно-программных платформах и с разными компиляторами поведение может оказаться самым непредсказуемым. Например, в памяти может остаться мусор от предыдущей программы.

    Решение простое: надо везде в циклах for указать начальное значение i, тогда всё станет нормально, и перестановка определения count перестанет создавать такие совсем не странные эффекты.
    Ответ написан
    3 комментария
  • Почему сумма ряда Тейлора не верна?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Формула Тейлора имеет смысл лишь в небольшой окрестности рассматриваемой точки, и чем меньше окрестность, тем выше точность величины, которая рождает формула. Естественно, x=20 находится в очень даже большой, просто огромной окрестности точки x=0, в которой было взято разложение исходного квадратного косинуса.

    Можно улучшить точность, если перевести аргумент в интервал периодичности значения (0,2pi), затем в (0,pi) с учётом знака, затем в (0,pi/2) с учётом симметрии относительно pi/2, затем в (0,pi/4) с заменой синуса на косинус, если аргумент превышает pi/4. Это уже будет намного лучше, но если аргумент заметно отличается от нуля, то точность просядет очень быстро.
    Ответ написан
    Комментировать
  • Можно ли управлять всей программой с помощью скриптового языка?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Из lua можно вызывать код, написанный на C/C++. Соответственно, требуемый функционал оформляем в виде библиотеки, которую используем в скриптах.
    Ответ написан
    Комментировать
  • Отправка файла через телеграм бота с помощью libcurl с определенным параметром?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если по ссылке, то надо передать ссылку в URL: ...&document=ссылка

    Если файл лежит локально, то передать файл в multipart/form-data, как-то примерно так: https://curl.se/libcurl/c/postit2.html
    Ответ написан
    Комментировать
  • Как перенести объект из JS в другие языки?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Не трогая уже заранее кривую реализацию на js, сделать это невозможно. Увы. Хеш может вообще зависеть от движка js и его версии, от аппаратно-програмной платформы, так как структура объекта не факт что одинакова в разных реализациях, что может давать неодиаковые конечные результаты.

    Теоретически, если поборость последнее, то есть неодинаковый результат в разных условиях (путём запуска кода в предсказуемо одинаковых), то можно, например, оформить хеширующий микросервис, который будет получать данные и хешировать их по кривому алгоритму. Но лучше бы, конечно, этой фигнёй не страдать, а исправить изначальную проблему. Это как заболевания генетического происхождения: лечить их практически невозможно, потому что у человека уже миллиарды неверных копий ДНК в организме, которые поздно исправлять.
    Ответ написан
    1 комментарий
  • Как работать с api / бот discord?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Discord API использует HTTP-запросы. Поэтому потребуется любая библиотека для таких запросов (например, libcurl). А дальше курить официальную документацию по API.

    ... Но как уже тут выше упоминали, большого смысла в этом нет. Учиться на задаче, к которой язык плохо приспособлен - идея довольно странная.
    Ответ написан
    Комментировать
  • Нужна помощь с кросс компиляцией бинарника под разные системы Linux?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Скомпилировать как статический бинарник (можно даже под x86 чтобы работало на 32-битных и 64-битных машинах).

    $ echo 'int main(){ printf("Hello, World\n"); }' > xxx.c
    $ gcc -static xxx.c -o xxx
    xxx.c: In function ‘main’:
    xxx.c:1:13: warning: implicit declaration of function ‘printf’ [-Wimplicit-function-declaration]
     int main(){ printf("Hello, World\n"); }
                 ^~~~~~
    xxx.c:1:13: warning: incompatible implicit declaration of built-in function ‘printf’
    xxx.c:1:13: note: include ‘<stdio.h>’ or provide a declaration of ‘printf’
    $ ./xxx 
    Hello, World
    $ ls -l xxx
    -rwxrwxr-x 1 shurik shurik 844696 авг 13 22:04 xxx
    $ ldd ./xxx
            не является динамическим исполняемым файлом


    Но если используется много всяких библиотек, потребуются их статические версии, что может быть напряжно.
    Ответ написан
  • Qt4: функция определенная в одном файле не видна в другом?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    У Вас bz_drvrs.c написан на C, а сам проект — на C++. Для вызова C-функций из C++-кода необходимо использовать extern «C», поскольку формирование внутренних имён в .o-файлах для этих языков различается.

    Чтобы сделать переносимый код, обычно делают примерно так:

    #ifdef __cplusplus
    extern "C" {
    #endif

    // основное содержимое .h-файла

    #ifdef __cplusplus
    } // extern "C"
    #endif


    В результате .h-файл нормально работает и в C, и в C++.
    Ответ написан
    3 комментария