• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:macでのポインタの扱いについて)

Macでのポインタの扱いについて

このQ&Aのポイント
  • Macでのポインタの扱いについて質問があります。C言語の勉強をしている中で、ポインタの扱いで問題が発生しています。
  • 具体的には、変数のアドレスを表示するプログラムを書いた際にMacでコンパイルするとエラーが発生します。
  • Windows環境では問題なく動作するのですが、Mac環境との違いが原因なのかわかりません。ポインタの表記方法について教えていただけないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

「Mac か Windows か」ではなく, コンパイラだけの話. gcc は printf や scanf などの関数で書式文字列が文字列リテラルで与えられた場合, その他の引数と比較して書式が適切かどうかをチェックします. 「gcc なら」チェックするので, gcc を使いさえすれば Windows 上でも同じように突っ込まれます.

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

long long に対する書式は %qi ではなく %lli としてほしかった>#3.

  • harawo
  • ベストアンサー率58% (3742/6450)
回答No.3

No.1の方の回答にしたがって、ポインタ値を取得し、かつ「sizeof(int)」で、int型のサイズを調べてください。 そうすると、ポインタ値のサイズが、int型のサイズより大きいことがわかります。64ビットOS上では、かならずしもポインタ値がintではなく、long longなのかもしれません。 もうひとつ、ポインタ値を出力するには、代入するのは「%p」でなければいけません。まあ、そういうきまりですね。16進数でなく、10進数で出力したいのでしたら、ポインタ値をlong longにキャストしてやればいいでしょう。 printf("dのアドレス:%d 値:%d\n",&d,d); → printf("dのアドレス:%qi 値:%d\n",(long long)&d,d);

回答No.1

> printf("dのアドレス:%d 値:%d\n",&d,d); ポインタの値を%dで表示しようとすると、intとサイズが違う場合に問題が出ます。 %pを使うべきでしょう。 そういった意味で、warningが出ているものと考えます。 > まったく同じソースをWindows上でBorlandを使ってコンパイルしてみると > 問題ありません。 コンパイラが書式指定文字列と引数の型をチェックしていないだけでしょう。

関連するQ&A