Задать вопрос
  • Зачем нужно объявлять функцию, которую я буду использовать далее по коду?

    GavriKos
    @GavriKos
    Потому что компилятор (точнее его кусок - синтаксический анализатор вроде) смотрит код последовательно. И если он найдет использование фукнции раньше ее объявления - то не сможет понять правильно вы ее используете или нет. Можно конечно сделать несколько проходов - сначала собрать все функции, а потом проверять корректность - но это увеличит время проверки. Поэтому нужно сначала объявить прототип - дать понять компилятору что такая функция будет и с какими параметрами, а потом уже использовать.

    Конкретно расположение относительно main тут ни при чем.
    Ответ написан
    4 комментария
  • Почему в Visual Studio этот код работает, а в Code::Blocks нет?

    GavriKos
    @GavriKos
    Во первых. "Не работает" обычно сопровождается какой то ошибкой. И ее надо прикладывать к вопросу.

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

    @Wexter
    if(a[i]=b[i])

    Вы либо присваивайте, либо сравнивайте
    Ответ написан
    3 комментария
  • Ввод длины значения массива?

    @res2001
    Developer, ex-admin
    То как вы хотите определить массив называется VLA (массив переменной длины).
    Эта шутка появилась только в C99 и выше. В С++ их нет.
    Но даже и в программах на Си не все компиляторы их поддерживают, например в MSVC, по моему, до сих пор не реализовано. Правда микрософт и не заявляет о полной поддержке стандартов Си.

    Так что в С++, как уже было сказано в комментариях, используйте либо динамические массивы, либо std::vector.
    Ответ написан
    Комментировать
  • Какой первый язык стоит учить для создания игр? И какие источники посоветуете (книги, сайти, Ютуб канали)?

    @AVKor
    Английский. Документация, книги - всё на нём.
    Ответ написан
    Комментировать
  • В чем отличие *& от * в C++?

    Первое это указатель * на Book.
    Второе это ссылка & на указатель * на Book.

    А значит поменяв во втором случае содержимое указателя вы фактически поменяете содержимое указателя в вызвовшем эту функцию коде - указатель book.

    Но конкретно в этом примере указатель не меняется. А значит и разницы нет.

    Есть ещё один эффект. Когда код вне этой функции поменяет указатель book (например другой поток это сделает), то эта функция может сразу увидеть изменения. Но есть тонкости с кэшированием и volatile.

    UPD: разница все же есть. В варианте со ссылкой присутствует дополнительный уровень косвенной адресации. А значит он капельку медленнее.
    Ответ написан
    Комментировать
  • Массивы char в c++?

    GavriKos
    @GavriKos
    Нельзя создавать массивы заранее неизвестной длины таким образом. У вас n должно быть константой. Либо используйте динамические массивы, а еще лучше - контейнеры из std
    Ответ написан
    1 комментарий
  • На Тостере слово "гомосексуалист" подвержено цензуре и за него банят?

    TosterModerator
    @TosterModerator Куратор тега Тостер
    Модератор Хабр Q&A
    1. Пункт 5.1. правил Сервиса гласит:
    Любые оскорбительные формулировки запрещены. Даже в том случае, если наличествуют неопровержимые доказательства того, что в указанных оскорблениях имеется доля правды.
    В этом пункте отсутствуют какие либо ограничения по составу субъектов. Т.е. оскорбительные формулировки запрещены в принципе, а не только в отношении пользователей Сервиса.

    3. Ваше высказывание было сформулировало таким образом, что под него подпадали все участники процесса разработки, а не отдельно взятая личность:
    5beaa2d529f9e352851147.png

    Это далеко не первое употребление оскорбительных формулировок с вашей стороны. Пожалуйста, будьте более сдержанны и корректны, в противном случае ваш доступ к Сервису будет ограничен перманентно.
    Ответ написан
    6 комментариев
  • Как получить количество букв в строке?

    myjcom
    @myjcom Куратор тега C++
    NaN
    #include<iostream>
    #include<string>
    #include<algorithm>
    //ru.cppreference.com/w/cpp/algorithm/count
    
    using namespace std;
    
    int main()
    {
      string s = "Asdk6949_glsjg+()(& *&%^%$df   gdfg     e$T#%Y KNUYNL  GIK5654";
      cout << count_if(s.begin(), s.end(), ::isalpha) << endl; 
    }
    Ответ написан
    2 комментария
  • Как правильно передавать функцию как параметр C++?

    @Mercury13
    Программист на «си с крестами» и не только
    Не забывайте, что у startManufacturing есть скрытый параметр this.

    Четыре варианта.

    1. Использовать указатель на метод App:
    Rest::function(char * function_name, int (App::* f)(String), App& object)
          // вместо App можно какой-то интерфейс, который App реализует
    …
    object.*f("string");
    ...
    bt_rest.function("", &App::startManufacturing, *this);


    2. Сделать startManufacturing static:
    class App {
      static int startManufacturing(String command)
    };


    3. Сделать обёртку с замыканием:
    Rest::function(char * function_name, int (*f)(String, void*), void*);
    
    void doStartManufacturing(String command, void* closure) {
      reinterpret_cast<App*>(closure)->startManufacturing(command);
    }
    ...
    bt_rest.function("startManufacturing", doStartManufacturing, this);


    4. «Избегай незнакомых женщин и глобальных переменных». Костыль, в общем.
    App app;
    int doStartManufacturing(String command) { return app.startManufacturing(command); }
    ...
    bt_rest.function("startManufacturing", doStartManufacturing);


    Ах да. Вы передаёте String’и по значению. Приспособлены они к такой передаче или всё же лучше по ссылке?
    Ответ написан
    6 комментариев
  • Что есть структура, а что оператор в C?

    myjcom
    @myjcom
    Переводчики имели ввиду структуры из https://ru.m.wikipedia.org/wiki/Структурное_програ...
    Они же statements https://en.cppreference.com/w/c/language/statements

    А не keyword struct https://en.cppreference.com/w/c/language/struct

    А operators это вообще https://en.cppreference.com/w/c/language/expressio...

    Это переводчики, такие переводчики.
    Оригинал посмотрите, как там написано.

    6th - 7th
    3.4 Control Structures
    Normally, statements in a program are executed one after the other in the order in which
    they’re written. This is called sequential execution. Various C statements we’ll soon discuss
    enable you to specify that the next statement to be executed may be other than the
    next one in sequence. This is called transfer of control.
    ...
    ...
    Bohm and Jacopini’s work demonstrated that all programs could be written in terms
    of only three control structures, namely the sequence structure, the selection structure
    and the repetition structure. The sequence structure is built into C. Unless directed otherwise,
    the computer executes C statements one after the other in the order in which
    they’re written.
    The flowchart segment of Fig. 3.1 illustrates C’s sequence structure.

    Bohm, C., and G. Jacopini, “Flow Diagrams, Turing Machines, and Languages with Only Two Formation
    Rules,” Communications of the ACM, Vol. 9, No. 5, May 1966, pp. 336–371.


    дальше везде statemens
    3.5 The if Selection Statement
    Selection statements are used to choose among alternative courses of action. For example,
    suppose the passing grade on an exam is 60. The pseudocode statement


    почему то переводят как Оператор выбора if

    Еще раз - Statements are fragments of the C program that are executed in sequence. -> см. https://en.cppreference.com/w/c/language/statements

    Operators -> https://en.cppreference.com/w/c/language/expressio...

    что бы не путаться Statement - инструкция. Operator - оператор
    в переводах может встречаться условный оператор if, составной оператор if ...

    короче говоря русский язык иногда/часто не имеет точных аналогов для перевода, поэтому трактуют как договорятся.
    Вот как переводить будут:
    C language Expressions
    An expression is a sequence of operators

    C language Statements
    Statements are fragments of the C program that are executed in sequence. The body of any function is a compound statement, which, in turn is a sequence of statements and declarations:

    There are five types of statements:
    1) compound statements
    2) expression statements
    3) selection statements
    4) iteration statements
    5) jump statements


    Compound statements
    A compound statement, or block, is a brace-enclosed sequence of statements and declarations.

    { statement | declaration...(optional) } (1)
    The compound statement allows a set of declarations and statements to be grouped into one unit that can be used anywhere a single statement is expected (for example, in an if statement or an iteration statement):

    if (expr) // start of if-statement
    { // start of block
      int n = 1; // declaration
      printf("%d\n", n); // expression statement
    } // end of block, end of if-statement


    И еще

    Не смотря на то что С++
    statement - инструкция
    Слово statement обычно переводят на русский термином "оператор". Таким образом, мы и привыкли, что if, while, case и т.п. – это операторы. К сожалению, в С++ этот перевод приводит к трудностям, поскольку имеется термин operator - словом "оператор" естественно было бы переводить его. Из возможных и встречавшихся в русской литературе переводов statement (утверждение, предложение, инструкция) в переводе книжки Струструпа, посвященной третьему стандарту С++, принят термин "инструкция".


    expression statement
    инструкция-выражение
    Инструкция, которая одновременно является и выражением. Примеры: присваивание, вызов функции.


    operator - оператор
    Встроенная операция языка, такая, как сложение. (Также перегруженная операция, задаваемая функцией-членом класса. -> к подмножеству Си не относится)

    English-Russian glossary of C + +. 2014.
    Ответ написан
    2 комментария
  • Что есть структура, а что оператор в C?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега C
    Седой и строгий
    То, что вы называете структурой - на самом деле выражение.
    Ответ написан
    1 комментарий
  • Правда ли, что программы написанные на C++ работают быстрее чем аналогичные на C#. к примеру?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Программы написанные на C# компилируются в байткод, который потом выполняется виртуальной машиной. Грубо говоря, эмулятором процессора. К тому же программы на C# используют автоматическое управление памятью, поэтому их выполнение периодически приостанавливается для сборки мусора.
    Ответ написан
    4 комментария
  • Что посоветуете для написания сервера под мультиплеерную 3d игру на Unity?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Latency:
    1. client-side prediction server reconciliation (Main article)
    2. client-side prediction (live demo!)
    3. Latency Compensating Methods (Valve wiki)
    4. www.newspeakblog.com/lag-compensation-techniques-g...

    Anti-cheat:
    1. Anti-cheat (Valve wiki)
    2. Hacking in Games (PDF)

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

    Допустимое, определяется через обученную НС на нескольких случайных перемещениях игрока из одной точечной позиции в случайные стороны (и под различными углами, если это 3D) с различными параметрами (грунт, гравитация, прыжок, ходьба/бег и т.д.) между соседними позициями за один игровой кадр ("тик").
    И как только игрок набирает N-штрафных баллов (3-5 достаточно) - фиксируется чит.

    Server (open source):
    1. socketo.me (Ratchet - WebSockets for PHP)
    2. https://heroiclabs.com/

    И как всегда, БОНУС: здесь и почитать.
    Ответ написан
    2 комментария
  • Где ошибка в программе?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А что? Сейчас в школе читать уже не учат?
    1>c:\users\саша\source\repos\consoleapplication1\consoleapplication1\consoleapplication1.cpp(50): error C2660: startx: функция не принимает 1 аргументов
    1>c:\users\саша\source\repos\consoleapplication1\consoleapplication1\consoleapplication1.cpp(15): note: см. объявление "startx"
    Ответ написан
    7 комментариев
  • Как транслировать программу на языке C или C++ в программу на языке ассемблера MASM/TASM?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега C
    Седой и строгий
    Во-первых, то что вы называете синтаксисом GAS на самом деле называется синтаксисом AT&T. А используемый в MASM/TASM синтаксис - это синтаксис Intel. Во-вторых, что примерно ждёт от вас препод
    .section .data
    
    hello_str:
        .ascii "Hello, world!\n"
        .set hello_str_length, . - hello_str
    
    
    .section .text
    
    .global main
    .type main, @function
    
    main:
        movq    $4, %rax
        movq    $1, %rbx
        movq    $hello_str, %rcx
        movq    $hello_str_length, %rdx
        int     $0x80
    
        movq    $1, %rax
        movq    $0, %rbx
        int     $0x80
    
    .size main, . - main

    Что вы получите в результате трансляции Сишного кода
    .file   "test.c"
            .section        .rodata
    .LC0:
            .string "Hello, World!"
            .text
            .globl  main
            .type   main, @function
    main:
    .LFB0:
            .cfi_startproc
            pushq   %rbp
            .cfi_def_cfa_offset 16
            .cfi_offset 6, -16
            movq    %rsp, %rbp
            .cfi_def_cfa_register 6
            subq    $16, %rsp
            movl    %edi, -4(%rbp)
            movq    %rsi, -16(%rbp)
            leaq    .LC0(%rip), %rdi
            call    puts@PLT
            movl    $0, %eax
            leave
            .cfi_def_cfa 7, 8
            ret
            .cfi_endproc
    .LFE0:
            .size   main, .-main
            .ident  "GCC: (Debian 6.3.0-18) 6.3.0 20170516"
            .section        .note.GNU-stack,"",@progbits

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

    Но если всё же хотите попытать счастья, то вот что нагуглилось за десять секунд - https://godbolt.org/
    Ответ написан
    Комментировать
  • Что программно представляет собой реляционная база данных?

    Melkij
    @Melkij
    PostgreSQL DBA
    Есть фундаментальный труд Transactional Information Systems. Theory, Algorithms, and the Practice of Concurrency Control and Recovery авторства Gerhard Weikum и Gottfried Vossen.

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

    mashletov
    @mashletov
    Math.random()
    1) Берешь добротный учебник по OpenGL. Учишься работать с матрицами, векторами. Понимать как строится 3D изображение на компьютере. Что такое перспектива, матрица трансформации, текстура, свет и т. д. Пишешь hello-worldы типа: 2D квадрат, куб, вращающийся куб, текстурированный вращающийся куб с картой нормалей с источником света...
    2) Читаешь статью на хабре об общем устройстве idTech3
    3) Понять что такое BSP-дерево
    4) Открываешь код от WinMain и начинаешь вдумчиво изучать как оно работает последовательно
    Ответ написан
    Комментировать
  • Почему первый элемент не инициализированного массива array указывает а последний элемент вектора созданного до него?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    Нипочему. Обращение к неинициализированной переменной есть неопределенное поведение, эксплуатировать его в своих программах нельзя.
    Ответ написан
    3 комментария