Окно SDL не появится - PullRequest
       18

Окно SDL не появится

0 голосов
/ 02 ноября 2018

Мое окно не открывается.

Консоль появляется, и без открытия окна просто говорит, что «Приложение завершено»

Вот мой код:

#include <iostream>
#include <SDL2/SDL.h>
#include <SDL2/SDL_ttf.h>
#include <SDL2/SDL_mixer.h>
#include <SDL2/SDL_image.h>
#include <windows.h>

using namespace std;

SDL_Window * okno;
SDL_Surface * ekran;
SDL_Event zdarzenie;

int frame = 0;

int main(int argc, char*args[])
{
    SDL_Init(SDL_INIT_EVERYTHING);
    return 0;

    okno = SDL_CreateWindow("SDL_TEST", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, NULL);

    ekran = SDL_GetWindowSurface(okno);

}

1 Ответ

0 голосов
/ 02 ноября 2018

return 0; ваша ошибка. После возврата программа заканчивается, потому что main() заканчивается. Строки в main не выполняются после возврата. Вы, конечно, не хотели заканчивать работу до того, как вызвали SDL_CreateWindow.

Может ли функция продолжиться после оператора возврата?

Измените код на

#include <iostream>
#include <SDL2/SDL.h>
#include <SDL2/SDL_ttf.h>
#include <SDL2/SDL_mixer.h>
#include <SDL2/SDL_image.h>
#include <windows.h>

using namespace std;

SDL_Window * okno;
SDL_Surface * ekran;
SDL_Event zdarzenie;

int frame = 0;

int main(int argc, char*args[])
{
    SDL_Init(SDL_INIT_EVERYTHING);

    okno = SDL_CreateWindow("SDL_TEST", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, NULL);

    ekran = SDL_GetWindowSurface(okno);

}

In c++ return 0; может быть опущено из main.

Могу ли я пропустить возврат из основного в C?

Также я ожидаю, что этот код выдаст предупреждение (о недоступном коде) на многих компиляторах. Если он не предупреждал, вам может потребоваться увеличить уровень предупреждения вашего компилятора. Если он предупреждал, вам нужно больше внимания уделять предупреждениям.

Вы также можете удалить глобальные переменные и вместо этого сделать ваши переменные локальными по отношению к основному. Глобальные переменные обычно считаются плохой практикой.

Являются ли глобальные переменные плохими?

Также SDL_Init() может дать сбой. Вы можете проверить его возвращаемое значение и выйти при сбое, регистрируя ошибку.

if (SDL_Init(SDL_INIT_EVERYTHING) != 0) {
    SDL_Log("Unable to initialize SDL: %s", SDL_GetError());
    return 1;
}

https://wiki.libsdl.org/SDL_Init

...