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

あなたが書き込んだものはすべて、exeが存在するファイルとそれぞれにstdoutリダイレクトさstderrれます。stdout.txtstderr.txt

このリダイレクト動作を回避するには、SDL_Init の呼び出しの後に次の 2 行を含める必要があります。

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

これが機能しない場合は、SDL の FAQを確認してください。詳細な手順があります。

于 2012-08-08T16:44:12.390 に答える
2

Windows コマンド ライン プログラムは、mainエントリ ポイントを使用して、stdoutおよびstderrファイル ハンドルを (printf ステートメントを介して) コンソール ウィンドウに出力します。Windows GUI プログラムはWinMainエントリ ポイントを使用し、コンソール ウィンドウに移動するようにstdoutおよびstderrファイル ハンドルを設定しません (出力先のコンソール ウィンドウを初期化しないため)。これが、printfステートメントからの出力が表示されない理由です。

POSIX (Linux/Solaris/BSD/...) は、コンソールと GUI アプリケーションの両方にエントリ ポイントを使用し、ターミナル/コンソール ウィンドウに表示されるように正しくmainセットアップします。stdoutstderr

SDL はグラフィカル プログラムを簡素化するクロスプラットフォーム API です。そのため、Windows ではWinMainエントリ ポイントを使用して、背後にコンソール ウィンドウが表示されずにグラフィックスが表示されるウィンドウを作成できます。SDLWinMainは関数を呼び出すため、すべてのプラットフォームでエントリ ポイントをmain使用できます。main

過去に、私は次のことを発見しました:

test.exe | cat

動作しますが、YMMV.

于 2012-08-08T13:58:15.527 に答える