SDL_init()导致c文件不输出任何内容

SDL_init()导致c文件不输出任何内容,c,sdl,C,Sdl,我有以下代码 #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

我有以下代码

#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);
    }
}

我遗漏了什么。

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

POSIX(Linux/Solaris/BSD/…)为控制台和GUI应用程序使用
main
入口点,并正确设置
stdout
stderr
,使其显示在终端/控制台窗口中

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

过去,我发现:

test.exe | cat

要工作,但是YMMV。

您写入的所有内容
stdout
stderr
都将分别重定向到exe所在的文件
stdout.txt
stderr.txt

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

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

如果这不起作用,您可以检查,还有更多说明。

如果甚至不打印字符串
“Kishore\n”
?如果您删除
If
语句,并且只有
printf
,那么它能工作吗?您的代码在我的系统上,没有任何修改,工作正常。它以“Kishore”开头并无错误地退出。注意:链接的一般规则:如果
A
使用
B
中的符号,
B
应位于
A
之后。在您的情况下,由于使用了
libSDL.a
中的符号,因此应该在
test.c
之后编写
-lSDL
。我不知道为什么gcc在您的示例中没有抱怨,但迟早您会遇到这个问题。@Joachim-没有任何SDL函数调用,它工作得非常好。@Shahbaz-我甚至尝试按照您的建议编译,但仍然看不到输出。
freopen( "CON", "w", stdout );
freopen( "CON", "w", stderr );