CRTライブラリなしでWindows上で簡単なプログラムを作成しようとしています。 (C++ WindowsリターンとExitProcess
@echo off
del main.exe 2>nul
C:\Users\Michal\Downloads\mingw64\bin\g++ main.cpp -o main.exe -O3 -s -nostdlib -lkernel32
main.exe
echo %errorlevel%
pause
出力:
// compile without -lkernel32
int __stdcall _main() {
return 5;
}
と私はそれらをコンパイルしています
// compile with -lkernel32
#include <windows.h>
void __stdcall _main() {
ExitProcess(5);
}
このbashスクリプトとMinGWの-W64 7.1.0:
は、私は2つのコードを持っています終了コード)は同じです。 (私はWindows 7 Pro 64ビットを使用しています)
どのようなコードが優れていますか? (たぶん、より良い質問です:なぜ「リターン」は、変異体の仕事はしますか?)
編集:
エントリポイントプログラムには、(defaultlyリンカによってあらかじめ設定された)(通常はCRT libには、いくつかの作業を行い、その後、呼び出し、_mainされます'main'関数を呼び出し、ExitProcess(またはそのようなもの)をmain関数から返された値で呼び出します)。
私のコードでは、私はCRTライブラリを使用していませんし、_mainはまだプログラムのエントリポイントです(そして 'main'関数を呼び出さない)。
'return'バリアントを使用すると移植性の高いコードになります。 –
@πάνταῥεῖ - これは移植性のない変種です。間違った変種 – RbMm
exitと_exitも参照する必要があります。 – cup