トップページ > プログラム > 2016年01月23日 > WP4XiwuV

書き込み順位&時間帯一覧

5 位/190 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000000500001006



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
C言語なら俺に聞け(入門編)Part 131 [転載禁止]©2ch.net

書き込みレス一覧

C言語なら俺に聞け(入門編)Part 131 [転載禁止]©2ch.net
535 :デフォルトの名無しさん[sage]:2016/01/23(土) 16:08:11.20 ID:WP4XiwuV
>>531-534
%p は16進表示じゃなくてポインタの表示であって、引数に void* 以外渡すと
未定義動作になるから気をつけて使うように。

>>529 で &a を表示してる例も、キャストを入れて (void*)&a とするのが望ましい。
入れなくても動く環境がほとんどだけどね。
C言語なら俺に聞け(入門編)Part 131 [転載禁止]©2ch.net
537 :デフォルトの名無しさん[sage]:2016/01/23(土) 16:33:44.22 ID:WP4XiwuV
>>536
http://www.kouno.jp/home/c_faq/c5.html#17
> 古いHP 3000シリーズはバイトアドレスとワードアドレスで異なる
> アドレス指定の方法を使っていた。だから同じアドレスを指していても、
> voidとcharのポインターは、intの(構造体なども)ポインターと違った
> 内部表現を持っていた。
C言語なら俺に聞け(入門編)Part 131 [転載禁止]©2ch.net
542 :デフォルトの名無しさん[sage]:2016/01/23(土) 16:41:15.39 ID:WP4XiwuV
>>538
え?
%p は渡された値を void* として操作するんだから、内部表現の違う int* を渡してたら
正常に動作しないのは当然じゃないの?動くように実装するのは不可能だと思うんだけど。
printf() 実装の中じゃ実引数の型なんかわからないんだし。
C言語なら俺に聞け(入門編)Part 131 [転載禁止]©2ch.net
544 :デフォルトの名無しさん[sage]:2016/01/23(土) 16:45:03.96 ID:WP4XiwuV
>>541
厳密には未定義動作。未定義動作だから期待通り動くこともあるし、実際そうなる環境が多い。
>537 のリンク先にあるような稀な環境まで含めて移植性を最大限にすることに価値が無いコードだと
言い切れるならダメということもないと思う。
C言語なら俺に聞け(入門編)Part 131 [転載禁止]©2ch.net
545 :デフォルトの名無しさん[sage]:2016/01/23(土) 16:49:43.47 ID:WP4XiwuV
>>543
動かないの証拠は無いかなぁ。 >537 のリンク先にあるような環境も手元に無いし。

文献でいいなら JIS C でどう?
7.19.6.1 fprintf 関数
http://kikakurui.com/x3/X3010-2003-01.html#206
> p
> 実引数は,void へのポインタでなければならない。 ...
...
> ... 実引数の型が対応する変換指定に対して正しくない場合,その動作は,未定義とする。
C言語なら俺に聞け(入門編)Part 131 [転載禁止]©2ch.net
558 :デフォルトの名無しさん[sage]:2016/01/23(土) 21:08:46.46 ID:WP4XiwuV
>>556
「>>545が言ってる「未定義動作」は」も「undefinedの方の未定義動作は」も、同じだよね?
undefined behavior = 未定義動作で、意味はそれしか無いと思ってるんだけど、どういうこと?


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。