トップページ > プログラム > 2015年12月04日 > ezzwHQH9

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

8 位/169 ID中時間01234567891011121314151617181920212223Total
書き込み数0110000001000000000000003



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
【初心者歓迎】C/C++室 Ver.97【環境依存OK】 [転載禁止]©2ch.net
C++相談室 part120 [転載禁止]©2ch.net

書き込みレス一覧

【初心者歓迎】C/C++室 Ver.97【環境依存OK】 [転載禁止]©2ch.net
47 :デフォルトの名無しさん[sage]:2015/12/04(金) 01:46:15.44 ID:ezzwHQH9
>>45
そのメッセージの何がわからないの?
C++相談室 part120 [転載禁止]©2ch.net
978 :デフォルトの名無しさん[sage]:2015/12/04(金) 02:19:45.74 ID:ezzwHQH9
>>958
テンプレート(やクラスやインライン関数など)の定義は、実用上ヘッダに書いて複数の翻訳単位で
定義しないといけないので、定義の重複を認めている。
(字句的に同一であることを含めていくつかの常識的な制約はある。)

そういった特例に含まれないものの定義をヘッダに書くと複数の翻訳単位に定義が含まれ、
定義が重複することになる。 ODR(One Definition Rule) 違反ってやつで、結果は未定義。
一般的な実装ではリンクエラーとして検出される。


この特例に含まれるという点ではテンプレートとinline関数は同様だけど、関数テンプレートが
自動的にinlineとみなされるわけじゃない。

ODR はプログラム全体に「定義」がいくつ含まれるか、という話。
「実体」とか言ってるとテンプレートインスタンスとごっちゃになったりするのでやめといたほうがいい。
【初心者歓迎】C/C++室 Ver.97【環境依存OK】 [転載禁止]©2ch.net
54 :デフォルトの名無しさん[sage]:2015/12/04(金) 09:44:49.42 ID:ezzwHQH9
>>48
char32_t に直接対応する書式指定は定義されていない。 C なら int_least32_t の
typedef ってことになってるから PRIdLEAST32 でいけるんだろうけど、エラーメッセージを
見る限りは C++ っぽいな。 C との移植性を考慮してる処理系なら C++ でも
PRIdLEAST32 でいけるかもしれない。

普通に考えれば確実に 32 ビットある unsigned long あたりにキャストして %08lX で表示
すれば移植性含めて確実なんだろうけど、それがダメってことなら・・・
unsigned long x = unko をはさむんならいいの?

%p で HANDLE が表示できるのは、たまたま typedef の定義が void* か、ポインタの
表現形式が同じなだけ。移植性は無い。

size_t のフォーマットは C99 でようやく %zu が定義されてる。 C99 未対応の環境を含めて
移植性を持たせようと思ったら、やっぱりキャストすることになるんだろうな。


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