Expert C Programmingの 146 ページに、典型的な Unix OSa.out
が実行のためにファイルのさまざまなセグメントをさまざまなメモリ セグメントに割り当てる方法を説明する演習があります。
「スターター」コードは次のとおりです。
main () {
int i;
printf("The stack top is near %#X\n", &i);
}
%X
with を使用すると、コンパイラは警告しますが、エラーにはなりません&i
。
warning: format ‘%X’ expects argument of type ‘unsigned int’, but argument 2 has type ‘int *’ [-Wformat]
メモリ レイアウトと 16 進アドレスの初心者として、推奨される書式設定が目的の情報を完全に表していないのではないかと思っています。あちこち検索しましたが、決定的なものは見つかりませんでした。たとえば、%p
フォーマット キューの使用について読みましたが、この場合にそれが必要かどうかは明確ではありませんでした。
また、この神聖な C の本がそのような誤りを犯すとは思えないので、このユース ケースには関係のない警告だと思いますが、確認したいと思います。