• Как транслировать программу на языке 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 комментария
  • Почему жалуется на преобразование double > float?

    @res2001
    Developer, ex-admin
    double у вас константы в выражении. По умолчанию вещественные константы - double. Поэтому все остальные компоненты выражения преобразовываются в double, а при присваивании необходимо снова преобразовать во float с потерей точности, об этом и сообщает компилятор.
    Чтоб сделать константы float, нужно использовать суффикс 'f': 9.0f. Тогда все выражение будет вычисляться во float.
    Ответ написан
    2 комментария
  • Как воспроизвести wav файл на чистом c++ без сторонних библиотек?

    Nipheris
    @Nipheris Куратор тега C++
    1. Курите формат wav-файлов, он не особо сложный, написать код чтения не должно составить проблем.
    2. Разбираетесь с аудио-API различных ОС. Убеждаетесь, что для разных ОС реализация будет разная.
    3. Обеспечиваете необходимые преобразования прочтенных из wav данных о звуковой волне в данные, готовые к передаче в аудио-API.
    4. Результат.
    Ответ написан
    1 комментарий
  • C++ при вводе в одно переменную меняеться вторая?

    @res2001
    Developer, ex-admin
    Похоже, что на данной платформе стек растет вниз (в сторону уменьшения адресов), поэтому введя в word
    6 символов (размер word - 5), произошел выход за пределы массива и последние 2 байта (не забываем, что строки в Си имеют еще дополнительный нулевой символ в конце) записались на соседние переменные, т.е. повредили содержащиеся в них значения.
    При этом не произошло никакого сбоя, потому что все переменные в стеке (а все пространство в стеке изначально уже выделено и к нему можно свободно обращаться). Если бы word был динамическим массивом, то скорее всего произошел бы seg fault. В отладочной версии возможно и не произошел бы.
    Си и С++ оставляет за программистом возможность управлять памятью, поэтому компилятор такие вещи не отслеживает.
    Если хотите избавиться от ошибки, используйте класс string или перепишите код так что бы не было возможности выхода за границы массива.
    Ответ написан
    5 комментариев
  • Как делают свои игры Supercell?

    GavriKos
    @GavriKos Куратор тега Разработка игр
    Как с помощью этих навыков они делают игру на android и ios ? Что используют ?

    Они используют C++ и OpenGL.
    И анроид и айось позволяют обращаться к библиотеке, написанной на плюсах. Например, на дроиде это делает NDK.
    Может над опенГЛ еще обертка в виде какой нить SDL.
    Есть конечно еще другие варианты - трансляция c++ во что то другое, но вряд ли.
    Ответ написан
    4 комментария
  • Какие макросы у линухи и винды?

    @res2001
    Developer, ex-admin
    Смотри тут.
    Ответ написан
    Комментировать
  • Хочу работать программистом в gamedev?

    saboteur_kiev
    @saboteur_kiev Куратор тега Разработка игр
    software engineer
    Первый необходимый навык - умение пользоваться поиском.

    gamedev ничем не отличается от любых других разработок - все тоже самое - нужно, чтобы человек умел работать, был достаточно самостоятельным, чтобы за ручку его не водить. Иначе через конкурентов будет пробиться сложно.

    План такой:

    * Ищете вакансии в gamedev
    * Смотрите требования, выбираете какое направление интересно вам - андроид/web/C++/QA
    * Учите то, что указывают в вакансиях
    * как выучите - пишете резюме и бомбардируете эти вакансии.

    5-10 (или если все плохо 50-100) собеседований и профит.

    P.S. Ну и еще, геймдев гораздо меньше, чем разработка вообще, поэтому вполне можно начать не с геймдев, а с любой разработки.
    Ответ написан
    2 комментария
  • Что такое бизнес логика android приложения?

    @Mercury13
    Программист на «си с крестами» и не только
    Бизнес-логика — это то, что программа делает с точки зрения пользователя. По-другому (и более понятно) — логика предметной отрасли.

    Например, у нас есть игра в шахматы. Бизнес-логика — это правила шахмат, принципы работы часов, команды «попросить ход назад», «сдаться» и «согласиться на ничью». Если нужно начинать не с исходной позиции, а с любой — то редактор.

    Крайне спорно, относить ли к бизнес-логике — анимация фигурок на манер Battle Chess и боты.

    Логика, которая не бизнес — это работа с сетью, графикой, конфигурационными файлами, сохранениями досок и партий, античит и многое другое. В общем, то, что нужно для жизнеобеспечения программы, а не для предметной отрасли. Сохранять партии в PGN или XML, как перекидываться пакетами по сети и какие настройки держать для совместимости…
    Ответ написан
    Комментировать
  • Разработка игр, как выбрать язык и движок?

    Tiendil
    @Tiendil
    Разработчик ПО.
    Движок — это инструмент. А значит он обладает всем общими для инструментов свойствами. Например, все отвёртки во много одинаковы, все молотки похожи (хотя киянка и отличается от кувалды). Не так важно какой первый движок будет, потому что надо знать парочку.

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

    Если хочется начать быстро делать что-то законченное и зарабатывать какие-нибудь деньги этим, то C# + Unity выглядит лучше — они проще.

    Если хочется стать реальным профи и есть время на учёбу, то C++ будет более правильным выбором. Плюсы, при нормальном изучении, дают на много больше знаний о программировании в целом и о том, как программы работают. Человек, осиливший C++, на мой взгляд, осилит любой другой ЯП довольно быстро (за исключением Haskel, пожалуй :-) ). Обратное же неверно. Но времени на них надо куда больше.

    С другой стороны, учить всё равно можно в разном порядке. Смотрите по своим жизненным приоритетам и наличию работы в той области, где вы живёте.
    Ответ написан
    1 комментарий
  • Сколько можно зарабатывать на C++ в 14 лет?

    pro_co_ru
    @pro_co_ru
    Старший инженер-программист
    Оцени себя, например, пройдя бесплатные экзамены в онлайн университете intuit.ru или тут.
    Хотя бы поймёшь какого уровня твоё программирование.
    Ответ написан
    Комментировать
  • Можно ли и создать экземпляр класса (с++) с проинициализированными полями?

    maaGames
    @maaGames
    Погроммирую программы
    > поля класса не будут меняться в процессе
    значит, их нужно делать статическими константами и, возможно, вообще убрать класс, заменив на namespace.

    > "Говорят" можно через шаблон, но как не сказали)
    По сути, те же статические константы, только могут быть только целым числом и не имеют адреса.
    template< int X, int Y >
    class NAME
    {
    public:
        enum { field1 = X, field2 = Y };
    };
    
    typedef NAME<5,7> Name57;
    
    int a = Name57::field1;
    int b = Name57::field2;
    Ответ написан
    7 комментариев
  • В чем преимущества компиляции в 4 этапа, нежели в 1?

    15432
    @15432
    Системный программист ^_^
    gcc это набор инструментов, каждый из которых своим делом занимается. В первом случае все автоматически перенаправляется следующему в цепочке, во втором пошагово. Возможность полностью контролировать процесс компиляции полезна - может я хочу посмотреть на ассемблерный листинг, или посмотреть на результат оптимизатора и понять почему код в этих параметрах сборки вдруг перестал работать, поискать баги компилятора.. ну или банально пробовать разные параметры линковщика, не затрагивая остальные этапы компиляции.
    Ответ написан
    Комментировать
  • Что за ерунда с APi Level в Play Market? Как можно размещать 26 уровень если даже 7.0 Android пользуются всего 1,5% пользователей?

    iLLuzor
    @iLLuzor
    Java, Kotlin, Android Developer
    я чего-то не понимаю?
    Определённо. Не понимаете разницу между minimum api и target api.
    Ответ написан
  • Variadic template c++?

    @Mercury13
    Программист на «си с крестами» и не только
    Этот шаблон вычисляет при компиляции такое:
    rbv<false, false, true, true>() = 11002.

    И состоит из двух частей.
    1. Для одного параметра у нас напрямую написан шаблон.

    2. Для false, false, true, true — у нас используется второй шаблон: a=false, b=false, d = (true, true).
    И он равняется (rbv<false, true, true> << 1) + false.

    Чтобы вычислить новый rbv, снова работает второй шаблон: a = false, b = true, d = (true).
    И он равняется (rbv<true, true> << 1) + false.

    Для третьего rbv у нас a = true, b = true, d = ().
    Внимание, список d может быть и пусттым. Потому, чтобы не было конфликта с первым шаблоном, второй пишется для двух и более параметров.
    И третье наше значение равняется (rbv<true> << 1) + true.

    Вот тут работает первый шаблон и получается 112.
    Дальше уже можно вычислить все rbv по очереди и получить 11002.
    Ответ написан
    4 комментария
  • Как правильно применить функцию ко всем элементам двумерного вектора?

    myjcom
    @myjcom Куратор тега C++
    что то мудрено как то...
    for(auto &cellLine:matrix)
    {
        for(auto &cell:cellLine)
        {
            cell.showBody();
        }
    }

    foreach и лямбда-функции здесь явно лишние.
    про передачу по ссылке уже написал cppjunkie
    Ответ написан
    1 комментарий
  • Как упаковать файл в проект и затем извлечь на C++ в Visual Studio?

    @Mercury13
    Программист на «си с крестами» и не только
    Есть три способа хранения картинки в EXE-файле.
    1. Bitmap-ресурсом. Несжатая, большинство библиотек позволяют загрузить её в одну строчку.
    2. Двоичным ресурсом. Сжатие возможно любое, загрузка пишется несколько дольше.
    3. Массивом, const unsigned char picture[] = { };

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

    И наконец: для чего её распаковывать? Реально нужно? (Например, мне однажды нужно было распаковывать картинки, потому что не хотел писать просмотрщик графики и пользовался штатным.)
    Если нужно — то куда-нибудь во временный каталог, который тоже нужно сначала получить.
    Ответ написан
    4 комментария
  • Как упаковать файл в проект и затем извлечь на C++ в Visual Studio?

    @res2001
    Developer, ex-admin
    Это делается с помощью ресурсов. Последний раз работал с ресурсами года 3 назад - с текстовым файлом.
    Создаете в студии файл описания ресурсов (.rc), добавляете ваш файл туда. Какие конкретно кнопки жать при этом не скажу.
    Затем в коде с помощью WinAPI функций FindResource и LoadResource загружаете ресурс в память как байтовый массив.
    Дальше делайте с ним, что хотите.
    Смысла сохранять файл на диск нет, т.к. потом снова будете с диска читать.
    Ответ написан
    4 комментария