Windows C でのコンソール テキストの出力
Windows 上で実行されるネイティブ C プログラムは、コマンド ライン インターフェイスを利用してコンソール出力を表示する場合があります。ただし、プログラムのエントリ ポイントが WinMain として定義されている場合、std::cout のような標準出力関数を使用して出力されたデータを表示する方法はすぐにはわかりません。
解決策:
このシナリオでコンソール出力を実現するには、いくつかのアプローチがあります:
1.リダイレクト関数の利用:
標準 I/O ストリームをインターセプトしてコンソールにルーティングするカスタム リダイレクト関数を実装します。 Win32 API を使用した例を次に示します。
guicon.cpp
#include <windows.h> #include <stdio.h> #include <fcntl.h> #include <io.h> #include <iostream> #include <fstream> using namespace std; void RedirectIOToConsole() { int hConHandle; long lStdHandle; FILE *fp; AllocConsole(); GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &coninfo); coninfo.dwSize.Y = MAX_CONSOLE_LINES; SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coninfo.dwSize); lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE); hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); fp = _fdopen(hConHandle, "w"); *stdout = *fp; setvbuf(stdout, NULL, _IONBF, 0); lStdHandle = (long)GetStdHandle(STD_INPUT_HANDLE); hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); fp = _fdopen(hConHandle, "r"); *stdin = *fp; setvbuf(stdin, NULL, _IONBF, 0); lStdHandle = (long)GetStdHandle(STD_ERROR_HANDLE); hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); fp = _fdopen(hConHandle, "w"); *stderr = *fp; setvbuf(stderr, NULL, _IONBF, 0); ios::sync_with_stdio(); }
次に、この関数をプログラムに組み込み、標準出力関数を使用する前に呼び出します。
2.コンソール出力をファイルにリダイレクトする:
もう 1 つのオプションは、コンソール出力をファイルにリダイレクトし、テキスト エディターを使用して表示できるようにすることです。これは、プログラムのコマンド ラインを変更することで実行できます。
program.exe 1>output.txt 2>&1
この例では、標準出力と標準エラーは「output.txt」ファイルにリダイレクトされます。
3 。条件付きコンパイルの使用:
プログラムが開発環境またはデバッグ環境を特にターゲットにしている場合は、条件付きコンパイルを使用して、必要な場合にのみコンソール出力を含めることができます。たとえば、コンソール出力ステートメントを #ifdef _DEBUG ブロックでラップできます。
実装例:
test.cpp
#include <iostream> #ifdef _DEBUG int main() { std::cout << "Hello, world!" << std::endl; return 0; } #endif
デフォルトでは、このプログラムは何も出力しません。ただし、_DEBUG プリプロセッサ マクロを定義してコンパイルすると、「Hello, world!」と出力されます。コンソールへ。
以上がWinMain エントリ ポイントを使用して Windows C プログラムでコンソール出力を表示する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。