構造体コピーのバカ〜
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGint a;
int b;
};
void main()
{
struct abc obj1, obj2;
obj1.a = 10;
obj1.b = 20;
obj2 = obj1; ←☆コレ!!★
}
「コレ」って、昔から出来て当たり前なの?!
なんか、私の中では、5〜6年位昔、使えなかった記憶がありまして、
それで、コンパイラがバージョンでも上がったかと
考えていたんですが、最近それを話したら、「そんなの昔から出来てあたりまえ!」って。。
これは「Cの歴史開闢以来の常識!」なのか、「とちゅ〜で使える様になったのよ」
なのか、はっきり知りたいです!賢者(てゆ〜か昔からやってた)皆様、ヘルプミー!
(文献なんかもあるといいです〜)
0002デフォルトの名無しさん
NGNG0003デフォルトの名無しさん
NGNG0004デフォルトの名無しさん
NGNGて、て××さぁ〜ん!(告白)
0005デフォルトの名無しさん
NGNG6色に増えたけど、事実上5色だし。
次はグリーンがいいなーとおもったが、ミドレンジャーみたいに
マイナーになりそうだよね。
0006デフォルトの名無しさん
NGNG>「構造体コピー」
アフォさらすな。
0007デフォルトの名無しさん
NGNGて××
照子に一票。
0008デフォルトの名無しさん
NGNG0009デフォルトの名無しさん
NGNG0010デフォルトの名無しさん
NGNG0011デフォルトの名無しさん
NGNGケコーンしろ
0012デフォルトの名無しさん
NGNGhttp://members.aol.com/tennenmario/
0013デフォルトの名無しさん
NGNG0014デフォルトの名無しさん
NGNGかな?
0015デフォルトの名無しさん
NGNGいちいちスレ立てるな
0016デフォルトの名無しさん
NGNG感謝しろよ。ったく・・・・
0017デフォルトの名無しさん
NGNGクソスレアゲる人には感謝しません
00181
NGNG> と書けば済むのですから。ただし、ANSIに準拠していない一部のコンパイラの中には、構造体の代入を許さないものもあります。
>そのようなコンパイラを使う場合には、memcpyを使ってコピーする必要がある場合もあります。
http://www.st.rim.or.jp/~phinloda/cqa/cqa14.html
このコンパイラって、どのコンパイラ!?情報求む!!
>>15 すんまそん。
>>16 ありがと〜(藁
0019デフォルトの名無しさん
NGNG今じゃ構造体の引数もコピー渡しできるらしいな
00201
NGNG当時、どの様な環境で、どのようなコンパイラをお使いでしたか?
よろしければ、参考までにお教え下さいませ(_ _
ちなみに私は、DOSで、マイクロソフトのクイックCを使ってましたが。。。
これだったかどうだか、記憶にないです。くやし〜。
0021デフォルトの名無しさん
NGNGK&R Cはできなかったんだよ。
バカ、低脳。
早く氏ね
00221
NGNG>K&R Cはできなかったんだよ。
>バカ、低脳。
>
>早く氏ね
をを、マジっすか!?
すばらしい情報をありがとうございました!
(一応裏取ろっと。)
002319
NGNGWhitesmith C
MS-C
だったかな
00241
NGNG>K&R第1版とANSI Cの仕様において異なるもののひとつとして構造体の扱いがあります。
>K&R第1版のころの仕様では構造体の直接代入を認めていなかったので,
>List 7の最終行のようにmemcpyなどを使ってコピーをしたものです。
http://www.cmagazine.jp/src/kinjite/c/oldstyle.html#index7
これだけ情報があれば・・・。
もぅこうなったらK&Rの本を探しに、古本屋に逝ってきます。
>>23 情報ありがとうございます!
Whitesmich Cも、MS-Cも、
どっちも使った事無いです。
たしかMS-Cって、クイックCの上位版でしたよね。
これらが、ANSIでなくてK&R準拠かどうか、しらべてみます。
0025デフォルトの名無しさん
NGNG祝49回 C言語ならあっしに聞け
http://pc3.2ch.net/test/read.cgi/tech/1042640474/
0026デフォルトの名無しさん
NGNG徹子に一票(藁
0027デフォルトの名無しさん
NGNG俺も最近気がついたよ。構造体のコピー(藁
律義にCopyMemory使ってたんだ。
あっはっはぁー
鬱
0028デフォルトの名無しさん
NGNG正直、あっても無くてもどうでもいい機能だけどな。
00291
NGNGあぁ同士(涙)C歴の低いプログラマは、平気で、
「構造体コピーなんてC言語開闢以来最初からできてたっつ〜の」
と、知ったかぶりでのたまうのでムカつきます。
>>28
まったくもってその通り(笑)
今回の質問は、C+で「イコール演算子のオーバーロード」を使う時、
独自の処理がいらないならわざわざオーバーロードしなくても、
「obj2 = obj1;」みたいにインスタンス間コピーできるから、
まぁ必要じゃないなら作らなくてもとりあえず動くよ。という課題が原因で出てきました。
このとき私は、「Cの構造体ではもともと無理だしな〜」と思い込んでいました。
んで、VC++6で構造体コピーを試すと、ふつ〜に動いたので、
「いったい何時から出来る様になったんだ〜」と思い立った次第でした。
しかしハッキリしました。書き込んでくれた方々には、本当に感謝しておりますです。ハイ。
>>25
貴方、15?すんまそん(2回目)。次の質問はそこでします。
さて、もう見てないだろうけど、
>>6
>>「構造体コピー」
>アフォさらすな。
結果的に、お前がオフォさらしたな(藁
己の狭い見解で他人をアフォ呼ばわりするお前がアフォだよ(藁
0030デフォルトの名無しさん
NGNG一度
http://www.taisei-e.co.jp/seikaku/sin-d.htm
http://www02.so-net.ne.jp/~west/mind/seikaku/
を試して、その結果を貼り付けてみて下さい。
どのような性格の方なのか興味があります。
0031デフォルトの名無しさん
NGNGさっそく同僚や後輩集めて得得として語ってる1が目の前に見えるようだ。
騙り手ならスバラシイ技術であると、そしてマジに1なら・・・・あんたもあさましすぎないか?
0032デフォルトの名無しさん
NGNG1みたいなのが「化石」と呼ばれてるんだろうな。
前も、strftimeを汎用性のないラッパー関数と切り捨てて
gettimeofdayを使えって奴が。
20年前ならいいけどさ。
0033デフォルトの名無しさん
NGNGmemcpyと同じ全ビットコピーだったと思うんだけど、
今のBCCは各メンバ毎にコピーしてるっぽい。
これってコンパイラ次第?仕様が変わった?C++だから?
0034デフォルトの名無しさん
NGNGバイト境界がどうたらこうたら何でしょうかね?
0035デフォルトの名無しさん
NGNGコンパイラ次第だと思う。
ていうか、構造体のメンバーが
かならず連続したメモリに来るわけじゃないとか
なんかそういうオプションがあったりなかったり
0036デフォルトの名無しさん
NGNGク ラ ス を 使 え 、 ク ・ ラ ・ ス を
そしてコピー関数をクラスの中に実装しろ
コピーコンストラクタかJavaのcloneメソッドみたいなものを実装しろ
0037デフォルトの名無しさん
NGNG実装部はどうなんの?
同じじゃないの?
0038デフォルトの名無しさん
NGNGクラスが構造体で出来てるんだけどね。
0039デフォルトの名無しさん
NGNG0040デフォルトの名無しさん
NGNG>結果的に、お前がオフォさらしたな(藁
>己の狭い見解で他人をアフォ呼ばわりするお前がアフォだよ(藁
ろくに勉強もしないやつがよくいうよ(藁
いつも勤勉であれ。
0041デフォルトの名無しさん
NGNG自己啓発ですか?
0042デフォルトの名無しさん
NGNGC99って何?
0043デフォルトの名無しさん
NGNG1999年に制定されたC言語の新しい仕様。
0044デフォルトの名無しさん
NGNGCスレへ行け。
0045デフォルトの名無しさん
NGNG単 発 ス レ は 放 置
0046デフォルトの名無しさん
NGNG単 発 ス レ は 放 置
0047デフォルトの名無しさん
NGNG単 発 ス レ は 放 置
0048デフォルトの名無しさん
NGNG単 発 ス レ は 放 置
0049デフォルトの名無しさん
NGNG単 発 ス レ は 放 置
0050デフォルトの名無しさん
NGNGCの規格
00511
NGNG32>>
>ANSIドラフト(1988)の段階で構造体のコピー(構造体を返す等)はできてるのに。
>1みたいなのが「化石」と呼ばれてるんだろうな。
そう、そういう情報を求めてました。ありがとうございます。
おかげで「化石」を脱出できましたよ。コンパイラの歴史もまとまってきたし。。。
ちなみに今回のはあくまで論文目的であって、
「構造体o2 = o1は使えないコンパイラがあるから使うな」なんて主張してませんのであしからず。
>>31
>さっそく同僚や後輩集めて得得として語ってる1が目の前に見えるようだ。
をしい、得々として語る場があるのは一ヶ月以上先の予定です(藁
いや〜正直楽しみです(藁
>騙り手ならスバラシイ技術であると、そしてマジに1なら・・・・あんたもあさましすぎないか?
あ、本人ですよ。まだ一度も騙られてないです。って書いてもわからないししょうがないか。
「氏ね」とか混ぜずに冷静に答えてくれてありがとうございます。そう、おっしゃるとおり浅ましいですな。反省はしないけど(藁
>>40
>ろくに勉強もしないやつがよくいうよ(藁
>いつも勤勉であれ。
6には、どうしても言いたかったのよ!なにせ私は、aababだし(藁
005227
NGNGCの仕様の変移を把握してるヤツなんてかなりの強者。
つか、仕様書を持ってるヤツこそCを語る資格があるね。
K&R程度の本を読破しただけで知ったかぶってるヤツはイタイな。
とまあ、俺は強者になれないのだが。
鬱
0053デフォルトの名無しさん
NGNG単 発 ス レ は 放 置
0054デフォルトの名無しさん
NGNGアライメント? バウンダリー?
どっちの用語が正解なのよ
0055デフォルトの名無しさん
NGNG0057デフォルトの名無しさん
NGNG0058デフォルトの名無しさん
NGNGいいよ。面倒くさいし。
名前が漏れないようにソース単位でもっとけばいいじゃん。
0059デフォルトの名無しさん
NGNG68000 の場合、通常は構造体のメンバのアライメントは
デフォルトでダブルワードバウンダリーとなる。てな具合だ。
0060デフォルトの名無しさん
NGNG放 置 ス レ は 単 発
0061デフォルトの名無しさん
NGNG用語の使い方は合ってるが、68000 は外部データバスが 16bit なので、ワードバウンダリで十分だよ。
0062デフォルトの名無しさん
NGNGMicrosoft Word Association of Structures
大きな組織内で、ライセンスの高いMSワードをいかに効率的に
使うかということを研究するためにつくられた非営利団体。
通称 MSWAS (エムエスワス)または単に WAS (ワス)
と呼ばれている。
0063前に実験したことあるんですが
NGNG面白い話題ですね。
まぁ、普通問題になることはありませんが、
struct=structと書いた場合より要素ごとに代入するほうが
微妙に早いことが多いです。(VC6/Release素オプション)
対象の構造体の深さや構造にもよるんですが、struct=structと書いた
場合ループを組んだコードを吐くことが多いようで、最近の
プロセッサだと並列に並べられる命令が連続してること多いほうが
効率上がるせいでしょか。
うちでやってるアプリは特殊だからまぁ大したことじゃないんですが。
0064デフォルトの名無しさん
NGNG> 場合ループを組んだコードを吐くことが多いようで、
rep のことか ?
0065デフォルトの名無しさん
NGNGなんか>>1にものすごい腹が立つ。
0066デフォルトの名無しさん
NGNGそういう保証ってあるんだっけ?
確か、コンパイラによっては
保証する/しないのオプションがあったとおもうけど
デフォルトは保証するの方なのかな
でも、穴だらけの構造体定義するバカとかいるけど
コンパイラの最適化でホールを埋めるように
要素の並び替えとかするのかな?
0067デフォルトの名無しさん
NGNG0068デフォルトの名無しさん
NGNGメモリ上に連続して無いとmallocもcallocもできないでつ。
0069デフォルトの名無しさん
NGNGgccは独自拡張で要素直指定で値を入れて初期化できるけど
ほかのだとどうなのかな
0070デフォルトの名無しさん
NGNG本当に聞きたいのなら他スレに行きましょうね。
0071デフォルトの名無しさん
NGNGかなり前からできる。
が、できないと思っていた君のセンスは
そう悪いものでもない。
0072デフォルトの名無しさん
NGNG保証されないんじゃない?
スタック上に取った場合最適化でメンバー消滅とかありうるし
0073デフォルトの名無しさん
NGNG0074デフォルトの名無しさん
NGNG> コンパイラの最適化でホールを埋めるように
> 要素の並び替えとかするのかな?
やらない。と言うか、規格上やってはいけない。
0075デフォルトの名無しさん
NGNG(sizeofで調べた)
0076山崎渉
NGNG0077デフォルトの名無しさん
NGNGアラインメント
0078デフォルトの名無しさん
NGNGアライメントが違うということ?
そういえばgccだとアライメントを変更する機能があるね
そういうことなのか
0079デフォルトの名無しさん
NGNGchar RFU[3];
とかやった気がする…。
0080デフォルトの名無しさん
NGNG0081まとめ
NGNG構造体のメンバは(少なくともCでは)宣言された順に並んでいる。
構造体コピー時に詰め物をコピーするかは実装依存。
構造体のsizeofは詰め物を含んだサイズを返す。
0082デフォルトの名無しさん
NGNGこれは処理系依存だったような
手元のCコンパイラは全て問題ないけど
0083デフォルトの名無しさん
NGNG> 構造体のメンバーは、宣言の順序に増えていくアドレスを持つ。
とある。
ドラフト段階とはいえ、ANSI/ISO-Cも同じだと思うのだが。
008482
NGNG処理系依存はビットフィールドだけみたいですね
0085デフォルトの名無しさん
NGNG少なくとも、処理系のフェッチのビット幅と、それに満たない
型の順列が、処理系のエンディアンの影響を受けるハズだが。
例えば、32ビット処理系で、アラインメントにあうように
構造体に char[4] を組み込んだとき、アドレス空間のどっち
側に配列の先頭がくるかということだけど。
0086デフォルトの名無しさん
NGNG意味不明。
>構造体に char[4] を組み込んだとき、アドレス空間のどっち
>側に配列の先頭がくるかということだけど。
&char[0] + 4 == &char[4]
ですが。
0087デフォルトの名無しさん
NGNG並び順自体意味を持たない(ここにアクセスするか全体をコピーするしかない)
0088デフォルトの名無しさん
NGNG> &char[0] + 4 == &char[4]
ポインタに対する"+"がアドレス値に対しても"+"なのかは知らないが、
"+"を用いると配列において"後"の要素を指すことは規定されている。
0089デフォルトの名無しさん
NGNGなかなかいいまとめ方だな。
0090デフォルトの名無しさん
NGNG日本を守ってよかですか?
0091デフォルトの名無しさん
NGNG天皇陛下万歳!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
天皇陛下万歳!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
天皇陛下万歳!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
天皇陛下万歳!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
天皇陛下万歳!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
天皇陛下万歳!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
天皇陛下万歳!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
天皇陛下万歳!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
天皇陛下万歳!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
天皇陛下万歳!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
天皇陛下万歳!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
天皇陛下万歳!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
天皇陛下万歳!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
天皇陛下万歳!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
天皇陛下万歳!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
天皇陛下万歳!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
天皇陛下万歳!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
天皇陛下万歳!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
天皇陛下万歳!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
天皇陛下万歳!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
天皇陛下万歳!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
天
0092デフォルトの名無しさん
NGNGはるひこの糞本でも載っているぞ
0093デフォルトの名無しさん
NGNGVC++はオプションでアラインメント指定ができる
が、指定したからといってコンパイル結果が同じになるわけじゃない
オプション変えずにコンパイルしなおして構造体のサイズが変わったことがある
0094デフォルトの名無しさん
NGNG詳細きぼーん。
009593
NGNGメンバの並びが変わるわけではないので
sizeof()で取ったサイズでmemcpy()しても問題ないと思うが
ファイルに構造体のバイナリ直書きするとかはマズイだろう(ソースをコンパイルし直した場合を考えると)
経験的な知識ですまんが、メンバとしてcharとかshortとかを並べるときは
8バイト境界までパディングした方がVC++では無難と思われ
0096デフォルトの名無しさん
NGNGだから...
> (ソースをコンパイルし直した場合を考えると)
の場合に、どうまずいのかが知りたい。
> 8バイト境界までパディングした方がVC++では無難と思われ
まさかと思うが、#pragma pack() は知ってるよな。
0097デフォルトの名無しさん
NGNG#pragma packはDLL等で言語境界を跨ぐときに有用
0098デフォルトの名無しさん
NGNG> >>95
> だから...
> > (ソースをコンパイルし直した場合を考えると)
> の場合に、どうまずいのかが知りたい。
コンパイルするごとに構造体のサイズが変わる可能性があるの
だからファイルに構造体のサイズつかってバイナリ直書きするとかはマズいの
書き込み位置がずれるとかの危険があるだろ
んなアフォはおらんと思うが
> まさかと思うが、#pragma pack() は知ってるよな。
#pragma packがあるくせに、コンパイル・オプションの設定次第でで構造体サイズに
さらに影響出る場合があるから気をつけろといってるの
さらにそういった現象は再現性はないってのが経験的にわかってるの
#pragma packなんぞに頼るコードも書くべきでないの
0099デフォルトの名無しさん
NGNGメンバの並びって絶対保証されてたっけ?
微妙に(オプションによって)保証してない環境も
見たことあるような気がする。
パディングした方がいいというあたりは激しく同意
0100デフォルトの名無しさん
NGNGメンバの並びを規定していたと思う
0101デフォルトの名無しさん
NGNGそうなのか
モー娘。もメンバの並びを規定してた気がするけど
多分おなじ理由だね
0102デフォルトの名無しさん
NGNG0103デフォルトの名無しさん
NGNG>>93
>オプション変えずにコンパイルしなおして構造体のサイズが変わったことがある
>>95
>コンパイルするごとに構造体のサイズが変わる可能性があるの
の文面から、コンパイル時のオプションが同じでも
構造体のサイズが変わる事があると取れるけど
>>95
>#pragma packがあるくせに、コンパイル・オプションの設定次第でで構造体サイズに
>さらに影響出る場合があるから気をつけろといってるの
も考えると#pragmaを使わなければ、オプションが同じでもサイズが変わる事があるし
#pragmaを使ってもサイズが変わる場合があるって事?
普通はオプションやコンパイラに関係なく構造体のサイズを合わせるために
#pragma packを使うのだと思うけど…
0104デフォルトの名無しさん
NGNG0105デフォルトの名無しさん
NGNG010619
NGNG> >コンパイルするごとに構造体のサイズが変わる可能性があるの
> の文面から、コンパイル時のオプションが同じでも
> 構造体のサイズが変わる事があると取れるけど
そういうことがあったんだよ実際
0107デフォルトの名無しさん
NGNG> そういうことがあったんだよ実際
よーするに、お前のタコな環境でそう言うことがあったと言うことか ?
ネタか、自分のバグを見つけられなかった奴だろうな。
0108デフォルトの名無しさん
NGNGと釣られてみるテスト
0109デフォルトの名無しさん
NGNG0110デフォルトの名無しさん
NGNG具体例出さない >>106 はネタと思われてもしょうがないよ。
>>109
拡張されっぱなしで、既に管理できませんが。
0111デフォルトの名無しさん
NGNG>さらにそういった現象は再現性はないってのが経験的にわかってるの
これじゃ「ふーん」としか言いようが無い罠。
0112デフォルトの名無しさん
NGNG■ このスレッドは過去ログ倉庫に格納されています