Web上のプロジェクトのソースを閲覧していると、メインにreturn
ステートメントがあり、奇妙に見えます。
int main()
{
/* ... */
return 0x1;
}
つまり、mainは0x1 radix 16
を返しますが、それは1 radix 10
です。メインは0
を返すべきではありませんか?
不正解ですよね?ちなみにreturn 0x0
は大丈夫ですか?
1を返します。0x1
は1の16進数値です。
0x0を返すことも自由です。これは0の別の表現です。必要に応じて、8進数も使用できます。
0x1または1でも違いはありません。同じ数です。したがって、0x0を返すこともできます。これは、コードに0を書き込む別の方法です。
ただし、returnがメインブロックのコードの最後の行であると想定すると、おそらく、1を返さないはずです。main
からのゼロ以外のリターンコードは失敗を意味し、プログラムが最後まで実行される場合、それは通常成功の兆候-その場合は0を返す必要があります。
ただし、プログラムを逆に構築することは完全に可能であるため、1を返すことがここで正しいことも可能です。
簡単に言うと、次のように変換されます。
return 1;
数値の前に「0x」を置くことにより、16進数をソースコードに入力できます。 0xFF = 255
メイン関数が必要な任意の値を返すことが可能です。これにより、発生した(または発生していない)エラー条件を効果的に文書化できます。このプログラムが戻り値を問い合わせるプロセスによって呼び出された場合、戻り値を0x0(または単に0)に変更すると、呼び出し元のプログラムが予期しない動作をする可能性があります。
_0x1
_は_1
_を記述するもう1つの方法です!リテラル_1
_は、10進数でも16進数でも同じです。ただし、常にそうであるとは限りません。たとえば、_decimal 10
_は_hexadecimal 10
_と等しくありません。
この例では、main()
は1を返します。従来、0以外の戻り値はすべて、正常に完了しなかったものとして扱われます。
はい、0x1
(16進数の1)は1
(10進数の1)と同じです。したがって、上記はプレーンreturn 1
と同等です。
main
は0を返す必要はありません。main
は、作成者が返したいものを何でも返す必要があります。彼らは1を返したかった-彼らは1を返した。彼らは16進数表記を使いたかった-彼らは16進数表記を使った。
誰かがそのようにしたいと思っただけです。他に説明はありません。
0x1は1の16進数です。コンパイル後、違いはありません。 0x0は0と同等です。
メイン関数の戻り値は、通常、システムでは使用されません。しかし、プログラムが他のプログラム(例えば、インストーラー)によって呼び出された場合、それらによってチェックされる可能性があります。すべてが正常である場合は0を返し、その他の場合はエラーを示すことが一般的です。
基本数の意味を本当に理解していますか?
基数nの数値は、0
からn-1
までのn桁を使用します。 (Abあb-1... A1あ)ん = Ab* nb + Ab-1* nb-1 + ... A1* n1 + A* n
したがって、1は有効な16進文字であり、0x1
は1x16を意味します、本質的に1に等しい
この情報はあなたに役立つと思いますか?
http://codepad.org/ による結果
1) int main() { return 0x0; }
Output: No errors or program output.
2) int main() { return 1x2; } //anythingxanything results below error
error: invalid suffix "x2" on integer constant
3) int main() { return 0x2; } //0xanything results :exit failure except for 0
Exited: ExitFailure 1
結果 http://www.comeaucomputing.com/tryitout/
except 2nd case it is compilng correctly(succeeded)
結果による
GCC[g++] --- error return 1x0; except 2nd case all correct
EDG_compiler --- error return 1x0; except 2nd case all correct
Sun compiler --- error return 1x0; except 2nd case all correct
この結果を見ると、ITは1番目と3番目のケースを16進数として扱います。残りの2番目のケースは異なる(まったく数値ではない)式または変数として扱います..etc
main()
の戻り値は、チェックイン用の実行可能ファイルの戻り値/エラーコードとして外部呼び出し元に渡されます。たとえば、ERRORLEVEL
または$?
。
それは意味します:1を返す
この0xのような16進形式の数値を使用できます...