4

我有以下代码。

#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_thread.h>

#ifdef __MINGW32__
#undef main
#endif

int main (int argc, char **argv)
{
    printf ("Kishore\n");

    if (SDL_Init (SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER))
    {
        fprintf (stderr, "SDL: could not able to initialize SDL : %s", SDL_GetError());
        exit (1);
    }
}

能够编译没有任何问题。但是,当我运行可执行文件时,它没有给出任何输出。使用的 gcc 命令:

gcc -lSDL test.c -o test.exe

我有什么遗漏吗。

4

2 回答 2

3

您写入的所有内容stdout并被stderr重定向到文件中stdout.txt,并stderr.txt分别重定向到 exe 所在的位置。

为了避免这种重定向行为,您必须在调用 SDL_Init之后包含以下两行。

freopen( "CON", "w", stdout );
freopen( "CON", "w", stderr );

如果这不起作用,您可以查看SDL 常见问题解答,还有更多说明。

于 2012-08-08T16:44:12.390 回答
2

Windows 命令行程序使用main入口点并将文件句柄(通过 printf 语句)输出stdoutstderr控制台窗口。Windows GUI 程序使用入口点并且WinMain不设置文件句柄以转到控制台窗口(因为它们不初始化要输出到的控制台窗口),这就是您看不到语句输出的原因。stdoutstderrprintf

POSIX (Linux/Solaris/BSD/...) 使用main控制台和 GUI 应用程序的入口点,stdoutstderr正确设置它们,以便它们出现在终端/控制台窗口中。

SDL 是一种简化图形程序的跨平台 API,因此在 Windows 上,它使用WinMain入口点,因此它可以创建一个显示图形的窗口,而不会在其后面出现控制台窗口。SDLWinMain调用该main函数,因此您可以main在所有平台上使用入口点。

在过去,我发现:

test.exe | cat

工作,但YMMV。

于 2012-08-08T13:58:15.527 回答