Задать вопрос
  • Что означают просто { тут блок кода } в с++?

    @tugo
    Пользуются свойствами блока кода:
    1. создается новая область видимости
    2. объект, созданный внутри блока кода, удалится по завершению (т.е вызовется деструктор). В сочетании с RAII иногда удобно.

    // Когда не хочется придумывать новое имя другой переменной, которая точно такая же по смыслу.
    // И хочется дать ей константность - ее менять я не собираюсь, в смысле изменчивости переменной.
    const bool ok = foo1();
    if (!ok)
        return;
    {
        const bool ok = foo2();
        if (!ok)
            return;
    }


    // Когда надо защитить мьютексом изменение переменной, на как можно более короткое время.
    ...  некий код
    {
        const std::lock_guard<std::mutex> lock(_mutex);
        ++i;
        // _mutex is automatically released when lock goes out of scope
    }
    ... продолжаем код


    Или замерить время выполнения части кода. Создаем объект, в конструкторе которого захватываем текущее время, в деструкторе выводим затраченное время в лог.
    Ответ написан
    Комментировать
  • Что в коде нужно исправить что бы мне выводился на экран ip адрес?

    @none7
    #pragma comment (lib,"Ws2_32.lib")
    #include <winsock2.h>
    #include <WS2tcpip.h>
    #include <Windows.h>
    #include <iostream>
    #include <string>
    
    int main() {
        WSADATA wsa;
        std::string domain;
        int status;
        struct addrinfo hints = { 0 }, * res, * p;
        hints.ai_family = AF_UNSPEC;
        hints.ai_socktype = SOCK_STREAM;
    
        // ошибки выводятся в ANSI кодировке, а консоль по умолчанию в OEM
        SetConsoleCP(GetACP());
        SetConsoleOutputCP(GetACP());
    
        // На Windows необходима инициализация сетевой библиотеки
        if (status = WSAStartup(MAKEWORD(2, 2), &wsa) != 0) {
            std::cout << "Error: of getaddrinfo: " << get_error_message(status) << std::endl;
            // принято возвращать причину ошибки, а не только сам факт
            return status;
        }
        std::cout << ("Enter domain: ");
        // даже доменные имена могут иметь длину 256 символов
        // пользователь же может вообще ввести сколько ему угодно
        std::getline(std::cin, domain);
    
        if (status = getaddrinfo(domain.c_str(), "80", &hints, &res) != 0) {
            std::cout << "Error: of getaddrinfo: " << get_error_message(status) << std::endl;
            return status;
        };
    
        char ipstr[INET6_ADDRSTRLEN];
    
        for (p = res; p != NULL; p = p->ai_next) {
            /*const char* ipver;*/
            void* addr;
            if (p->ai_family == AF_INET) {
                struct sockaddr_in* ipv4 = (struct sockaddr_in*)p->ai_addr;
                addr = &(ipv4->sin_addr);
                /*ipver = "IPv4:";*/
            }
            else {
                struct sockaddr_in6* ipv6 = (struct sockaddr_in6*)p->ai_addr;
                addr = &(ipv6->sin6_addr);
                /*ipver = "IPv6:";*/
            }
            inet_ntop(p->ai_family, addr, ipstr, sizeof(ipstr));
            std::cout << "addres: " << ipstr << std::endl;
        };
        freeaddrinfo(res);
        system("pause");
        // деструктор сетевой библиотеки
        WSACleanup();
        return 0;
    }
    Ответ написан
    Комментировать
  • Почему в Python можно не описывать поля классов, а в C# обязательно?

    AVollane
    @AVollane
    Начинающий C# разработчик
    Здравствуйте. Это всё из-за того, что Python является языком с динамической типизацией, а C# - язык со строгой типизацией, что помогает избежать дополнительных расходов на память. За счёт этого Python более простой, но C# безопаснее и быстрее. В общем, в C# всё должно быть определено заранее, без каких-либо сюрпризов.
    Ответ написан
    8 комментариев
  • Как записать в файл строку и добавить к ней переменную типа интеджер?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Ответ написан
    Комментировать
  • О чем может говорить такая ошибка в подключении через ADOConnection в проекте C++ buildera как исправить?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Судя по ошибке, компилятор не может найти какую-то библиотеку. Если это ADOConnection1 - встроенная, то лезьте в свойства проекта, если это что-то стороннее, то надо компилятору вручную в свойствах проекта же указать до нее пути.
    Ответ написан
    Комментировать
  • Python vs C. Какой из них быстрее?

    Хорошо написанный, и скомпилированный в -o3 код на си, как правило, будет быстрее и эффективнее аналогичного кода на питоне.
    В вашем случае неизвестно, почему вы могли получить такие результаты (даже не сказано, какие)

    А какой используется интерпретатор?
    А как был скомпилирован код на си?
    На одном и том же железе происходил запуск? Условия равны?
    Чем print на питоне отличается от сишного printf?
    Как вообще происходил замер? Было ли учтено время на запуск интерпретатора?
    Сколько было замеров? Может в случае с си был аномально медленный прогон?

    UPD: Короче хз, как вы там меряли, но вот мой вариант
    Для C я использовал Tiny C compiler, чтобы дать питону фору (будет учитываться время на компиляцию), да и оптимизации тут будут не такие дикие, как в GCC
    Чтобы не тестировать скорость вывода на экран - вывод я перенаправил в /dev/null (Хз что это за заклинание такое, но я его нашёл на SO)
    Запускал всё на WSL2 по одному разу, но в принципе результат очень даже стабилен.
    Вот результат:
    vabka@DESKTOP-7AFIA69:~/repos$ time (python3 test.py) 2>&1 1>/dev/null
    
    real    0m0.381s
    user    0m0.359s
    sys     0m0.016s
    vabka@DESKTOP-7AFIA69:~/repos$ time (tcc -run test.c) 2>&1 1>/dev/null
    
    real    0m0.081s
    user    0m0.047s
    sys     0m0.031s
    vabka@DESKTOP-7AFIA69:~/repos$ cat test.c
    #include <stdio.h>
    
    int main() {
      int i = 0;
      while(i < 1000000) {
        printf("%d\n", i);
        i++;
      }
      return 0;
    }
    vabka@DESKTOP-7AFIA69:~/repos$ cat test.py
    i = 0
    while i < 1000000:
      print(i)
      i += 1
    
    vabka@DESKTOP-7AFIA69:~/repos$

    Питон получился в 4 раза медленнее.

    Вот ещё результат без /dev/null:
    Для C:
    real    0m58.757s
    user    0m1.094s
    sys     0m11.078s


    Для питона:
    real    1m1.762s
    user    0m2.953s
    sys     0m13.594s


    Результат тоже хуже, но тут очень много времени тратится на вывод в консоль, по тому разница почти не видна.
    Ответ написан
    7 комментариев
  • Python vs C. Какой из них быстрее?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Попробуйте сделать вывод в файл. Запускайте с "> output.txt". У меня си работает в несколько раз быстрее (меньше секунды), питон - пару секунд.

    Вывод в консоль тормозит, потому что при компиляции через mingw идет как бы эмуляция линуксовой консоли, которая преобразуется в виндовую. Питон же наверняка работает нативно. Если вы интерпретатор питона из исходников на mingw соберете, то будет работать столько же. В этом примере вы разницу не намеряете, потому что тут вы в основном тестируете скорость вывода в консоль. Замените вывод на вычисления, или что-то другое полезное, и у си будет в разы быстрее питона.
    Ответ написан
  • Ошибка с условными операторами c, как решить?

    GavriKos
    @GavriKos
    Вы не разобрались с типами данных. int - число. Так что пользователь не введет ни васю ни петю. И сравнить число со строкой нельзя.
    Ответ написан
    Комментировать
  • Почему при нажатии кнопки удаления выходит ошибка типа: "ошибка синтаксиса в инструкции from"?

    @cicatrix
    было бы большой ошибкой думать
    Это не код, это огромная дыра в безопасности!
    Вот, почитайте на досуге.
    Database - 'это название таблицы такое? И в ней есть поле с кириллическим названием Код?
    А в текстовое поле число вводится? А если текст ввести, что будет?
    А если я туда введу 1=1; DROP TABLE Database; что будет?
    Ответ написан
    3 комментария
  • Как правильно получить ввод строки от пользователя в Cи?

    @res2001
    Developer, ex-admin
    В scanf_s при задании ввода строки, нужно указывать, кроме адреса буфера еще и реальный размер буфера в параметрах. Смотрите пример использования тут: https://en.cppreference.com/w/c/io/fscanf
    Обычный scanf считается не безопасным, и не без оснований, конечно. Поэтому его использование не рекомендуется, о чем в сообщении и пишут. Но это можно обойти, как именно, написано в том же сообщении. Правда задание _CRT_SECURE_NO_WARNINGS влияет не только на использование scanf, но и на пачку других функций.
    Определять #define _CRT_SECURE_NO_WARNINGS нужно до включения любых заголовков стандартной библиотеки. Что бы это определение на них подействовало. Проще всего это сделать в параметрах командной строки компилятора с помощью опции -D_CRT_SECURE_NO_WARNINGS
    Ответ написан
    1 комментарий
  • Где взять math.h?

    Написал #include math.h

    А не пробовали, как надо писать:#include "math.h"?
    Ответ написан
    9 комментариев
  • Почему код выдает ошибку http 451?

    @cicatrix
    было бы большой ошибкой думать
    https://ru.wikipedia.org/wiki/HTTP_451
    Ошибка 451 или «Недоступно по юридическим причинам» (англ. Unavailable For Legal Reasons) — стандартный код ответа HTTP, означающий, что доступ к ресурсу закрыт, например, по требованию органов государственной власти или правообладателя в случае нарушения авторских прав. Был одобрен IESG 21 декабря 2015 года[1] и опубликован как RFC 7725 в феврале 2016 года. Код ошибки является отсылкой к роману Рэя Брэдбери «451 градус по Фаренгейту»[2]. Можно сказать, что код HTTP 451 — это уточняющая версия кода HTTP 403[3].
    Ответ написан
  • В чем преимущество Angular перед Vue или React?

    search
    @search
    мама говорит что я особенный
    Пользовался Ангуляром почти 3 года. Главный плюс Ангуляра в том что это платформа. В ней стандартизированно почти всё: от процесса бутстрепа до процесса деплоя. Включая работу с CLI, тестированием и еще много чем. Это огромный селлинг поинт для проектов корпоративного уровня: когда над проектом трудится много человек из разных стран. Им не нужно договариваться об архитектуре, тестировании, и т.п. потому что Ангуляр предоставляет готовые решения на многие проблемы.

    Лично я бы не стал пихать Ангуляр в проект уровня дэшборда или лендинга. Но для проекта уровня, например, клиент банка, Ангуляр может быть отличным кандитадом.

    Я не пользовался Вью никогда, поэтому не знаю что он предоставляет. Но после где-то двух лет на Реакте (огромный проект с микрофронтендной архитектурой для Dazn) впечатления такие: в целом весело. Очень хорошо подходит для прототипов и небольших проектиков. Но для энтерпрайз проекта я бы не стал его советовать, так как слишком много нерешенных или по-детски решённых проблем. Командам будет сложно договариваться между собой.

    Такие дела.
    Ответ написан
    Комментировать
  • Хайп вокруг ЯП Rust и C?

    vabka
    @vabka Куратор тега Rust
    По порядку:
    Насколько критичной проблемой для программиста является ручное управление памятью, которое называют недостатком языка Си?

    С неправильным управлением памятью связано очень много ошибок. Например в хроме вроде около половины CVE с этим связано. Ещё можно вспомнить HeartBleed в OpenSSL, который тоже связан с неправильным управлением памятью.

    (Дальше какое-то ужасно длинное предложение, которое я разбил на части)
    Новый язык программирования Раст, как заявляют, лишен этого недостатка

    Да
    разве общее число ошибок не перераспределяется на другие недостатки

    1. Самые сложные в исправлении ошибки - кривое управление памятью и многопоточность, обе их Rust Решает
    2. Нет, ошибки не перераспределяются, это же не тараканы.
    являются ли ошибки с памятью ошибками программиста

    Если управление памятью ручное, то это ошибки, которые допустил разработчик.
    Если управление памятью автоматическое (хоть через GC, хоть через Borrow checker), то это ошибка компилятора/рантайма/языка.

    которые вылились бы в другое русло, не будь этой возможности ошибочного использования памяти?

    Не обязательно.

    В целом вопрос очень абстрактный и является скорее поводом для дискуссий. Попробуйте дать более конкретный пример, где ошибка управления памятью превращается в какую-то другую ошибку.
    Ответ написан
    Комментировать
  • Как разделить среду линукса на две?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Логично сделать 2 учетки.
    соответственно при старте из скриптов запускаются нужные сервисы как то vpn ssh tunnel докер и прочее
    в logout скрипте гасятся
    Ответ написан
    Комментировать
  • Как организовать сравнение переменной с элементом массива?

    Вы привели фрагмент кода
    float value = (float)analogReag(A1)*5*1000/1024;
    int value_int = (int)value_int;
    switch(value_int) {
    case(4442):
    current = 120;

    Во второй строке ошибка? Должно быть int value_int = (int)value;?
    Если да, то зачем интовое значение analogReag переводить во флоат, а потом опять в инт? Разрядность это не увеличит, поэтому можно сделать так:
    //Объявли массив table из 1024 значений
    //Для каждого значения ввели правильный ответ
    int table[] = {12, 34, 64, 33, ..., 954}
    
    //Где-то в коде
    int value = analogReag(A1);
    current = table[value];

    Это уменьшит Вашу таблицу вдвое, выборка будет максимально быстрой. Расплатой послужит некоторая неочевидность заполнения таблицы, т.к. оперировать придется не значением напряжения, а отсчетами АЦП.
    Ответ написан
    1 комментарий
  • Как накидать логику работы будущей программы?

    gbg
    @gbg
    Любые ответы на любые вопросы
    Вы не научитесь писать и проектировать программы, если самостоятельно не набьете на этом шишек.

    Переписывание программы заново - нормальный процесс, называемый рефакторингом. "На берегу", еще до начала написания кода, вы не будете видеть все тонкости и нюансы. Так что хлопанье себя по лбу и отправка кода в корзину = нормальный творческий процесс разработки.

    После нескольких таких заездов по граблям вы получите опыт - ошибки и трудности, с которыми вы начнете сталкиваться будут такие, что ни в книге сказать, ни на StackOverflow прочитать.
    Ответ написан
    1 комментарий
  • Как правильно установить на QT - 5.15.2 плагин wwWidgets?

    Adamos
    @Adamos
    Этой страничке минимум 10 лет. Актуальная версия wxWidgets - 3.14, и скрещивать ее с Qt можно только от очень большого желания создать себе побольше причудливых проблем.
    Уже пытались запилить wxQt - и его развитие довольно быстро ушло в полную стагнацию.

    Так что в рамках одного проекта - либы кьют, либо вэ-икс-виджеты. Не смешивать, и взбалтывать тут тоже не о чем.
    Ответ написан
    6 комментариев
  • Вместо значений выдает -nan(ind). Что делать?

    15432
    @15432
    Системный программист ^_^
    вы (2 * a * c) в скобки-то возьмите,
    а то вы не делите, а умножаете
    Ответ написан
    Комментировать
  • Найти ошибку в сборке кода С++ Visual C++ 2019?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    unresolved external symbol означает что линовщик не может найти функции в *.lib файлах. Вам помимо заголовочных файлов нужно еще указать путь к библиотекам *.lib.
    Ответ написан
    1 комментарий