我在Linux上開發了一個有趣的SDL2應用程序,但是我也爲非Linux用戶構建了Windows,即使沒有測試它(我根本沒有Windows,從來沒有)。我使用mingw進行交叉編譯。一切都很好,但只有一件事。該應用程序有一些命令行開關/消息/幫助以及在C中使用簡單的printf()。但是,這根本不適用於Windows,根據用戶不會顯示輸出。我發現這個:setvbuf (stdout, NULL, _IONBF, 0);
但它沒有幫助。另外,我發現在各種文檔中切換mingw和-mconsole
,但由於我不太瞭解Windows,因此我不知道應該如何處理這個奇怪的系統(Windows)。基本上我希望類似Linux的解決方案:如果你從終端窗口開始,你可以看到標準輸出,但如果沒有,它們根本看不到,沒有窗口打開/顯示這些消息等。在win32上使用mingw的C printf()
0
A
回答
1
我知道沒有與linux程序具有相同行爲的替代方法。你的輸出將被定向到標準輸出並顯示在cmd中(並且可以通過管道被路由到其他進程標準輸入),但是如果你將在沒有cmd的情況下運行它,它將會打開一個額外的控制檯窗口輸出。
With -mwindows
stdio不再鏈接到控制檯。您仍然可以重定向輸出,但是看不到它(例如,your_program.exe | cat
將顯示輸出,但在標準窗口中沒有cat
)。但是,該模式不會自動打開控制檯窗口。您可以手動創建控制檯(或繼承父進程的控制檯)並將stdout重定向到它(使用freopen("CONOUT$", "w", stdout)
),但這不會是「真正的」stdio,並且您無法將其管理到其他進程(這對您來說可能仍然很好)。
相關問題
- 1. 如何在win32上使用makefile for mingw
- 2. Mingw-w64 - printf不起作用
- 3. 使用MinGW在Windows上構建RabbitMQ-C
- 4. 如何在Windows上使用MinGW調用GCC時指定Win32作爲輸出
- 5. 在Windows上使用MinGW編譯NetBeans 6.8中的C/C++項目
- 6. 的printf在用C
- 7. 用printf在c
- 8. 在MinGW上使用gcc
- 9. _BitScanForward64在Windows上使用MinGW
- 10. Win32 API堆棧走MinGW/MSYS?
- 11. mingw-w64線程:posix vs win32
- 12. Qt MinGW WIN32到Visual Studio 2010
- 13. 使用MinGW的Mosek C-API
- 14. 使用MinGW Win7上
- 15. 叉(c)中使用的printf
- 16. 獲取使用MinGW的MySQL C API
- 17. C++用的printf
- 18. 在MinGW 32-bit上確定64位文件大小C使用MinGW 32位
- 19. 庫問題和Mingw-gcc在Linux上交叉編譯Win32代碼
- 20. 使用mingw在套接字上的fprintf
- 21. 在Linux上的Eclipse中使用MinGW
- 22. mingw c編譯
- 23. 在Windows 8上使用MinGW在cmd中編譯C++
- 24. 用printf用C
- 25. 在mmix上使用gcc的printf問題
- 26. 使用minGW在Windows上編譯iPerf2.0.5
- 27. Qt + win32 +上的原生Windows API鏈接問題mingw
- 28. Win32應用程序使用printf將輸出寫入控制檯
- 29. 在mingw上使用mingw-apt-get安裝rev
- 30. 在Win64上使用MinGW編譯Qt - 哪個MinGW?
我明白了,謝謝。沒有-mwindows會自動打開新控制檯還是僅在第一個輸出處打開?我可以測試某種方式,我已經有一個控制檯或新_would_打開?是否緩衝了stdio?我想如果printf()的,然後只做了freopen()技巧,舊的消息丟失,對(我的意思是-mwindows)?一般情況下,可以在沒有-mwindows的情況下控制新打開的cmd窗口(並測試是否已經有一個窗口)?即,關閉它,或者測試我是否已經擁有,等等。對於許多可能的初學者問題,很抱歉。謝謝! –
嗯,我不是Windows專家,但你們大多數人說似乎是正確的。我認爲大部分的困惑都是因爲Windows從根本上分離了控制檯和Windows應用程序。對於控制檯應用程序控制臺窗口甚至在您的'main'之前出現,並且在程序退出後自動關閉。對於Windows應用程序,您可以手動使用'AllocConsole'或'AttachConsole(-1)'附加到父級的進程控制檯,或者永遠使命令行切換到可選的狀態;那麼你需要重新附加stdin/stdout/stderr並禁用緩衝。 – keltar
再次感謝!對我來說,你是一個窗口專家,尤其是與我自己相比:)我會照顧那些建議的功能。 –