私はStackOverflowで週末を失い、Hot Network Questionsのthis challengeを見ました。CodeGolfからこのコードを理解できません
背景
こんにちはゴルファー!私はすべてのプログラミング言語を学びたいと思います! しかし、私はちょっとした注意深さを持っています...そして、すべてのHelloをコピーしてください 世界の例は退屈です...しかし、私は火が好きです!^^
チャレンジ
ワットだからここはプランです! がコンパイルし、Goodbye Cruel World!を印刷し、クラッシュする最小のコードを書くことを皆さんに願っています。または、 ボーナスツイストチャレンジとして、Hello World! Goodbye Cruelでクラッシュする World!完全にC言語を理解するために喜んで学生として
この挑戦にC answer時にひっかかったとき、私は非常に混乱していた:
main(){puts(puts("Goodbye Cruel World!"));}
は、文字列を出力し、リターンを使用しようとします値をポインタ として別の文字列に出力すると、セグメント化エラーが発生します。
puts()
documentationへ
おかげで私はputs()
は成功時に非負の値を返すことを発見しました。私が正しく理解のであれば、このようなものと同等です:
puts(2);
2
は「を印刷しようとする別の文字列へのポインタ」どのように?
その後、改善はこの非常に同じ答えに追加されました:
main(i){i=puts("Goodbye Cruel World!")/0;}
そして私は、この時間は完全に失われました。したがって、i
はmainからの引数として取られ、戻り値の格納にはputs()
が使用されます。 OK。しかし、\0
はどうですか?なぜそこにNUL-TERMINATOR
文字を使用するのですか?
私を少し明るくしていただけたら、これを理解するのはとても面白いでしょう。また、言い換えれば質問のタイトルはちょっと正確かもしれないと思いますが、私は誤解を言葉に入れられませんでした。
@Downvoter a hint? – Badda
これは有効なCコードではないので、コンパイラはさまざまな理由で文句を言うべきです。そうでない場合は、新しいものを入手するか、標準Cに変更し、推奨される警告を有効にします。そしてわれわれは難読化されたコード==悪いコードの説明サービスではない。 – Olaf
'/ 0'は「0で割る」を意味します。 –