VS Code で C ファイルを作成するとき、最初にファイルに .c.cpp という名前を付けました。プログラムが完了した後、実行中にエラーが発生しました。 30 分間のトラブルシューティングの後、問題はファイル名
にあることがわかりました。
.c 拡張子により、IDE がそれを C プログラムとして誤って認識し、VS Code がコードをコンパイルするために g (C コンパイラ) ではなく gcc (C コンパイラ) を使用するようになりました。
キャプション: なんと愚かなことでしょう!
Java の設計哲学は、従来のコンパイル言語とは大きく異なります:
この設計は「一度書いたらどこでも実行できる」という目標を達成しますが、C 実行可能ファイル (.exe ファイル) は単一プラットフォームでの実行に限定されます。
利点:同じプログラムを変更せずに異なるコンピュータで実行できます
欠点:プロセスに追加のステップがあるため、従来の方法と比べてコンパイルがわずかに遅くなる可能性があります
一度書けばどこでも実行可能
---------James Gosling
リトルエンディアン: 最下位バイトが最下位アドレスに格納されます。この記憶方法は、下位アドレスから上位アドレスに向かって行われる CPU メモリの読み取りを容易にするために登場しました。興味深いことに、これは人間が通常数字を書くのとは逆です。
例えば:
329933 のバイナリ表現は 00000000 00000101 00001000 11001101
リトルエンディアンストレージ: 11001101 00001000 00000101 00000000
見てわかるように、リトル エンディアンはバイナリ表現のバイトの順序を逆にします。ただし、各バイト内のビット順序は変更されないことに注意することが重要です。
型キャストを導入するための私のお気に入りの実験です!
# includeint main() { int a; int *p; a=329933; p=&a; char *q; q=(char*)p; printf("%d\n",*p); printf("%d\n",*q); }
出力:
329933 -51
なぜ -51 が出力されるのか不思議です?
これは偶然ですか?さらに 2 つの例を試してみましょう
printf("%d\n",*(q 1)); printf("%d\n",*(q 2));
試してみる:
強制型キャストを実行すると、(char)p は 4 バイト int の最初のバイトのアドレス (11001101) を指します。
一番左の 1 は負の符号を表し、負の数であることを示します。 2 の補数を適用すると、0110011 (最後の 7 ビット)
(注: 正の数の場合、2 の補数は単に 10 進数の 2 進表現です。負の数の場合、2 の補数は、左端 (最上位) ビットを除くすべてのビットを反転し、1 を加算することによって取得されます。 )
これを 10 進数に変換すると、-51 になります。面白いでしょう?
なぜ -128 なのか疑問に思う人も多いでしょう。答えがわかったら、コメント欄でお気軽に共有してください。これは他の人を助けるだけでなく、自分の考えを整理するのにも役立ちます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3