トップページ⇒tech
1001コメント296KB

C++相談室 part54

レス数が1000を超えています。これ以上書き込みはできません。
0001v(^・^)v2006/10/30(月) 22:34:08
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE(VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

テンプレその他 >>2-15 付近参照

前スレ
C++相談室 part53
http://pc8.2ch.net/test/read.cgi/tech/1159340181/
0951デフォルトの名無しさん2006/11/30(木) 19:18:23
>>950
プログラミングなんていくら上手くても無駄、言語ヲタ脂肪wwww
0952デフォルトの名無しさん2006/11/30(木) 19:55:27
なんで急に大卒?
0953デフォルトの名無しさん2006/11/30(木) 20:44:38
>>952
「大学で数学ちゃんと習ってデスマーチと縁の無い職場に行くのが勝ち組」
が根拠らしい。
0954デフォルトの名無しさん2006/11/30(木) 20:49:00
VC2005のiostreamってスレッドセーフなの?
0955デフォルトの名無しさん2006/11/30(木) 21:13:38
>>954
スレ違い。だけど誘導先が見当たらないんで答えてしまう。

昔はシングルスレッド用とマルチスレッド用とをオプションで選択できたけど、
今はマルチスレッド用しかなくなってる。いちおうマルチスレッドに対応したもの
ってことになってるから、ほぼ問題ないと思われる。
0956デフォルトの名無しさん2006/11/30(木) 21:20:12
なるほど。さんきゅー。
0957デフォルトの名無しさん2006/11/30(木) 21:40:30
結局プログラミングなんていくら上手くても無駄なんだよ。
言語オタクはマジキモいから早く死んでね。
でも家畜さんが居なくなると困るから、奴隷のように働くしか道が残ってないかわいそうな人は死なないでね。
0958デフォルトの名無しさん2006/11/30(木) 21:45:03
これはいいツンデレ
0959デフォルトの名無しさん2006/11/30(木) 21:58:51
プログラマってきもいんだよwwww社会の屑wwwww
BoostだのSTLだの偉そうにしゃべりやがってオタクがwwwww
まあたまにはよくこんなコードかけるなあって感心することもあるけどさ
正直難しいよね。
俺なんかHello Worldがせいっぱいでさ・・・
できたらiostreamの使い方を教えていただけませんでしょうか先輩方。
0960デフォルトの名無しさん2006/11/30(木) 22:02:16
だが断る
0961デフォルトの名無しさん2006/11/30(木) 22:59:03
iostreamっていっても漠然と言われても広いから困る。
0962デフォルトの名無しさん2006/11/30(木) 23:57:53
C言語の関数を呼び出したプログラムを
libにしたのですが、このlibを呼び出そうとすると
mallocが見つかりませんなど、Cの関数の呼び出し部分が
参照できないようです。
C++のプログラムの中にCの関数を呼び出す記述が含まれる場合に
このソースをlibにする場合には他に何をすればよいのでしょうか?
0963デフォルトの名無しさん2006/12/01(金) 00:01:37
>>962
extern "C" が抜けてるんじゃない?
コンパイラ付属の stdlib.h を使えば malloc() では問題ないはずなんだが。
0964デフォルトの名無しさん2006/12/01(金) 00:41:03
>>963
externCは

char *hoge = malloc()ってな感じで使ってる場所でexternすればいいの?

組み込み系でなんかライブラリ標準じゃないのがちらほら.....
0965デフォルトの名無しさん2006/12/01(金) 00:51:49
名前マングリングを発動させたくない関数にextern "C"を使う。
0966デフォルトの名無しさん2006/12/01(金) 01:11:05
前から思ってたんだが、マングリングって響きがいやらしい。
0967デフォルトの名無しさん2006/12/01(金) 01:16:37
マングリ返しングリラ
0968デフォルトの名無しさん2006/12/01(金) 01:18:17
>>966
そうなんだよね。知っている人同士の会話なら問題ないんだけど、
職場で使うと変に誤解されそうで口にできない。
まあ使う機会なんてほとんどないんだけど。
0969デフォルトの名無しさん2006/12/01(金) 01:26:04
>>964 宣言に付けるんだよ。
0970デフォルトの名無しさん2006/12/01(金) 01:41:07
返り値とかも、周りから聞いたら相当危ない
0971デフォルトの名無しさん2006/12/01(金) 01:44:01
>>970
たしかに、音だけ聞いたら分からんな。

あと、プロセスを殺すとか、死んでとか。
つい電車の中で同僚と話してしまったことがある。
0972デフォルトの名無しさん2006/12/01(金) 01:46:51
こうですか?
>>971「で、そしたら(プロセスを)殺して(kill関数)、返り値が無ければ(ゼロであれば)、成功だな」
0973デフォルトの名無しさん2006/12/01(金) 02:01:34
プロセス周りだと親とか子とかゾンビとか出てきて、とっても危険な雰囲気。
0974デフォルトの名無しさん2006/12/01(金) 02:31:59
iostreamはまた別のメンドクサさがあってなあ・・
0975デフォルトの名無しさん2006/12/01(金) 06:25:55
fstreamでファイル操作する時、ファイルサイズ取得する方法ってありますかね?
Cの標準関数の場合は、ファイルの終わりにSEEKして位置情報取得すればいいんですけど。
fstream::size()みたいなメソッドがあれば一番なんですけどねぇ…
0976デフォルトの名無しさん2006/12/01(金) 06:35:54
fstreamでもやっぱり
ファイルの終わりにseekして位置情報を取得する
0977デフォルトの名無しさん2006/12/01(金) 08:17:20
seekp, seekg
0978デフォルトの名無しさん2006/12/01(金) 08:21:06
>>976
でもなんでC/C++の場合ってことごとくそれ系の関数/メソッドが無いんでしょうか?
何か、予め実装しておくと不都合な事でもあるんでしょうかねぇ…
io.hには_filelength()ってのがありましたけど…
0979デフォルトの名無しさん2006/12/01(金) 08:32:20
標準C/C++では入出力に関して、だいぶ非力な環境も想定していたと思う。
バイナリファイルをバイト単位で管理しない(できない)環境とかね。
(バイナリファイルでは書き込んだ終わりに余計なヌル文字がついていることがあってもよいというような記載もCにはあったはず)

Boostには、boost::filesystem::file_sizeという正にファイルの大きさを返す関数がある。
0980デフォルトの名無しさん2006/12/01(金) 08:47:12
CP/Mあたりは、ファイルシステムがファイルのサイズを管理してなかった。
なんで、実際にファイルのケツまで読んでEOFを確認しないと正確なファイルサイズがわからなかった。
0981デフォルトの名無しさん2006/12/01(金) 08:50:00
C/C++においてはファイルは生(なま)物だからな。
入力中にサイズが変わるかもしれないし、そもそも動的な入力デバイスかも知れん。
0982デフォルトの名無しさん2006/12/01(金) 09:03:09
なるほど、色々考慮してるんだなぁ。
まぁBoostに関数があるんならいいや。
0983デフォルトの名無しさん2006/12/01(金) 10:15:30
>>980
管理してないのではなくて、
バイト単位ではなく、ブロック単位の管理だった。

Text fileはそれでは不便なので、最後にCtrl-Zを置くことでバイト単位管理。
これがstdioのtext modeとbinary modeの由来の一つ。
CP/M上のstdioは、text modeでCtrl-Zを見たらEOFを返す。
binary modeはそうではない。
WindowsもCP/M互換で出発したのでこのCtrl-Zの扱いを引き継いでます。

上のような関係でiostreamにもその名残りが。
0984デフォルトの名無しさん2006/12/01(金) 11:24:49
流れ変えて悪いけど、VC++6.0のSTLのソース、あれ凄いね…
よくわからんけど、なんであんなインデントめちゃくちゃなの?
嫌がらせ?気持ち悪すぎて吐き気して来たんだけど…
まったく読めない…
0985デフォルトの名無しさん2006/12/01(金) 11:28:39
書いてる人の環境とタブ幅が違うとか
元のソースからVC++6用に機械的にコンバートされたものとか
0986デフォルトの名無しさん2006/12/01(金) 11:55:11
>>985 よく見るとインデントというより書き方にクセがある感じだなぁ、まぁ慣れかな。一部抜粋するとこんな感じ(vector)
bool _Lt(const _Myt& _X) const
    {return (lexicographical_compare(begin(), end(),
      _X.begin(), _X.end())); }
  void swap(_Myt& _X)
    {if (allocator == _X.allocator)
      {std::swap(_First, _X._First);
      std::swap(_Last, _X._Last);
      std::swap(_End, _X._End); }
    else
      {_Myt _Ts = *this; *this = _X, _X = _Ts; }}
  friend void swap(_Myt& _X, _Myt& _Y)
    {_X.swap(_Y); }
protected:
  void _Destroy(iterator _F, iterator _L)
    {for (; _F != _L; ++_F)
      allocator.destroy(_F); }
  iterator _Ucopy(const_iterator _F, const_iterator _L,
    iterator _P)
    {for (; _F != _L; ++_P, ++_F)
      allocator.construct(_P, *_F);
    return (_P); }
  void _Ufill(iterator _F, size_type _N, const _Ty &_X)
    {for (; 0 < _N; --_N, ++_F)
      allocator.construct(_F, _X); }
  void _Xran() const
    {_THROW(out_of_range, "invalid vector<T> subscript"); }
  _A allocator;
  iterator _First, _Last, _End;
  };
0987デフォルトの名無しさん2006/12/01(金) 11:55:16
インデントつーか、閉じ括弧の位置がLISP的だった気がする。たしか。
0988デフォルトの名無しさん2006/12/01(金) 11:57:28
でもこの調子でずらずら詰めて記述されてるんで、最初は圧倒されるね…
0989デフォルトの名無しさん2006/12/01(金) 12:09:52
STLのヘッダーファイル見ると頭がおかしくなりそうになる
まあ他のDLLファイルもソースコードは似たような感じなんだろうけど
0990デフォルトの名無しさん2006/12/01(金) 12:21:14
VC++6だと、プラウガが書いたヤツなんじゃないの?
彼は雑誌に良くコードを出すし、STLのソース本も出しているから、
行数が少なくてすむスタイルを好むんだと思う。

コーディングスタイルのスレがあるから続きはそっちで。
0991デフォルトの名無しさん2006/12/01(金) 13:14:43
Copyright (c) 1995 by P.J. Plauger. ALL RIGHTS RESERVED.
になってたからそうみたい。
0992デフォルトの名無しさん2006/12/01(金) 13:27:02
次スレはまだですか?

↓よろしく
0993デフォルトの名無しさん2006/12/01(金) 13:37:03
( ^ω^)立てられなかったお
0994デフォルトの名無しさん2006/12/01(金) 13:47:53
俺も無理だった
0995デフォルトの名無しさん2006/12/01(金) 14:32:23
次スレ

C++相談室 part55
http://pc8.2ch.net/test/read.cgi/tech/1164951094/
0996デフォルトの名無しさん2006/12/01(金) 14:38:46
生きるのに疲れた
0997デフォルトの名無しさん2006/12/01(金) 15:20:03
age
0998デフォルトの名無しさん2006/12/01(金) 15:21:30
あっ!
埋めよう
0999デフォルトの名無しさん2006/12/01(金) 15:22:07
999got
1000デフォルトの名無しさん2006/12/01(金) 15:22:42
1000なら寝る。
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。