$終了ステータスがゼロであることから、ビルド作業自体は正常に終了したようですが、途中で警告メッセージが表示されています(警告はエラーとみなされない)。出来上がった実行可能ファイルをチェックしてみましょう。メッセージを表示し、終了ステータスとして123を返しています。警告による実行コードへの影響はなさそうです。いう表記は不正確)は、Cライブラリ中の関数の一部を「ビルトイン関数」として内部に実装しているのです。コンパイラの拡張機能が記されており必読)。関数を内部でどのように処理しているのか、コンパイル後のアセンブリソースで確認してみます。オプションを指定します。変えたファイル名で保存されています。関数のアセンブリコードが記述されています。関数の呼び出しに相当する部分です。書き換えているのです。この自動置換結果は、アセンブル後に出力されるオブジェクトファイル中のシンボルテーブルをチェックすることでも確認できます。オプションを指定します。オブジェクトファイルが生成されています。コマンドを使い、内部のシンボルテーブルを表示してみましょう。略)の状態で含まれています。していることが分かります(外部参照先はCライブラリ)。関数は行末コードを付加する)。リファレンスマニュアル中に記載されていません。時と場合によっては、この「お節介」が厄介な問題を引き起こす可能性があり、特に自前のライブラリを使用する機会が多い組み込み開発の現場では注意が必要です。オプションを活用しましょう。記述すれば、その通りにアセンブリソースへ出力されるようになります。関数が呼び出されており、メッセージの最終尾には記述通り行末コードが添付されています。オプションでビルトイン関数の使用を禁止することをお勧めします。コンパイラが出力する警告を無視して作業を進めると、どのような事態が待ち受けているのでしょうか。ドライバでビルドすると、次のような警告メッセージが表示されます。関数への第一引数がポインタではなく、整数値になっている」という警告です。segfault)と呼ばれる致命的エラーにより、プロセスは異常終了しています。許可されていないメモリ領域へプロセスがアクセスを試みた際に「メモリ保護違反」として発生します。何が起きたのか、その原因をアセンブリソースで解析してみます。すると明らかになります。最終4文字を整数値に変換したことが分かります。番地以降に格納されている文字列データを参照しようとします。より強制終了させられたのです。プロセスのマップを参考にしてみましょう。ID)とするプロセスの情報を収めています。ディレクトリ配下に同プロセスの情報が記録されています。目的のメモリーマップ情報をテキスト形式で出力するファイルです。番地から始まる不連続の領域群が定義されています。先頭がゼロ番地から始まらないのか、その理由は後で明らかになります。書き込み不可となっており、実行コードが格納されています。なっており、実行は不可であるけれども、読み書きが可能なデータ格納領域として機能しています。参考までに、32ビット環境のメモリーマップも示しておきます。番地から始まっています。番地はメモリーマップに含まれていないため、メモリ保護違反が発生したのです。メモリ保護違反の実験メモリ保護違反は大切な概念ですから、いくつかのプログラムを使って実験してみましょう。登場している点はご勘弁頂くとして、このプログラムに文法的な間違いはありません。セクションに配置され、プロセス起動時にその値はゼロにセットされる)。関数は文字列データを入手するため、0番地のメモリアクセスを試みますが、該当領域はメモリーマップから外されているため、保護例外が発生するはずです。