Я следую учебнику Lazy Foo на C++ и SDL2. Я пытаюсь изучить его с помощью обычного C и заметил что-то интересное, следуя инструкциям по добавлению событий для обнаружения события закрытого окна.Не удается закрыть окно
Вот код.
#include <stdio.h>
#include <stdbool.h>
#include "SDL2/SDL.h"
bool init();
bool loadMedia();
void close();
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
SDL_Window *gWindow = NULL;
SDL_Surface *gScreenSurface = NULL;
SDL_Surface *gHelloWorld = NULL;
int main(int argc, char *argv[])
{
if(!init()) {
printf("Failed to initialize!\n");
}
else {
if(!loadMedia()) {
printf("Failed to load media!\n");
}
else {
bool quit = false;
SDL_Event e;
while(!quit) {
printf("%d", SDL_PollEvent(&e));
while(SDL_PollEvent(&e) != 0) {
if(e.type == SDL_QUIT) {
quit = true;
}
}
SDL_BlitSurface(gHelloWorld, NULL, gScreenSurface, NULL);
SDL_UpdateWindowSurface(gWindow);
}
}
}
close();
return 0;
}
bool init()
{
bool success = true;
if(SDL_Init(SDL_INIT_VIDEO) < 0) {
printf("SDL could not initialize! SDL_Error: %s\n", SDL_GetError());
success = false;
}
else {
gWindow = SDL_CreateWindow("SDL Tutorial 03", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
if(gWindow == NULL) {
printf("Window could not be created! SDL_Error: %s\n", SDL_GetError());
success = false;
}
else {
gScreenSurface = SDL_GetWindowSurface(gWindow);
}
}
return success;
}
bool loadMedia()
{
bool success = true;
gHelloWorld = SDL_LoadBMP("images/hello_world.bmp");
if(gHelloWorld == NULL) {
printf("Unable to load image %s! SDL_Error: %s\n", "images/hello_world.bmp", SDL_GetError());
success = false;
}
return success;
}
void close()
{
SDL_FreeSurface(gHelloWorld);
gHelloWorld = NULL;
SDL_DestroyWindow(gWindow);
gWindow = NULL;
SDL_Quit();
}
Если я компилирую это с расширением «.c», он компилируется без ошибок, но выбирая „X“ на строке заголовка окна ничего не делает. Если я изменил расширение на «.cpp», «X» будет работать по назначению.
Я использую следующую команду для компиляции кода.
gcc main.c -w -lSDL2 -o main
Любые идеи, почему это может работать с C++, но не с C?
будет ли проблема с областью с вызовом 'close()'? можете ли вы проверить предупреждения (вместо того, чтобы игнорировать их с помощью '-w')? Бьюсь об заклад, они упоминают 'close' в командной строке C. –
'Я сказал компилятору, чтобы он не сказал мне, если материал был сломан (-w), может ли кто-нибудь сказать мне, почему материал сломан?' – kfsone
К сожалению, это была команда, которую посоветовали использовать. Если я удалю «-w», никаких дополнительных ошибок я не получу. – azurepancake