gpt4 book ai didi

c++ - 这个 goto 有多糟糕?

转载 作者:可可西里 更新时间:2023-11-01 16:52:49 24 4
gpt4 key购买 nike

我创建了一个俄罗斯方 block 游戏,您可以在游戏结束后重新开始。我用 goto 快速而肮脏地实现了这个(见代码)。 Game 类依赖于析构函数,它们是用这些 goto 调用的吗?这个 goto 有多糟糕,是否可以接受,或者我应该怎么做?

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
// initiate sdl
sdl_init();

// seed rng
srand(time(NULL));

newgame: // new game label
Game game(GAME_WIDTH, GAME_HEIGHT, 1, screen);

// keydowns
bool fastfall = false;
bool gamerunning = true;
Uint32 lastupdate = 0;

while (gamerunning && game.isalive()) {
// game running stuff here
}

// game over stuff here

while (gamerunning) {
if (SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT) {
gamerunning = false;
} else if (event.type == SDL_KEYDOWN) {
if (event.key.keysym.sym == SDLK_r) goto newgame; // yay a new game!
}
}
}

TTF_Quit();
SDL_Quit();
return 0;
}

最佳答案

您可以通过将此函数的大部分放在 while 循环中并设置一个标志来跳出它来轻松避免这种情况。

在 C 中,goto 唯一真正“可接受”的用途是在出现错误时跳转到公共(public)清理代码。在 C++ 中,您甚至可以通过异常避免这种情况。真的,没有任何借口!

关于c++ - 这个 goto 有多糟糕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5872484/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com