1 名前:デフォルトの名無しさん [2009/03/02(月) 00:36:19 ] スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。 過去ログ スレを勃てるまでもないC/C++の質問はここで pc11.2ch.net/test/read.cgi/tech/1167476845/ スレを勃てるまでもないC/C++の質問はここで 2 pc11.2ch.net/test/read.cgi/tech/1178503366/ スレを勃てるまでもないC/C++の質問はここで 3 pc11.2ch.net/test/read.cgi/tech/1187521676/ スレを勃てるまでもないC/C++の質問はここで 4 pc11.2ch.net/test/read.cgi/tech/1221633708/ スレを勃てるまでもないC/C++の質問はここで 5 pc11.2ch.net/test/read.cgi/tech/1230516307/ スレを勃てるまでもないC/C++の質問はここで 6 pc11.2ch.net/test/read.cgi/tech/1231564903/ スレを勃てるまでもないC/C++の質問はここで 7 pc11.2ch.net/test/read.cgi/tech/1232983248/
2 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 00:39:37 ] janeの隠し機能 1.書き込みウィンドウを出し半角入力に切り替える 2.Wキーを押しっぱなしにする 3.Wキを押しっぱなしにしながらsageのチェックするところをおもむろにクリック
3 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 00:40:06 ] 36年間悩んでます。お力をお貸しください。 PSのアークザラッドUというタイトルのゲームの、ゲーム画像(歩行画像など)を抽出したいのですが、 かれこれ1年ほど経ちますが、なかなかうまくいきません。 *もちろん抽出した画像は個人範囲内で利用するつもりです。 ◆試してダメだったこと ネット上からダウンロードできる、ありとあらゆる抽出系ツールを試した。 (ちなみに他のゲームはほとんど抽出可能) ◆教わったこと ・アークザラッドUは独自の画像形式を使っているから抽出できない。 ・PS上で表示されてるということは絶対に摘出はできるはず。 ・ttp://www.gradius2.com/index.php?UID=1174775153 ◆抽出は不可能ではないということを知ったとき 2ちゃんねるで質問したところ、 ある方が実際にキャラクターの歩行画像を抽出して 私が立てたスレにアップしてくださいました。 スクリーンショットじゃダメなんです。どうか皆さん、お力をお貸しください。お礼は絶対にします。
4 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 00:40:12 ] >前スレ997 お前はあんなことのために2^32バイトだか2^64バイトだかの配列を確保するのか? バカだろ?
5 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 00:41:28 ] テンプレートの使い方で分からないんだけど、 template <typename T> class Myclass { public: T mem; //他、Tを使ったメンバ関数・メンバ変数が多数 int foo(int x){std::cout << x << std::endl;return x;} double foo(double x){std::cout << x << std::endl;return x;}; unsigned long foo(unsigned long x){std::cout << x << std::endl;return x;}; }; のようなクラスがあって、呼び出すときは Myclass<char> hoge; hoge.foo((int)-1); hoge.foo((double)3.14); hoge.foo((unsigned long)42); のように使っている状況。 で、この3つのfooをテンプレートにしてまとめたいんだけど、どうすりゃいいかね?? template <typename T,typename U> class Myclass {//〜〜}; とは意味合いが違うじゃん。。。
6 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 00:44:32 ] >>1 乙。
7 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 00:46:14 ] >>1 乙彼。 あと>>5 はかわいそうな人による釣りだから皆様 無視してくださってかまいません。
8 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 00:49:39 ] >>1 乙
9 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 00:55:15 ] >>5 に対して複雑怪奇な提案したいけど思いつかない。。。
10 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 01:03:32 ] >>4 状況にもよるが全然ありだろ 大規模なNUMAマシンとかならおそらく最速だ マルチスレッドにもしやすいしな
11 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 01:05:16 ] >>4 草ついてないとこを見ると……もしかして天然? だとしたら痛いぞ。
12 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 01:08:59 ] メモリのことより比較する配列がある程度長くないと、素直にやるより遅くならない?
13 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 01:21:17 ] いや、まずその「素直」を提案せな。……というだけだとさみしいんで提案。 a1[0]を仮の共通要素とおく。 aM(Mは1-5)について仮値以上になるまで添え字インクリメント。 ->越えたらその値を仮値としてM=1からやりなおし。 ->同値なら次のMへ。M>5なら仮値を共通値として保持。保持した共通値を超えるまでa1の添え字をインクリメントし、その要素を仮値とする。 いずれかの添え字が範囲外になったら終了。 これよりはint分配列確保の方が、計算量は少ないな(終了条件が早期に成立した場合は別)。 a1-a4はインクリメントのみ。a5は比較のみ(インクリメントは不要)で済む。
14 名前:12 mailto:sage [2009/03/02(月) 01:26:31 ] 前スレでそもそもの質問者が出したやつのことな >>13 変に凝ってばかみたいだね
15 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 01:41:12 ] 最終的にサイズUNIT_MAXの配列をひと舐めするワケだしな
16 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 02:14:44 ] 両方の最大最少値から if 条件を最適化する位しか思いつかんね
17 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 02:17:01 ] wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
18 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 02:22:38 ] 可変長引数のコンストラクタを持つクラスの継承を行いたいのですが、引数の受け渡しがうまくいきません。 class hoge{ hoge(int i,...); } class piyo:public hoge{ piyo(int i,...):hoge(ここが分からない){ 〜 } } 上記のような感じです、 hogeのコンストラクタを丸々コピーする以外に何か方法があればご教授お願いします。
19 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 07:05:32 ] >>15 氏んでEYo!
20 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 08:16:00 ] >>19 死ね
21 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 08:21:52 ] >>12 素直なやり方を書いて実際に比較してみたら? っていうか、あんたの言う素直なやり方ってどんなのか、ソースあげてみてよ。
22 名前:デフォルトの名無しさん [2009/03/02(月) 08:26:06 ] wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
23 名前:デフォルトの名無しさん [2009/03/02(月) 08:42:05 ] >>18 そんな事してねーで孝三隊のポインタに氏たら?
24 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 09:17:58 ] >>18 piyoてなにおまえ? ふざけてんの? ヒヨコなの?
25 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 09:24:52 ] うん
26 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 10:33:34 ] ここはいつからこんなクソスレになった?
27 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 12:08:47 ] >>18 テンプレート構造体つかえ。
28 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 12:42:39 ] >>18 可変長の引数は止めたほうがいい。 オブジェクトを作って渡す様にしたほうがいい。
29 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 19:10:19 ] 可変長の引数はやめたほうがいい…誰かがそんなこといってたな。
30 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 20:07:51 ] template<typename T, int len>class A{ T (&X)[len]; public: A(T(&x)[len]): X(x){}; }; int B[10]; A<int, 10> B(b); // error:b is not a type オレ何勘違いしてるか教えてくれ。
31 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 20:09:35 ] 訂正。 A<int, 10> a(B); // error:b is not a type
32 名前:デフォルトの名無しさん [2009/03/02(月) 20:22:50 ] >>30 通った。 VC9, gcc4.3.2
33 名前:デフォルトの名無しさん [2009/03/02(月) 20:33:06 ] あのぅ、 あるクラスがlistとそのlistのカレント要素をメンバでもつ場合、 カレント要素をiteratorにするのは好ましいでしょうか? 好ましくない場合どのようにカレント要素を 持つのが一般的でしょうか?
34 名前:デフォルトの名無しさん [2009/03/02(月) 20:35:53 ] ちなみにそのlistは途中でaddやdeleteされる場合があります
35 名前:30 mailto:sage [2009/03/02(月) 20:51:55 ] class C{ int B[10]; A<int, 10> a(B); // error:B is not a type }; ・・・ 当然ですな 疲れてるようだから寝ます。
36 名前:デフォルトの名無しさん [2009/03/03(火) 01:22:51 ] キーボードから文字を入力する際、scanfはなるべく使わないほうが良いのですか? 参考書ごとに違いが有って、scanfを使用するものもありましたが中には int c c = getchar() で一文字ずつ入力させるプログラムがありましたがどちらの方が良いのでしょうか
37 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 01:26:04 ] そんなことも理解できないヤツがプログラムなんてやるな。自明だろ
38 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 02:14:02 ] 答えることができない奴ほど自明なんて言うよな
39 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 02:23:35 ] >>36 scanfをあまり使わないほうがいいとは思うが、理由を知らないと意味が無い類のものなので 調べてください
40 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 04:05:36 ] >>36 case by case
41 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 06:13:07 ] >>36 参考書による違いは、参考書を読まないと判らない。 何故なら、getchar()でやる方法を練習のために示す本もあるから。 scanf()は万能ではないし問題点もあるから使わないに越したことはないが、 だからと言って取り敢えず使うためのプログラムにgetchar()で作るのは愚。 まぁ、余程のことがない限り、fgets()(+sscanf()かatoi()かstrtol()か)で事が足りる。 # そして、余程のときはやはりgetchar()では事が足りないので環境依存の方法が必要。
42 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 12:26:07 ] >>39-41 ありがとうございました
43 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 12:30:08 ] >>36 scanfにはちゃんとバッファオーバーフローさせない方法もあるから その点を理解して正しく使う分には問題ないよ。 実際scanfは便利。
44 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 12:38:13 ] >>38 =>>36 ?
45 名前:デフォルトの名無しさん [2009/03/03(火) 21:21:53 ] おまいらscanfなんてどうでもいいから早く>>33 を誰か答えろ ここにはscanfしか語れない初心者しかいねぇのかYO
46 名前:デフォルトの名無しさん [2009/03/03(火) 21:44:23 ] カレント要素って何?
47 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 21:46:48 ] 33はC++よりも日本語をまず勉強すべきだと思う
48 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 22:07:53 ] エスパーすると リストの内部イテレータが外部インターフェースに対してスタティックに成るけど オレ様の用途に十分かどうか教えてくれ。 と 33 は問いかけてると読む。
49 名前:33 [2009/03/03(火) 22:37:54 ] >>48 その通り。君はプロだ。やっぱプロは違うなぁ で見解は? >>46 >>47 チミたち、C++ならいたての学生には用はないのだよ 気安くレスしないでくれ
50 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 22:40:10 ] そのlistが最早更新されないのならiteratorで医院で内科医?
51 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 00:40:04 ] とある関数のソースで、 void test(char yui,...) とある場合、...の意味するものはなんでしょうか?
52 名前:デフォルトの名無しさん [2009/03/04(水) 00:41:47 ] 可変引数リスト va_start、va_end、va_arg www.geocities.co.jp/SiliconValley/6071/technic/17.html
53 名前:デフォルトの名無しさん [2009/03/04(水) 05:28:00 ] char str[MAX_PATH]; memset(str, `\0`, MAX_PATH); lstrcpy(str, ゙53゙); if(str[0]==`5`) { MessageBox(hWnd,゙ウンコ―(・∀・)゙,゙今夜のメニュー゙,MB_OK|MB_ICONHAND); } else { MessageBox(hWnd,゙チンコ―(・∀・)゙,゙今夜のメニュー゙,MB_OK|MB_ICONHAND); } 今夜のメニューがウンコ―になるためには、 if(str[0]==0x52)のようにしなきゃ駄目ですか
54 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 07:11:26 ] lstrcpyをstrcpyにしてみては?
55 名前:51 mailto:sage [2009/03/04(水) 07:14:51 ] >>52 そのリンク先で、myfunc( "test" , 100 );とよびだされた場合、 "test"というのはどう扱われるのでしょうか?
56 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 07:23:32 ] >>55 ttp://www.geocities.jp/ky_webid/c/057.html なるたけ単純な具体例のあるページ
57 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 07:43:01 ] >>55 そこは引数の数があってないので参考にするな ちなみに"test"は引数の開始位置を得るだけにしか使われていない
58 名前:デフォルトの名無しさん [2009/03/04(水) 08:16:17 ] >>55 ...の直前の引数(va_startの第2引数)に入る。
59 名前:デフォルトの名無しさん [2009/03/04(水) 08:49:08 ] >>37 そんなことに、まともに答えられないお前もどうかと
60 名前:デフォルトの名無しさん [2009/03/04(水) 11:01:27 ] 指定したディレクトリ以下のファイル、ディレクトリをすべて 取得するような関数ないでしょうか?
61 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 11:02:42 ] opendir readdir
62 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 11:32:24 ] >>60 環境依存
63 名前:デフォルトの名無しさん [2009/03/04(水) 12:02:15 ] >>62
64 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 12:10:11 ] 多数の変数を単なるバイト列にその場でパックする方法で質問です。 通常なら uint8_t buff[1024]; memcpy(buff, var1, sizeof(var1); ... callfunc(buff); などするか、 struct { var1_t a; var2_t b; ... } buff = { var1, var2, ... }; callfunc(&buff); とすると思いますが、両者ともサイズ計算とか型情報をその場に 書く必要があり、長いこともあり簡潔にできないかなと考えています。 実はgcc拡張ですらない、環境依存な挙動レベルでは uint8_t *buff = (uint8_t *)&(struct {}){ var1, var2, ... }; というのが動いたりして、ソース記述としては一番気に入っているのですが、 当然使えません。そこで質問ですが、これくらい簡潔(冗長な情報を 書かずに済ませられる)に書け、さらにせめて実装別の拡張程度で済ませられる バイト列へのパッキング方法ってないでしょうか?
65 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 12:25:13 ] struct buff{buff, ite}; テンプレート関数(&buff, T) {memcpy(buf, ite, sizeof(T))〜; buf.ite+sizeof(t); return &buf}
66 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 12:45:58 ] C++が使えるならテンプレート引数の類推かね でもなんとなくCに見える class Pack { char buff_[1024]; int size_; public: Pack() : size_(0) {} operator char const *(){ return buff_; } int size(){ return size_; } template<class T> friend Pack &operator <<(Pack &pack, T t) { memcpy(pack.buff_ + pack.size_, &t, sizeof(T)); pack.size_ += sizeof(T); } }; // Pack p; p << val1 << val2 << val3;
67 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 12:57:41 ] struct<T, l> BI{ T &buff[l]; ite}; BI& <T>push(BI&, T&){ memcpy(if(BI.ite + sizeof(T) < sizeof(Bi.buff))BI.buff[ite], T, sizeof(T)); BI.ite += sizeof(T); return BI} int buff[99]; BI<int, 99> b = { buff, 0}; b = push(b, Z) = push(b, Y) = push(b, X);
68 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 13:44:38 ] 構造体のコンストラクタでは駄目なの?
69 名前:64 mailto:sage [2009/03/04(水) 20:18:52 ] すみません、言語はCなのでなかなかうまいのがないですね・・・ とりあえず memcpy方式 -> オフセット計算が煩雑だし、エンディアン変換でさらに冗長になるので却下 struct方式 -> 型情報と構造定義と代入側の順序をメンテするのが面倒だが、 型チェックもしてくれるだろうしこれが妥当か・・・ sprintf方式(mprintf(buf, "NVc", v1, v2, v3) みたいなのを自分で作る) -> 一番見通しがいいけど、型チェックが不可になる という感じに考えが行きつつあります。具体的なコードだと #define T(n) typeof(n) _ ## n /* require gcc */ void myfunc(uint8_t a, uint32_t b) { typedef struct __attribute__((packed)) { T(a); T(b) } in_t; nextcall((uint8_t *)&(in_t){ a, htonl(b) }); みたいな感じです。が、やってみると型チェックしてくれないので、まだ悩み中。
70 名前:デフォルトの名無しさん [2009/03/04(水) 20:23:15 ] C言語のソースをJavaなどへの移植性が向上するようにコードを修正してくれるツールは無いでしょうか? たとえば以下のようなコードがあった場合 int a; if(a){ を int a; if(a != 0){ // と変更したり、 boolean c() { int r = 0; 略 return r; } を boolean c() { int r = 0; 略 return (r != 0); } する。
71 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 20:27:21 ] 正規表現でどうとでもなるんじゃね?
72 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 20:42:14 ] >>69 扱う型の種類、パックする環境、アンパックする環境、を可能な限り詳しく教えて下さい。 特になぜエンディアンが問題になるのか解るように。
73 名前:70 [2009/03/04(水) 20:58:04 ] 変数の型を調べる必要があるので正規表現では無理なような気がします。 boolean a; if(a) { とか boolean c() { boolean r = 0; 略 return r; } の場合は修正の必要は無いです。
74 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 21:04:05 ] そもそもC標準にbooleanなんて型はない
75 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 21:13:52 ] >>72 char 配列 可変長要素 エンディアン とくれば UTF-8 系の処理だろうな
76 名前:64 mailto:sage [2009/03/05(木) 00:32:45 ] >>72 いまCodeWarriorっていうIDEのOSSなプラグインを改造して、WIN(VC++)+UNIX(gcc)で 使えるツールに仕立てようとしています。機能は組み込み開発用デバッグアダプタの USB越しのコマンド制御で、レジスタ読んだりMCUステップ実行させたりします。 扱う型自体はu?int(8|16|32)_t(かそれをtypedefした/enumで結果的にいずれかに 落ちた)型だけです。パック・アンパックはホスト側でだけですが、ターゲットのエンディアンは MCUで異なるのと、ホストもx86以外もあるのでhtonlなどの他、htoll(host-to-littelong) なども用意して使っています。 memcpyだとエンディアン変換で面倒云々は myfunc(uint32_t hoge) { hoge = htoll(hoge); memcpy(buff, &hoge, 4) などアドレス取るために行数が倍になるという話です。ここは一行にまとめて書けるstructや パッキング関数に渡す方法のほうがすっきりします。 既に一度ざっと移植したのですが、元ソースが *(unsigned int *)(data + 2) = hogehoge; data[6] = hoge; *(unsigned char *)(data + 7) = fugafuga & 0xFF; とかややぐちゃっとしてるので、もっとすっきりとUSBで流し込むバイト列の生成が できないかなぁと質問してみました。まあせいぜいコマンド1つあたり5変数程度 パックするだけなんで、大問題というより途中から面白くなってきたのでやってるのですが。
77 名前:64 mailto:sage [2009/03/05(木) 00:42:26 ] >>69 で型チェックしてくれないというのは間違いで、gccではオプションが漏れてました。 gcc -pedantic --std=(gnu|c)99 -Wall -Wextra -Werror -Wconversion でいけた(-Wconversionがチェック用)ので、今のところstruct方式がエレガントかなぁと。 いまはVC++で使える方法を探してます。こっちはC++なんで、元のキャスト代入方式より 簡潔にはしたいですが、もっと色々とできそう。typeof/decltypeを見つけて小躍りしましたが、 これはVC++では使えないのですね・・・
78 名前:デフォルトの名無しさん [2009/03/05(木) 00:58:00 ] >>76 ターゲットのMCUによってエンディアンが異なるなら、 memcpyだけではなく、structでも、自作sprintfでも、要素ごとにエンディアンの変換は必要ではないですか? なぜmemcpyでだけエンディアン変換が問題になるのでしょうか。
79 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 01:01:42 ] memcpy(buff, &hoge, 4);は*(uint32_t*)buff = hogeに機械的に書き換えられると思う。
80 名前:64 mailto:sage [2009/03/05(木) 01:22:25 ] >>78 もちろんそうですが、memcpyベースだと2つの文になります。 引数やstructの中なら横に{ htons(v1), htonl(v2), v3, ...} と}羅列できるので、 やや行数的にお得かなと気持ちが傾いてます。 >>79 はい、元コードがキャスト方式です。ただ、キャストとmemcpyは書き込み先バッファの オフセット位置を明示的に調節する必要があるので、「とりあえず変数を並べると よろしくパッキングされる」みたいにできないかなぁと。 まあベタに書いてく元コードでいいじゃん?てな気もする程度の問題ですが、 色々方法がありそうで面白いので深追いしてみようかなと。
81 名前:デフォルトの名無しさん [2009/03/05(木) 07:36:42 ] >>80 重要なのはソースの行数だけですか? (1)ソースの行数、(2)ソースの文字数、(3)ソースの可読性、(4)オブジェクトのサイズに優先順位を付けるとどうなりますか?
82 名前:デフォルトの名無しさん [2009/03/05(木) 08:35:55 ] ドメストがおすすめ
83 名前:64 mailto:sage [2009/03/05(木) 09:18:13 ] >>81 各項目での自分的評価だと、こんな感じです(1が最も短い・速い・わかりやすい・etc): cast: 3321 標準的な記法で、外部知識を要しない。オブジェクトサイズも最小。ただ、キャストの嵐が目に やさしくない(マクロで対処は可能)のとオフセット計算が間違えやすい。パックされた構造の把握は 縦に読む必要がある。縦の行数はパック対象変数分程度。バッファコピーが必要になるとmemcpyが必要。 例: *(uint32_t *)(dst + 4) = (uint32_t)htonl(src); <- これがN行続く memcpy: 4211 標準関数なので、外部知識を要さず、サイズも呼び出しのみで小さい。キャストも不要。 オフセット計算は必要で、転送データ構造のイメージは縦に読んで把握する必要がある。 縦の行数は最大で対象変数の数+エンディアン変換数程度で最大。 例: src = htonl(src); memcpy(dst + 4, &src, sizeof(src)); <- これがN行続く struct: 2222 外部知識は要しないが、一般性で劣る。サイズはキャスト方式と同等か、スタック消費分劣る。 オフセット計算が不要で、構造イメージは横に並んだ順そのままで把握はしやすい。しかし、 構造定義が長くなりがちで、変数の使用位置から離れるとズレやすいかも。バッファコピーが必要に なるとmemcpyが必要。 例: struct { uint32_t _a; uint8_t _b, ... } buf = { htonl(src1), htonl(src2), ... }; <- スタック利用 or typedef struct { uint32_t _a; uint8_t _b, ... } in_t; *(int_t *)(buf + 4) = { htonl(src1), htonl(src2), ... }; <- 既存バッファへの書き込み mprintf: 1113 フォーマット表記の知識を得る必要があるが、処理部分のコードはかなり簡潔にデータ構造を 表現・理解できる。ただし、mprintfの実装分、メモリと処理速度で劣る。処理の中身はmemcpy。 例: mprintf(buf + 4, "NN...", src1, src2, ...);
84 名前:デフォルトの名無しさん [2009/03/05(木) 10:58:37 ] Cを勉強しているのですが 虚数を含んだ計算式を作る必要があるのですが 色々調べたところ、<complex.h>をインクルードすると 虚数iを大文字Iとしてプログラムを書くことで虚数を扱える、とあったのですが 下のようなビルドエラーが出てしまいます(complex.hが無い、という意味か?)。 fatal error C1083: include ファイルを開けません。'complex.h': No such file or directory ちなみに、VC++2008を使って勉強していますが ソース自体はCの文法で書いています。 webでも色々調べたんですが、解決方法は見つからず・・・どなたか助言下さい。
85 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 11:24:30 ] >>84 C++用の <complex> ならあるみたい
86 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 11:51:19 ] 複素数は C99 からなので、手元のコンパイラが対応していなくても泣いちゃだめ。
87 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 14:58:34 ] printf("ロベール先生の第27章から忌み不明になってきた");
88 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 15:58:16 ] #include <iostream> using namespace std; #include <math.h> #define FNC void fnc(); FNC; int main() { fnc(); return 0; } FNC { cout<<"FOFOOFOF"<<endl; } どこが間違っているんでしょうか?
89 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 16:01:21 ] #define FNC void fnc() セミコロン入れたらダメじゃね? 知らんけど。
90 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 16:04:49 ] >>89 ハイパーサンクス
91 名前:デフォルトの名無しさん [2009/03/05(木) 18:27:57 ] >>84 そんな事に手間取るくらいなら自前で作った方が早いだろ。 加減算、乗算は一瞬でしょ。 割り算は意味わからなくても公式で一発だし。
92 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 18:31:38 ] >>83 fputcの要領で、16ビットや32ビットなど必要なものを (中身はエンディアン変換とfwriteを使い)自分で関数を作っていくのはどう? と思ったが、VC++だとfmemopenがないから駄目だよな。
93 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 18:45:46 ] >>84 適当に探せば外部のライブラリがありそうじゃない? それでしのいでいるうちに猛勉強してC++も使えるようになれればおk。…無茶か?
94 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 19:15:15 ] try catchをnew以外に使えてない素人なんだけど、try catchってほかにどんなときに使うの?
95 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 19:31:37 ] 例外をキャッチするときに使う。キャッチしたい例外がないなら別に使わなくても良い。 「自分で書くコードが、どんなときに例外をスローすべきなのか」 となると別の話になるけど。そういうことが聞きたいの?
96 名前:デフォルトの名無しさん [2009/03/05(木) 19:40:34 ] h = FindFirstFile( path, &data ); で FindFirstFile( )関数の失敗した値 INVALID_HANDLE_VALUE が返ってきた時 if( INVALID_HANDLE_VALUE == h ) { FindClose(h); } ってやるんだけど 失敗したときのハンドル値で FindClose() していいの? 失敗してるこの場合 FindClose() はいらないの?
97 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 19:47:00 ] >>96 していい。 ttp://msdn.microsoft.com/ja-jp/library/cc429233.aspx
98 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 19:48:43 ] ごめん。間違えた。 いらなかった。
99 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 19:49:18 ] ごめん。間違えた。 いらなかった。
100 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 20:00:59 ] ごめん。間違えた。 助かった。
101 名前:デフォルトの名無しさん [2009/03/05(木) 22:29:35 ] 構造体の中に、別の構造体のポインタがあるとして、そのポインタが 指し示すアドレスから、そのデータ型の構造体が連続して配置されている場合、 n番目のデータにアクセスしたい場合、どうしたら良いでしょうか。(下記サンプル参照) typedef struct { unsigned char test1; unsigned char test2; } Test_set1; typedef struct { unsigned short test3; unsigned short test4; } Test_set2; typedef struct { Test_set1* test5; Test_set2* test6; } Test_all; volatile const Test_all Test_struct = { (Test_set1*)0x3FFFFFA0, (Test_set2*)0x3FFFFFB0 ←メモリ上では、Test_set2型がn個連なっている。 }; void Test_func(unsigned char index){ unsigned short tmp1, tmp2; tmp1 = Test_struct.test6->test3; tmp2 = Test_struct.test6[index]->test3; ←コレはダメぽい・・・ } やっぱポインタを任意回数インクリメントか、indexを足すしかないでしょうか?
102 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 22:34:24 ] tmp2 = Test_struct.test6[index].test3;
103 名前:101 mailto:sage [2009/03/05(木) 22:54:33 ] >>102 おぉ・・・・・素早いレスありがとうございます。 確かにコンパイル出来るようですっ! 明日アセンブラで狙ったところに アクセスしているか確認してみます。 この場合、test6 はポインタですが、Test_struct.test6[index] と書くと、Test_set2型の RAM扱いになるんでしょうか?(ショボイ質問ですいません)
104 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 22:59:24 ] p[n]は*(p + (n))と同じ
105 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 22:59:54 ] RAMってw
106 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 23:23:12 ] Random Access Machomen
107 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 23:44:50 ] こんなのがわかってないうちからアセンブリやってるの? 順番ちがくね?
108 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 00:04:27 ] ハード屋なんじゃない?
109 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 00:08:36 ] int nFibo[16] = { 1, 1 }; これの = { 1, 1 }; って・・・・なんでしょうか・・? こんなの見たことありません・・! これはどういう意味なんですか・・?
110 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 00:23:18 ] nFibo[0] と nFibo[1] を1で初期化して残りは0で初期化。
111 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 00:28:44 ] わかりやすい説明サンクス!
112 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 00:54:22 ] ロベールのC++教室はC++と銘打っているが、ほとんどCの勉強という感じだ。 Effective C++などには配列はやめてvectorとstringを使おうと書かれているが、 ロベールでは徹底的に配列を使う(というより全編にわたってほぼ余すところなく登場する)。 配列はポインタと表裏一体なので、初心者は最初からCの一番の鬼門と真正面から向き合うことになる。 メモリ操作に関する知識は絶対に必要なのでこのスタンスもわからなくはないが初心者にはやや厳しくはないか? 他にも、ビット列の再解釈がしばしば登場したり、ハンガリアン記法が採用されていたり。 まぁ、いずれも必要な知識だけどさ。
113 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 01:11:00 ] C++の解説には、色々な入口から入る方法がある。 どの解説も同じでは面白くない、違う方が良い。 Cから順番に説明があったり、 いきなりクラスから説明したり、 それを読者が選ぶ事が出来る。良い時代です。 それぞれが、それぞれに良い
114 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 01:23:41 ] む。なるほどそういう考え方もあるか。確かに。 自分はCを学ぶにあたってポインタの習得にだいぶ苦労したので Accelerated C++でCを勉強したときは目からうろこだった。
115 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 01:41:15 ] >>113 その考え方ステキだな。 俺は途中でロベールを読んだが、たま〜に知らない事が出てきて面白かった程度の記憶しか残っていない。 (逆に言えば特につっかからなかったとも言える。慣れてたからだろうけど。) 最初に読んでいたらきっと感慨も違っただろうなぁ。
116 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 01:58:46 ] 私の考え方は他人と違う。。同じかもしれない。 機械語を逆アセンブルするときは、逆順、後ろから読む。 そして、終わったら前から順次読む。 本を読む時も同じ。逆から読む。 変かもしれない 人それぞれです、その人に合ったものを選ぶ事が出来れば幸せになります。 自分自身を知って、マッチする方法を選ぶ能力を養う これが幸せへの法則かもしれません。
117 名前:デフォルトの名無しさん [2009/03/06(金) 15:52:32 ] 数値入力で1〜9999の範囲内で入力してくださいという プログラムで範囲外だとエラー文を表示するのですが、 long型のオーバーフローする値(4294967296)を打ち込むと 入力エラーにならず読み込んでしまいます。 どういった対策をすればよいのでしょうか? ちなみにint型で定義してあります。
118 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 15:53:13 ] コードは?
119 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 15:53:40 ] >>117 doubleで読み込めば
120 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 16:41:16 ] >117 入力部分と、保持する数値とを分離するとか。 >119 現実的にはともかく、理論的には変わんなくね? そうでもない?
121 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 16:45:22 ] string に読み込んで桁数判定した後数値変換するとか。
122 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 16:53:07 ] >>117 そういう時のscanf
123 名前:デフォルトの名無しさん [2009/03/06(金) 18:15:57 ] scanfを恥ずかしげもなく使う男の人って。。。
124 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 18:17:48 ] 男女以前にプログラマとしてどうか
125 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 18:18:29 ] 別に普通
126 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 18:45:28 ] int64整数の補数をint32|int16へ最大値切り詰めにしても余剰bit切り捨てにしても 1〜9999条件なら 4294967296 (0x1 0000 0000)は弾いてくれると思うが 如何か
127 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 19:27:15 ] strtol を使えば大きすぎるのを入れたときはLONG_MAXになるから弾けるよ
128 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 19:35:05 ] >>126 弾けるのは4294967296とか、一部じゃないかw
129 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 21:33:28 ] キャストの弊害や精度不足の問題なら対処のしようがあるが もしも 117 の不具合症状を含むライブラリや CPU が有るようなら大問題 概念的指摘ならば問題はないが数字を出して上手くいかないと主張するなら 実行環境を示して頂きたい。
130 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 21:53:18 ] バカは黙ってろw
131 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 21:54:39 ] >>117 >ちなみにint型で定義してあります。 といっているが、そもそもオーバフローする値が入力できるんだから元は 文字列とかint以外の値でしかありえない それをintに変換した後ではじくのは不可能 面倒くさくても地道にやるしかない 1) 文字列のまま取得 2) 前後の空白とかとる 3) 数値以外のものがあったらエラー 4) 先頭の0を削除 5) 5桁以上ならエラー 6) 空文字列なら0 7) 整数変換 とか、まあがんばれ
132 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 22:31:45 ] まぁ、strtol()を使えば変換終了点が得られるからそこをチェックすれば事が足りるな。
133 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 01:18:09 ] ポインタは俺の理解を超えてやがる・・・・!!!
134 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 07:38:06 ] >>133 どうしたw突然何があった。 …まあ状況次第ではある意味大半の人の理解を超えているよ。
135 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 07:48:07 ] 自分で組むだけなら、Cは良い言語だと心から言えるが、 他人のソースを読むと微妙な気分になる。 C++はまあまあ良い言語だが、他人のソースは くそったれと思う。 って事かな?
136 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 08:22:39 ] 俺は自分のソース見てくそったれと思う もっときれいに書けないのかよ昔の俺
137 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 08:26:16 ] それはあなたの進化の証。
138 名前:デフォルトの名無しさん [2009/03/07(土) 12:04:25 ] ソースなんて動けばいいよ。動くことが見た目に判ればそれでいい。
139 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 13:45:17 ] ポインタを解りやすく解説してくれるC++のサイト教えてください・・・ ロベール先生すいません あなたの説明は僕の理解を超えている
140 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 13:47:43 ] >>139 適当な本を買った方がいいよ。 サイトは限界があると思う。 …そしてアドレスとポインタが分からないならロベール先生のせいじゃなくてまだC++に入るほどの腕じゃないと言うことだからC言語の本が良いと思うよ。
141 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 14:02:08 ] アセンブラやればポインタはわかる。 なのでPCプログラミングより8bitマイコンでも触るのお勧め。 ポインタが判らないという事はメモリマップとかスタックイメージも 脳内に浮かんでいないのは確実な訳で、それは計算機の知識が決定的に 欠けてる訳で、ってことはC/HWに限らずJVMやCLRも理解できない訳だから 一番見通しのいい低レベルハードウェアを触って身に付けるといいと思う。
142 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 14:39:23 ] >>141 あっそ。
143 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 14:53:10 ] #include <iostream.h>/*ロベール教室より*/ void ChangeToShohwa(int x) { if(1926 < x && x < 1989) x -= 1925; else x = 0; } void Shohwa() { int nYear; cout << "西暦を入力して下さい > "; cin >> nYear; ChangeToShohwa(nYear); if(nYear) cout << "その年は昭和 " << nYear << " 年です。" << endl; else cout << "その年は昭和ではありません。" << endl; } int main() { Shohwa(); Shohwa(); return 0; } なぜこれで失敗するのかが理解できない・・あほでごめんなさい
144 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 15:07:32 ] >>143 www7b.biglobe.ne.jp/~robe/cpphtml/html01/cpp01034.html > 普通に理由が書かれてるじゃん。
145 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 15:08:00 ] >>144 手滑った www7b.biglobe.ne.jp/~robe/cpphtml/html01/cpp01034.html >引数は、新たに変数が作られ、それに値が代入されるという仕組みになっているからです。
146 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 15:17:51 ] >>142 何か気に障るようなこと言ったか?
147 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 15:20:35 ] ポインターは簡単、ポインターの解説が難しい。 上手に説明できたら天才。
148 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 15:33:45 ] つまり、なんだかんだでnYearの値が変更できないってこと・?
149 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 15:46:37 ] なんだかんだというかそのやり方だとnYearがこぴってわたされて そのこぴったのを変更しているだけ
150 名前:142 mailto:sage [2009/03/07(土) 16:14:00 ] >>146 …俺の深読み誤解か。 スマン。
151 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 17:55:04 ] >>147 ポインターのような人間には解りづらく、そして機械に都合のいいように作られたものの使用を強制する言語はダメポ言語 普通は人間に合わせて言語が作られるべきだろ
152 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 18:16:59 ] ポインターは日本語に似合う。皆は知らぬうちに日本語会話の中でポインターを使っている。
153 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 18:33:00 ] >>151 の考える素晴らしい言語のソースも、 ポインターを駆使して記述されています。
154 名前:デフォルトの名無しさん [2009/03/07(土) 18:47:53 ] ボイン太さいこー!
155 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 19:01:39 ] >>152 This is it.
156 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 19:11:01 ] int **(*i[10])[4] int (*i())[6] int *(*(*i)())[4] 数秒以内にポインタiが何を指しているのか理解できないと Cの初歩にすら達してないと言われた お前らなら、一目瞭然で数秒どころか一瞬だろ
157 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 19:19:29 ] >>156 実際そんな使い方はまったくしない。 一目でわかりやすい宣言をするのが上級者。
158 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 19:25:03 ] 実際は使わないが、錬度を試す訓練だよ
159 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 19:30:04 ] 数秒でわかったらすごいわ 俺の場合、特に最後は()の解析で時間かかるぞ
160 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 19:33:59 ] そこに至るまでのコード次第 いきなり 156 が現れたら 書いた奴の精神状態を疑う。
161 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 19:59:17 ] >>159 俺、今でも数秒では無理だが、宣言をすらすらと解析できないとなると程度しれるよな まだまだ初級のおれがちょっと前に新人にこのp何さしてるのって聞かれたのがこれ int (CC::*(p[3]))(void); これぐらいなら頻繁に使うだろうし、ム板連中なら一瞬だろ ちなみに>>156 は会社の新人PGのC言語コースの理解度試験
162 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 20:12:25 ] 頻繁に使うか? 俺だったらまずtypedefするが…
163 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 20:24:13 ] 爆釣
164 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 20:24:22 ] >>162 どういう風にtypedefするんだ?
165 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 20:28:02 ] mist000.h18.ru/debug.cpp メンバーイニシャライザを使用したコンストラクタをクラス定義の外に分離したいんだが、 g++でコンパイルするとこのようなエラーが出る。 -------------------------------------------------------- uha@seven:~/dev/uhaww$ g++ -Wall -o debug debug.cpp debug.cpp: In constructor ‘TestException::TestException(std::string&)’: debug.cpp:8: error: ‘sCause’ was not declared in this scope debug.cpp:8: error: expected `{' at end of input debug.cpp: At global scope: debug.cpp:10: error: redefinition of ‘TestException::TestException(std::string&)’ debug.cpp:8: error: ‘TestException::TestException(std::string&)’ previously defined here -------------------------------------------------------- 分離すること自体考えてはいけないのだろうか... メンバーイニシャライザ使わなければ分離できるのに。。 間違いがあればよろしくお願いします。
166 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 20:28:56 ] >>162 まさか typedef int (CC::*(p[3]))(void) なんて言わないよな int (CC::*(p[3]))(void)が何をあらわすのか、解りやすくするtypedef頼むよ
167 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 20:29:28 ] 実はほとんど俺の自作自演 >>164 typedef int (CC::*ccpoint)(void); ccpoint p[3]; こんな感じにするんじゃね?
168 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 20:34:07 ] 2ちゃんねる株式会社ではよく使います。 実際はベテランほど保守性を考慮して単純に書く。 Cの設計者でさえシンプルに書けと言ってるのに、 何を勘違いしてるんだろね。
169 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 20:38:15 ] むずかしっすぎる!
170 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 20:46:27 ] int (CC::*(p[3]))(void); が頻繁に出てくるようでは駄目だと思うわ
171 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 20:57:19 ] Visual C++ 2008 Express Editionの使い方がよくわかりません。 講座サイトの解説で使ってるVisual C++はちょっと違って 現在編集中のプログラムを実行する方法がわかりません。 ご教授よろしくお願いします。
172 名前:165 mailto:sage [2009/03/07(土) 21:01:49 ] お騒がせしました、自己解決しました。
173 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 21:13:57 ] >>171 F1を押してヘルプを読め
174 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 21:18:57 ] >>171 スレ違いだろ
175 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 21:19:31 ] int (CC::*(p[3]))(void)のpって何を指す 日本語で書いてくれ
176 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 21:21:16 ] pは、配列です。何の配列かと言うと・・・次の人、どうぞ
177 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 21:22:20 ] パス!
178 名前:175 mailto:sage [2009/03/07(土) 21:26:55 ] あと、>>156 の int **(*i[10])[4] int (*i())[6] int *(*(*i)())[4] のiも頼む
179 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 21:34:36 ] もしかして、voidさん入店されてはります?
180 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 21:40:12 ] 全然わからんw 1番目は多次元配列っぽくて、 2番目と3番目は関数ポインタの配列っぽいれすか? あと>>161 はメンバ関数へのポインタっぽい? 答えをたのむぅ。
181 名前:デフォルトの名無しさん [2009/03/07(土) 21:48:22 ] 実際のコードで、こんなの使っちゃダメだが、 Cの文法の知識として、本当におまえら、読めないのか? javaばっかやってるから、バカになる
182 名前:175 mailto:sage [2009/03/07(土) 21:52:00 ] >>180 俺と似たような,orzレベルだな 色々レスしてる人たちって解ってるんでしょ、なら教えてくださいなーーーー
183 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 22:02:29 ] >>181 本当に読めないので、ぜひ、答えを
184 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 22:51:56 ] int **(*i[10])[4]; ( ((int[10])へのポインタ)[4] )へのポインタ ×2 int (*i())[6]; (int f()のような関数へのポインタ)[4] int *(*(*i)())[4] ( (int *f()のような関数へのポインタ)[4] )へのポインタ ということでいいのか?
185 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 00:00:32 ] C言語パズルです、みたいなノリで出されるなら喜んでやるかも。
186 名前:180 mailto:sage [2009/03/08(日) 00:09:44 ] 1番目は「二次元配列へのポインタ」のポインタのポインタとなる要素数10の変数i。 2番目は二次元配列を戻り値とする関数i。 3番目は「関数ポインタを格納する二次元配列へのポインタ」へのポインタ。 わからーんw
187 名前:180 mailto:sage [2009/03/08(日) 00:50:52 ] んー。一番目はいきなり間違いだな。 1番目は「二次元配列へのポインタ」のポインタのポインタとなる要素数10の変数iだとすると int *(**i[10])[4]; と書く必要があるようだ。わからん・・・。答えはまだか。
188 名前:デフォルトの名無しさん [2009/03/08(日) 01:11:50 ] int **(*i[10])[4] intへのポインタのポインタの配列へのポインタの配列 int (*i())[6] intへの配列へのポインタを返す関数 int *(*(*i)())[4] intへのポインタの配列へのポインタを返す関数へのポインタ
189 名前:180 mailto:sage [2009/03/08(日) 01:21:47 ] なるほど、int **(*i[10])[4]の最初のint **は納されている型になるのか。 んでもって、(*変数名)[4]が多次元配列へのポインタで、 変数名の後の[10]がその変数の要素数になる、と。 だんだんわかってきた。おもしろい。w
190 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 01:39:49 ] 外側から一つずつ剥がしていく。最初と最後の両側から剥がせるときは、最初を先に剥がす。 剥がしたものが、それぞれ int(などの普通の型名)であれば…… 「int」 * であれば…… 「へのポインタ」 [N] であれば…… 「の配列」 (int,int) (など、カッコ内に型名)であれば…… 「が戻り値の型、(int,int)が引数の型である関数」 MyClass:: であれば…… 「で、MyClassのメンバであるもの」 をつけていく。これで読めるはずだ。英語圏の人は逆向きにやるらしいけど。
191 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 01:45:13 ] あと、これとは直接関係ない話だが、intへのポインタへのポインタは、intの2次元配列とは別物だからね。 「ポインタ⇔配列」の互換ができるのは、末尾の「〜へのポインタ」「〜の配列」の部分のみ。 だから、ポインタの配列はポインタへのポインタで受けることができるし、2次元配列は配列へのポインタで受けることができるが、 2次元配列をポインタへのポインタで受けるのは不正。
192 名前:デフォルトの名無しさん [2009/03/08(日) 01:51:13 ] >>190 読めないよ。 int &a int func<int>()
193 名前:180 mailto:sage [2009/03/08(日) 01:52:14 ] 大変よくわかりました。
194 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 01:56:42 ] 167は正しいの?
195 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 02:07:28 ] 正しいよ。
196 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 02:07:55 ] >>194 うん
197 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 02:26:30 ] C言語の宣言の文法は、もうちょっとマシな文法にならんかったの? 標準化するとき、誰からも反対が出なかったのが不思議なくらいだ。 頭がいい人がいっぱい集まってやってるハズなのに。
198 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 03:13:06 ] これでいいんじゃない? っていうか、Quizみたいなみょうちくりんな宣言が必要になるプログラムは そもそもの設計が間違っている気も。
199 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 03:21:05 ] Cだと、ポインタ型を別に作って欲しかった 後は関数ポインタの宣言を何とかして欲しかったくらいか >>156 をすらすら読み、161みたいなのを頻繁に使うプログラマにはなりたくない 161はtypedefしないらしいし…
200 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 04:01:48 ] >>199 もし>>156 をtypedefを使って分りやすくしてくれと言われたらどのように typedefする?有る意味typedefの練習になるんじゃないか
201 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 04:15:48 ] それらが何を意味するものとして使われているのか、それに基づいてtypedefすべきと思う。 例えばchar*をstringとしてtypedefしたり(C++ならstd::stringがあるけど)、単純に置き換えるんじゃなくて 意味が分かるようにしなければ、結局分かりやすくはならないんじゃないか。
202 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 04:37:26 ] >>201 普通はそうだが、練習なら良いんじゃないか >>156 を見てこれならどうtypedefしたらいいんだろと疑問に思っただけ >>156 は宣言構文解釈による頭の体操って感じかな 頭の体操なら現実では使わないものでも良いんじゃないか
203 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 04:42:15 ] >>201 つまり、windows.hを批判してるってことですね。
204 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 04:48:18 ] windows.h のそれは、int32_tとかwchar_tとかが無かった時代の産物としては存在意義があると思う。
205 名前:202 mailto:sage [2009/03/08(日) 04:55:42 ] >>203 本人のポリシーだから良いんじゃないの ま、windowする時は、気に入らんでもwindowsの流儀に従ったほうが無難だろな
206 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 05:54:53 ] windows.hの場合は囲い込んで、移植させにくくしただけだろ。 gcc+Qtでなんも困らん。
207 名前:デフォルトの名無しさん [2009/03/08(日) 09:50:09 ] 俺もstdio.hで十分だわ
208 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 10:16:15 ] っつか、この世は俺1人で十分だ
209 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 10:29:48 ] >>208 さっさとジュース買って来い
210 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 11:34:40 ] つかMSはさっさとstdint.h対応しろと。C99決まってから10年なのに 何をしているのかと。
211 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 20:47:58 ] #include <iostream> using namespace std; #include <math.h> #include <stdio.h> void ChangeToShohwa(int x) { if(1926 < x && x <1989) x -=1925; else x = 0; } int main() { int x; ChangeToShohwa(x); if printf("昭和%d年ですよ",x); else cout<<"昭和じゃないです"<<endl; } : error C2061: 構文エラー : 識別子 'printf' : error C2181: else 文が if と一致しません。
212 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 20:51:56 ] 教えてください。 お師匠
213 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 21:03:52 ] >>212 それコンパイラか頭のバグ コンパイラ何? 頭は何?
214 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 21:06:59 ] >>211 ifだけじゃだめだろ この場合if(x)かな? 他もひどすぎて、思ったとおりには実行されないと思うが
215 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 21:08:52 ] >>213 VIsual C++ 2008 頭・・?
216 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 21:10:55 ] >>214 これのどこがひどいと言うんだ・・・!! シンプルで無駄のないプログラムじゃないか!!
217 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 21:11:45 ] >>216 バカは失せろ
218 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 21:14:25 ] >>217 すいませんでした 出直してきます
219 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 21:18:15 ] >>215 じゃ、頭のバグだな。 int x = 1945; void ChangeToShohwa(int& x) if(x) これで良いだろ
220 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 21:19:12 ] >>211 から星の煌めきを感じる
221 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 21:20:14 ] ていうか、xを改変する意味が分からない int返せよ
222 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 21:23:40 ] >>221 そう言うならおまえがそれやれよ
223 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 21:36:00 ] ワンパクでもいいタクマシク育ってほしい。
224 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 21:50:09 ] これ、ロベールからの引用じゃろ? まともに動かなくていいのよ。この後、参照の話が出てきて まともに動かない理由とちゃんと修正されたバージョンのコードが記載されてるから。 しかし、ロベールは2000年の記事じゃから古いぞ。 使っているコンパイラもVC++6で著者自身が 環境依存はいやだと書いているくらいだし。
225 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 21:58:42 ] >>221 Googleのプンソで採用されているコーディング標準では 参照パラメータはすべてconstにせよってあった。 まぁ、それはさすがに行き過ぎだと思うけど 関数の可読性という点ではなるほどとも思う。
226 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 22:31:38 ] プンソって何?と一瞬思ったがオプソか。
227 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 22:58:21 ] >>221 >>145
228 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 23:02:07 ] 西暦と昭和を同じ変数で扱うのが気持ち悪いってことじゃねーの?
229 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 23:22:01 ] 西暦形式で格納されてる変数がいつのまにか(ではないけど) 和暦形式に代わってるとか死ねとおもうね
230 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 00:05:10 ] 年クラスを作って、get西暦とget和暦メソッドを用意するべきでしょうか。
231 名前:デフォルトの名無しさん [2009/03/09(月) 00:07:37 ] 時刻クラスを基本クラスとして、西暦クラスと和暦クラスを派生させるんだろ。
232 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 00:12:49 ] 出来事 vector に年月変換機能を備えたイテレータが美しいと思うよ。
233 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 01:07:34 ] 日単位で持っておいて、月以上に変換するときは暦クラス通すようにすれば。
234 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 03:14:07 ] 「和暦表示じゃないと、絶対困る!」 って言われること、けっこう良くあるけど、 天皇が暗殺されたら、どうするのかね?
235 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 03:48:14 ] 簡単に追加修正できるようにSQLite、CSV、XMLででも持っとけよ。 そんなの昭和64年からの常識だろ。
236 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 08:07:31 ] 天皇が暗殺されても今までの和暦がなくなる訳じゃないしなぁ。
237 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 08:37:29 ] 西暦だって、新宗教に宗旨替えして新西暦0年にリセットするかもしれないし、 イスラムが再び勃興してイスラム暦に切り替わるかもしれない。 UTCみたいな無色透明な基準年が必要だな。
238 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 09:31:35 ] UTCのどこが無色透明だって? 基準だったら皇紀でもいいわけだろ。
239 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 09:50:40 ] いやぁおまいらの講義はみてて勉強になります。 小生も美しいコード書けるようになりたいですハイ。 弟子入りさせて貰えませんか?
240 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 09:55:34 ] 地球の誕生年を元年にすればいいじゃん。 俺が小学生の頃、46億年前に地球ができたって聞いたから今は46億18年だな。
241 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 09:59:49 ] 地球の紀元は今後変動する可能性があるので基準にできません。
242 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 10:04:54 ] じゃあ宇宙で。 ビッグバン歴
243 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 10:07:09 ] 同じ理由で却下
244 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 10:44:56 ] それにしても、1926年は殆ど昭和じゃないんだがなぁ。 同じように、1989年も殆ど昭和じゃないし。
245 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 10:51:46 ] VCでコンソールアプリを作成し起動します。その後外部のPGから、 SendKeysやPostmessage,標準入力などでキー送信を送ろうとしているのですが、 SendKeysの場合:通常のキーは受け付けるがファンクションキーは駄目 Postmessage、標準入力の場合:何も受け取らない となります。 ファンクションキーを送信したいのですがどうすればいいのでしょうか? アドバイスお願いいたします。 ・DOSプロンプトだと標準入力はちゃんと受け付けるが、コンソールアプリは受け付けない ->DOSプロンプトとコンソールアプリの仕組みは別物?
246 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 11:31:49 ] 送れないこともないだろ? 今どうやってんの、C++/CLIなのか?
247 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 11:35:00 ] >>245 PostMessageやSendMessageがダメなのは知ってる。 他は知らない。
248 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 11:54:27 ] >>246 > 送れないこともないだろ? > 今どうやってんの、C++/CLIなのか? VC++6.0MFCコンソールアプリ で作りました。送る方はVB.NET2005です。 PostMessageはWM_CLOSEは送れたようです。その他は SendKes.Send(chr(0)) SendKes.Send(chr(62)) とするとchr(62)は送れるんですが、chr(0)は無視されますっていうか SendKes.Send(chr(0)) っていうのはVBでは無謀なのかな、でもvbNullStringでも 駄目でした。 それに標準入力で送れないのはなぜなんでしょう?(DOSプロンプトへはおくれるのに)
249 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 11:54:41 ] [1] 授業単元:趣味 [2] 問題文(含コード&リンク): ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8957.txt [3] 環境 [3.1] OS: XP [3.2] コンパイラ名とバージョン: MSC ver.5.1 [3.3] 言語:C パスワードの入出力プログラムをつくりたい。 PASSは4文字とし、1文字入力される毎に'*'を1個表示し、 4文字入力後パスワードをチェック。 PASSが正しければ「システムの使用を許可します」と表示し、 間違っていれば3回再入力させて、3回を超えたらエラーを表示。 (パスワードは予めプログラム内部で定義されているという前提で) こういうプログラムを書いてみたのですが、main以下「*password=1994」を 正解として宣言し、else文の部分でc[i]と*passwordを認識させてprintfで c[i]を表示させたいんですけれどもうまくいきません。 何故でしょう? 何となく原因はわかるのですが、漠然としていて手が出せないんです。 上のコードをみて、名人方のアドバイスをお聞かせ願いたい。
250 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 12:00:25 ] >>245 SendInputはどう?
251 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 12:16:23 ] >>249 何をやりたいのかの説明がおかしいし、プログラムに至っては支離滅裂だ。 c[i]に文字を入れているのなら、1994なんて数値を入れちゃダメだろ。 初歩からやり直すことをお勧め。
252 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 12:21:31 ] >>240 位置エネルギーと一緒で無限遠を元年にすればいい
253 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 12:31:54 ] >>249 メモ帳べた書きでコンパイルしてない。好きにしろ。 #include <stdio.h> #include <conio.h> int main(){ const char* password = "1994"; int count = 0; do{ int i; char input_password[4]; printf("パスワードを入力して下さい。(4文字): \n>"); for(i = 0; i < 4; ++i){input_password[i] = getch(); putchar('*');} }while(!strcmp(password, input_password) && count++ < 3); if(count >= 3){ puts("仏の顔も三度まで!\n正式なpasswordがないとシステムは使用できません!"); }else{ printf("password = %s\nシステムの使用を許可します。\n", password); } }
254 名前: ◆XD9CNUCqag mailto:sage [2009/03/09(月) 12:33:47 ] >>249 です。 >>251 氏 なるほど、確かにおっしゃるとおりだと思います。 説明不足で申し訳なく。 このプログラムは'1994'というPASSを定義して、c[i]に入力させてそのPASSを 入力させたら正解、それ以外なら間違いで再入力させるといった感じでつくりたかったんです。 そして、私はCを学び初めてほんの1ヶ月くらいの素人でありまして 現在進行形で勉強中の身であります。 初歩から学んでいるつもりなのですが、何分覚えることが沢山すぎて手探りな状況な次第。 もし、よければ勉強するポイントなど上げて貰えると助かるのですがお願いできますでしょうか?
255 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 12:35:41 ] 伝統的なポイントな。 1) 初心者です、を免罪符にした発言を慎む。 2) 一歩目から他人に頼るな。努力の跡すら見えないのは相手にされない。
256 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 12:39:56 ] 小心者です。 インポ目で他人を頼って(ry
257 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 12:40:16 ] >>254 一ヶ月もあれば、パスワード入力くらい書けるようになる。 それができていないのは、初歩からきちんと自分のものにしていないのではないだろうか。 まさかとは思うが、本を読んで理解した気になっただけで書けるようになるとは思っていないだろうな。 まぁ、先ずはもっと単純な文字入力からおさらいしてみようかw
258 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 12:45:28 ] 宿題スレに張り付いて課題こなしてたら力量うp。
259 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 12:56:16 ] >>253 メモ帳だとその程度か input_passwordが0終端してないぞ
260 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 13:00:26 ] 宿題スレは単にバカな質問を受け流すためのハコだからな・・・
261 名前: ◆XD9CNUCqag mailto:sage [2009/03/09(月) 13:15:40 ] >>255 氏 肝に銘じます。 >>257 氏 言われてみれば、本を読んでたら出来るようになるとは少なからず思っていました。 でも、実際やってみて全然出来ないどころか、覚えることすら出来ていないことに 自己嫌悪に陥っています。 単純な文字入力から勉強し直してみます。 >>258 氏 宿題スレの名人方は、添削するより、ひたすら課題を自分でこなしていく のが好ましいようなので、張り付いてだけじゃ私の力量うpには繋がりませんよね・・・。 参考にはなっていますけども。
262 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 13:25:08 ] >>261 本を読むだけでも相当な勉強になる。 …ただしただ読み流すだけではダメで、理解しながら読まないと、ただ字面を追っているだけになる。。 そして少しでも疑問に思ったら先へ進まないでコーディングしてみる。 この辺は中高生の数学と共通する物がある。 ってな感じが俺の認識。
263 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 13:25:40 ] 実はここまで全て俺の自演
264 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 13:27:35 ] >>261 自分で回答するんだよw
265 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 13:29:31 ] >>261 自分でも答えを考えるんだよ。
266 名前: ◆XD9CNUCqag mailto:sage [2009/03/09(月) 14:34:43 ] >>262 氏 >…ただしただ読み流すだけではダメで、理解しながら読まないと、 ただ字面を追っているだけになる。 はい、どうやら私は読んで理解したつもりだっただけで 字面を追っていることをこれまで繰り返していただけのようです。 「早くCの知識を身につけたい」という気持ちだけが先走っていたといいますか。 勉強しても早々簡単にはみにつかないものなのにおかしいですね。 >>264 氏 もし自分で回答なんかしちゃったりしたらら駄目だしされまくりで 精神的に辛すぎるような気もしますが・・・
267 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 15:24:29 ] >>266 ダメだしされて何が悪い。直せばいいじゃないか。 ダメだしも指摘もなければずっと悪いままだぞ。
268 名前:デフォルトの名無しさん [2009/03/09(月) 15:43:56 ] 昼間に2ちゃんねるに書き込んでる人間なんてスキルも無いロクでもない人間なんだから 講釈なんて聞いても無駄だよ。 自分ができない夢を語っているだけなんだから。
269 名前: ◆XD9CNUCqag mailto:sage [2009/03/09(月) 16:46:35 ] 困りました・・・ 文字入力の基礎からやり直そうと思って勉強し直してるんですけども いつまでたっても目的のパスワードプログラムが出来そうもない・・・ 何となく問題の原因はわかりかけてるんだけど、漠然としてて・・・ そっから全然前に進まない ほんと使えないなぁ・・・私って・・・OTL >>267 氏 確かにその通りかもしれません すぐには無理でしょうが、いずれ力量うpしたら実践してみたいと思います。
270 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 17:16:13 ] 文字コード、文字列、数値
271 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 17:50:37 ] ゆっくりいこう
272 名前:デフォルトの名無しさん [2009/03/10(火) 01:04:54 ] あるバージョンのgccでは、複数のスタティックライブラリをリンクするとき liba.aがlibb.aの関数を使用し、libb.aがlibc.aの関数を使用しているとき gcc -o prog main.o liba.a libb.a libc.a の順番に書かないとundefinedなんとかというエラーが出る。 もしも、liba.aとlibb.aの双方が互いの関数を使用している場合、 これらのスタティックライブラリを上記のgccでリンクするにはどうすればよいのか。
273 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 02:46:29 ] gcc -o prog main.o liba.a libb.a libc.a liba.a
274 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 02:49:11 ] >>272 そうならないようにモジュールの配置を見直す。
275 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 07:01:54 ] >>272 そういうのを循環参照と言って、良くない設計の兆し。
276 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 08:38:45 ] gccって、あるバージョンとか噂とか、不確かではっきりしない事を よく書かれてるな。
277 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 12:32:55 ] >>272 昔のHP/UXにもそういうの(順序を人間が決めないといけない)があって lorder | tsort で依存関係をトポロジカルソートして makefile に食わせた覚えが。
278 名前: ◆XD9CNUCqag mailto:sage [2009/03/10(火) 13:59:34 ] /* getchar.c */ # include <stdio.h> int c, cc; main(){ printf ("getcharの実験 Ctrl + Z で終了\n"); while ((c=getchar())!=-1) {putchar('*'); putchar(c);} printf ("getchの実験 スペースキーで終了\n"); while ((cc=getch())!=32) {putchar('*'); putchar(cc);} } このプログラムの「while ((c=getchar())!=-1)」の「!=-1」って 「Ctrl + Z」をあらわしてるんですかね? それと、「while ((cc=getch())!=32)」の「!=32」ってのは 「スペースキー入力」を意味してるんでしょうか? いま、入出力を勉強中なのですが、これがよくわからなくて。 教えて下さい、お願いします。
279 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 14:02:32 ] 32はASCIIコードでスペース -1はEOFだろ。Ctrl-Zかどうかは環境による。
280 名前: ◆XD9CNUCqag mailto:sage [2009/03/10(火) 14:11:10 ] >>279 なるほど。 では、上のプログラムを数字の「1994」と入力したら終了するように 書き換えるにはどうすればいいのでしょうか? 自分では、「!=1994」と記述すれば問題ないだろうと思っていたのですが 実行してみると全く終了する気配がありません。 コンパイルも正常に通り、延々と入力させるプログラムに成り果ててしまいました。
281 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 14:15:22 ] 数値の1994と比較したいなら atoi(str) != 1994 まあ普通は strcmp(str, "1994") != 0
282 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 14:29:11 ] そのマジックナンバーは「悪い例」として何かに載ってるのかな・・・
283 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 14:32:40 ] >>249 からの流れか。 ってMSC5.1? MS-DOSの頃のじゃないのかそれw
284 名前: ◆XD9CNUCqag mailto:sage [2009/03/10(火) 14:49:37 ] >>281 なるほど、atoi関数使って整数文字列を整数値に変換してからでないと いけなかったんですか ということは文頭の#includeにstdlib.hを追加しないといけないのかな ありがとうございます名人 私は名人のようなPGになりたいです! >>283 はい、そうです。 調べてみたらPC9800シリーズに標準装備されてた頃のやつっぽいです。 まぁ、今のところ不自由はしていないので古くてもいいかなって思って 使っています。
285 名前: ◆XD9CNUCqag mailto:sage [2009/03/10(火) 16:04:26 ] あのーまたまたへたれ過ぎる質問で恐縮なのですが、 /* getchar.c */ # include <stdio.h> int c, cc; main(){ printf ("getcharの実験 Ctrl + Z で終了\n"); while ((c=getchar())!=-1) {putchar('*'); putchar(c);} printf ("getchの実験 スペースキーで終了\n"); while ((cc=getch())!=32) {putchar('*'); putchar(cc);} } この「while ((c=getchar())!=-1)」の「!=-1」の部分を「atoi(str) != 1994 」 に書き直すにはどうしたらいいんでしょうか? 自分でやってみたらえらい不細工な文になってしまってとても見てられたものじゃ なかったもので・・・ご教授願いたいのです
286 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 16:14:09 ] まずは1文字入力したら配列に追加していく仕組みを作ってみ 別関数にするのがいいけど
287 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 16:46:12 ] >>285 char str[1024] = {0}; int i = 0; とか宣言して str[ i++ ] = c; を追加
288 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 17:11:10 ] 「一文字入力したら配列に追加していく仕組み」は >>249 のリンク先のコードの中にもう入ってるんだけどねー ・文字=数値(ASCIIコード) ・文字列=文字の配列 質問者が↑をまだ理解しきれてないんじゃないのか あとatoi()をパスワード認証に使うのは同意できない パスワードも入力も文字列なのに、なぜ数値に変換する? 例えばもしパスワードが"1994"でなく"0083"だったら、入力が "0083"でも"083x"でも"83xx"でもOKになるんだけど、それが君の望む挙動なの? 自然に文字列どうし比較しようよ。「普通はstrcmp()」って書いてくれてるやん 『文字列は難しい』ってみんなが脅すから避けてるのかもしれないけど 『文字列(をうまく説明するの)は難しい』の意味だから気にせず勉強しろよ 理解できた後なら『俺どーしてこんな質問してたんだろ』ってなるよ、絶対
289 名前: ◆XD9CNUCqag mailto:sage [2009/03/10(火) 17:25:18 ] >>287 こんなERRがでちゃいました;; ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8960.txt gch2.C gch2.C(8) : warning C4135: conversion between different integral types gch2.C(11) : warning C4016: 'strcmp' : no function return type, using int as default gch2.C(11) : warning C4071: 'strcmp' : no function prototype given gch2.C(15) : warning C4016: 'getch' : no function return type, using int as default gch2.C(15) : warning C4071: 'getch' : no function prototype given gch2.C(18) : warning C4035: 'main' : no return value
290 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 17:33:23 ] 初心者で、関数の勉強中です。 テキストがカーニハン&リッチーなんですけど、ここでのハロープログラムは #include<stdio.h> main() { printf("hello,world\n); } と、とてもシンプルなんですけど、ネットを見ると #include <stdio.h> int main(void) { printf("Hello, World!\n"); return 0; } になっています。要するに #include <stdio.h> int hello(void); main() { hello(); } int hello(void) { printf("Hello, World!\n"); return 0; } というのが合わさったものと考えていいのでしょうか? 今コンパイラがある環境のPCからじゃないので、 上のプログラムでコンパイルされるかすら分からないのですが・・・。
291 名前: ◆XD9CNUCqag mailto:sage [2009/03/10(火) 17:36:06 ] >>288 全然理解仕切れていないのでもう少し文字列について辺りを勉強し直そうと 思います atoi()は、使っていて自分には荷が重い関数かもしれないと思ったので 「strcmp()」を使うことにしました。 まだ「strcmp()」も勉強不足で理解していないのでそこも勉強し直しの 範囲に入りますが。 今回、漸く自分の勉強課題が見えてきたような気がします。 >>288 さんの言葉を励みにして頑張りたいと思います。
292 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 17:54:12 ] C言語を始めようとかいうソフトでプログラミングしてコンパイルするじゃないですか そして完成したファイルがコマンドプロンプトで実行されるんですけど GUIってどうやって付けるんですかね、タダでやりたいんですけど
293 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 17:58:41 ] >>290 それでコンパイルは通る。けど、K&Rはそういう意図で書いてるわけではない。 本来mainの戻り値は必ずintなので、厳密に文法どおりなのはネットのほう。 (戻り値をintと明記し、引数をvoidと明示し、0を返す) K&Rのほうは警告オプション付でコンパイルすると 「戻り値の型が書いてないから勝手にintにするぜ」とか 「returnがないぜ」とか警告が出るはず。 K&Rはおそらく「一番はじめの入門だから、できるだけ例は短いほうがいいに決まってる」 ぐらいの気持ちでそう書いたんじゃないのか。信者には別の言い分があるのかもしれんが
294 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 18:03:27 ] K&Rを最初の本として選択するのはやめれ。 あれは他の言語をばりばり使っている人のための 「C言語仕様確認書」みたいなものであって 戻り値も知らないような初心者には難しい。
295 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 18:08:12 ] 一応、戻り値がないときはint, mainだけは戻り値を返さなくても良いと決まっていた…ような だから、間違ってはないはず… 記憶が曖昧なんであまり当てにしないでくれ 不親切なのには同意するが
296 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 18:13:43 ] そうだよ。 main は戻り値を返さなくてもいい。 なぜなら main が戻す値をどう扱うかが環境依存なので。
297 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 18:14:42 ] #include <conio.h> #include <stdio.h> int main() { int turn, i, ch; char pass[5]; for (turn = 0; turn < 3; turn++) { printf("パスワードを入力してください>"); for (i = 0; i < 4; i++) { ch = _getch(); if (ch == EOF) return 2; printf("*"); pass[i] = ch; } printf("\n"); pass[i] = '\0'; if (strcmp(pass, "1994") == 0) { printf("Ok\n"); return 0; } } printf("NG\n"); return 1; }
298 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 18:16:04 ] >>293-294 ありがとうございます。 学校で押し付けられたテキストがK&Rだったので・・・。 ネットを参考にしたら何か違うぞ?ってずっと思ってました。 main()は不可侵な関数だとてっきり・・・。 明日学校でガッツリと関数の勉強します。 K&R以外のテキストで・・・。 C言語って難しいっすね。
299 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 18:17:51 ] >>295-296 補足ありがとうございます。 戻り値とかもまだまだあやふやですが頑張ります。
300 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 18:18:56 ] 大昔はK&Rが仕様だったらしいな(知らんけど その後に仕様ができたんで、「K&Rが仕様どおりでない!」 ってのはある意味あってるけどお門違いかもしらん
301 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 18:25:18 ] K&Rが終わって 僕等は生れた K&Rを知らずに 僕等は育った プログラマになって 歩き始める オブジェクト指向を くちずさみながら 僕等の名前を 覚えてほしい K&Rを知らない 子供たちさ
302 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 18:37:04 ] int main(void)とかいちいちやるようなヤツのプログラムなぞその一行見ただけで他見る気なくす
303 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 18:41:13 ] それはない… 「いちいち」もなにもmainは一個しかないだろうが… 暗黙の宣言やらなんやらで警告出まくりなのに コンパイル通ってるんだからよしとするヤツのほうがきついわ
304 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 18:43:17 ] int main ( void ) main() void main() int main()
305 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 18:45:43 ] この話題定期的に出るな。規格準拠スレでやれ。
306 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 18:47:08 ] ごめんなさい
307 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 18:59:46 ] 石田晴久さん死去 インターネットの基礎築く www.j-cast.com/2009/03/10037360.html
308 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 19:17:14 ] 石田晴久といえばK&R
309 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 20:03:53 ] しつこいようだが、ANSI、ISO準拠の標準スタイルでは main関数への引数がないのであれば、C言語では int main(void) C++では int main() voidを書かなくて良いとのこと。 また、main関数はint型の戻り値とのこと。あくまでも準拠。
310 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 20:20:11 ] さらに、プログラムの開始はmain関数とのこと。その条件も含めて標準スタイルとのこと。 個人スタイルの押し付けをしていたら、キリがない。そこんと、よろしくー
311 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 09:26:13 ] ポインタ天国3を、ようやく私は理解することができた・・
312 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 10:46:43 ] main関数への引数を使う場合、int argc , char *argv[] というのも ANSI、ISOでは標準スタイルとして提唱している。ただし、 main関数内でその変数を用いていない場合、警告が出るので 何事も必要に応じて適切に。以上。
313 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 11:40:53 ] >int argc , char *argv[] めんどいからint ac,char *av[]って書いてる。 あとchar **argvって書くべきって意見も昔聞いた。
314 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 11:53:57 ] 4文字省略すると面倒じゃなくなるのか
315 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 12:03:58 ] > char **argvって書くべきって意見 覚えてる限りでいいからkwsk 俺も最初は**で書いてたけど、 mainの中で結局 for (i = 0; i < argc; i++) { argv[i]; } とかして[i]でアクセスするから、 *argv[]のほうが素直だと今は思ってる。
316 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 12:09:28 ] どっちでも同じ意味だからどっちでもいいと思うが。 データが連続していることを連想しやすいように[]を使うと言う意見もあるが、 argvのようにポインタの指す先が連続していて更にその中身のポインタが連続していることを表現できるわけじゃないし。 >>315 例えばstrcpy()のような関数を自分で実装するとしたら char * strcpy(char dest[], char const src[]);と書くの? 私は素直にchar * strcpy(char * dest, char const * src);と書くが。
317 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 12:30:38 ] > データが連続していることを連想しやすいように[]を使うと言う意見もあるが、 それはよくわからんが、 char *p;なら *(p + i)などという操作をイメージし、 char a[];なら a[i]という操作をイメージするという程度。 配列やポインタを渡す関数のパラメータは、 ポインタで統一して書いてる。 ポインタであるのに配列であるかのような書き方は嫌だ。 そういう意味では、mainのargvだけ特別扱いしてることになる。 同様の例でもmainじゃないとchar **ppとしてる。 mainのときは用途が>>315 に書いたように定型化してるというか、 argcを参考にargv[i]とするのを尊重してやりたいというか。
318 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 12:35:50 ] >>317 よく判らんのだが、まさかとは思うが*(p + i)なんて本当に書くの? argv[i]と書くのと同様に、件のstrcpy()の例ならsrc[index]という書き方になると思うのだけれど。 # 細かい言い訳は兎も角、main()だけは別扱いと言うことなら未だ理解できるが。
319 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 12:49:43 ] >>318 p[ i ]は *(p + i)のシンタックスシュガーだし
320 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 12:50:07 ] [i]でアクセスしたいってことは、 範囲がargcでわかってるからしたいこと。 そうでないときゃ、for (p = src; *p != '\0'; p++)としたりするでしょ。 あくまで[i]でやりたいならstrlenで一回文字列を調べてから、 for (i = 0; i < len; i++)とするでしょ。 上記のstrcpyだって、 char *strcpy(char *d, char *s) { while ( *d++ = *s++); return d; } ていうのもある。 長さを先に測りたい人は[i]すればよろし。 長さをパラメータで与えたい人は(int len)でも渡せばよろし。 ポインタでどうこうやるときは、つねに*(p + i)しなくたっていい。
321 名前:なんだかなぁ…… mailto:sage [2009/03/11(水) 12:53:46 ] >>320 いやだから、for (int index = 0; src[index] != '\0'; ++index)とは書かないの? なんで? >319の事実があるのに? 某組み込み系のガイダンスだとポインタ演算禁止なのに? 長さを先に測りたいなら[i]ってどんな理屈? 長さを先に測ってから*(p + i)しちゃいけないの?
322 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 13:10:39 ] つーか、オプション指定を避けるのにargv++することだって普通にあると思うがな。 >321もいい加減構うのやめとけ。
323 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 13:24:42 ] 好きにしろってことで終了
324 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 13:39:49 ] そうやって個々に任せた結果が使えないプログラマばかりが跋扈する現状というわけだが
325 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 13:41:36 ] そうやって自分のやり方をおしつけるから
326 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 13:59:10 ] 「前の会社ではこうやってたの!!」
327 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 14:14:09 ] 誰も>>320 のstrcpyに突っ込まないのはなぜ?
328 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 15:00:16 ] スレチだから
329 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 15:23:08 ] いちようMSDNでは↓のようになっとるの int main( ); または、次の引数も使えます。 int main( int argc[ , char *argv[ ] [, char *envp[ ] ] ] );
330 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 15:34:10 ] windowsでVisual Studio 2005を使用しています。 過去に作ったコンソールアプリケーションを編集しようと思ったのですが 不幸なことに.hファイルと.cppファイルを消してしまったために 編集ができない状態です。現状ではobjファイルが残っており、 デバッグコマンドなどでプログラムを動かすことはできるものの、 どうしても元のソースファイルを手に入れる必要があるのですが objファイルからcppファイルに逆コンパイルする方法はありますでしょうか?
331 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 15:51:29 ] >>330 ありません。
332 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 15:55:41 ] 大体どのコーディング標準でも 重要なのは一貫性を保つことであって、些細なことは個人の自由としている。 他人のコードに手を入れるときは、その人の流儀に従うべきで、 自分の宗教を持ち込んで後の読み手のリズムを狂わせてはいけない、とある。
333 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 16:26:23 ] >>330 objも消しちゃえば諦めがつくぞ すっきりしてまた一から出直そう
334 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 16:31:44 ] 逆アセならぬ逆コンパイラってないのかな。 objファイルはリンク前のコンパイル済みファイルなので 逆アセでもできそうな気がするけど。
335 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 16:39:07 ] >>331 ,333 どうしても諦めがつかなくてorz >>334 確かに、逆コンパイルというと語弊があったかもしれません… なんとか逆アセンブル出来ませんかね?orz
336 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 17:15:26 ] >>335 逆アセンブルならできるよ、まぁお前に読めるとは思えないけどさw いっぱいあるから探してみなよ 確実に1から書き直したほうが早いだろうが
337 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 18:03:23 ] 自分が書いたコードなら関数名見れば大体流れが読めるはずだしな
338 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 18:27:51 ] >>332 あまりに酷いコードの時はそうも言ってられないw
339 名前:デフォルトの名無しさん [2009/03/11(水) 19:45:07 ] >>335 逆アセンブラならvisual studioについてるよ。
340 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 22:44:10 ] 寧ろディスクから消したのが最近ならサルベージしてみてもいいかも。 案外、オートバックアップのサーバ上に残っていたりしてw
341 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 09:08:14 ] Linux環境においてLL言語、シェルスクリプトなどでちょっとしたことをするのには、適切と言われていますが C言語では、そういったお手軽なライブリなどは、整備されていないのでしょうか? LL言語、シェルスクリブトが適している分野をCで書くのは、どうなんでしょうか? Cに偏った使い方をするなら、binコマンドなどのcoreutiltyのmanやソースを読んで、巧みに使うのがいいんでしょうか? 住めば都で慣れれば、C言語での保守も苦では、なくなるものなのでしょうか?
342 名前:デフォルトの名無しさん [2009/03/12(木) 10:57:37 ] データのスムージングを行う処理を作りたいんですけど、 Savitzky-GolayアルゴリズムのCサンプルコードとかないですか?
343 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 12:19:52 ] >>342 NumericalRecipesにある。 ttp://www.nrbook.com/a/bookcpdf/c14-8.pdf 尤も、これ見ただけで実装できるかどうかは知らんが。
344 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 14:11:05 ] 初心者なのですが、ファイルからテキストを読み込んで一番大きい数字を発見したいです 43,2,21,23,みたいなテキストなのですが、質問があります ・テキスト中のスペースは無視されるのですか? ・メモリについてmallocとか全くわかってないのですが使わないとかなりヤバイですか?
345 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 14:29:37 ] >>344 ・無視されるように読めば無視される。 Ex.:scanf()系, atoi() ・使わなくてもできなくはないが、どっちみちポインタの扱いには慣れが必要なので、そういう意味ではやばい。 つーか、課題か何かでなければ言語の選択の段階で間違っている。
346 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 14:33:55 ] 実際はC#でするつもりなんですが何でするべきですか?CとC#しか知りません
347 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 14:45:09 ] C/C++は他の言語に比べて文字列解析が簡単ではない C#なら正規表現が使えるからかなり楽になると思うが 一般にはこの手の作業にはスクリプト系の言語がより向いている まあ、CとC#の選択なら、最初からC#のスレで聞いとけって話だ
348 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 14:46:58 ] すみません Cでも正規表現使えると思ってますたw ありがとうございました
349 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 14:55:57 ] >>348 Cの場合、C#みたいに標準で用意されていないの。
350 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 14:59:55 ] 何かインクルードしたら使えるとか?
351 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 15:01:12 ] >>348 今できたけど…「 ./a.out < ファイル名 」で使ってみて #include <stdio.h> #include <ctype.h> int main() { int c; int max = 0, num = 0; while((c = getchar()) != EOF){ if(isdigit(c)) num = num * 10 + c - '0'; else { max = (num > max) ? num : max; num = 0; } } max = (num > max) ? num : max; printf("max = %d\n", max); return 0; }
352 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 15:15:02 ] できればC#に組み込めるようにして頂きたい^^; 適当にコピペしたらインクルードやgetcharが使えなかった
353 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 15:25:25 ] ここはC/C++スレだ 移植は手前の仕事
354 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 15:28:52 ] フヒヒw
355 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 15:43:03 ] wwwwwwwwwwwwwww
356 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 15:46:18 ] サーセン
357 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 19:42:09 ] ソースコード書くなんて、下っ端の仕事
358 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 19:46:46 ] ソースも書けない糞上司
359 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 19:47:38 ] ソースしか書けない専門学校卒
360 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 19:51:35 ] ソースも書けない落ちこぼれに言われてもなー
361 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 19:59:11 ] 高卒の叩き上げが最強ってことで、ゆるして
362 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 20:19:56 ] 就職||卒業出来ないからって荒らすなよ。 >>342 numerical recipes in CやC++に載ってる。C++もベタに書いてあるので、 ++の意味はほとんど無いw あとはqtiplotだっけ? originのfree implementationの ソース読むとか、MSDNにも解説があるな。しかし簡単な式だから、すぐ作れるだろ 携帯からなので、PCでググればもっと探せそう。
363 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 13:46:55 ] >>362 >343 携帯だとすぐ下のレスも見られないのか? つーか、元質はCだと書いているのさえ見えてないのか。
364 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 18:01:41 ] >>363 >>343 はPCのFoxit readerでさえ読み込めないんだけど? どうせ貼るなら、こっち貼れ ttp://www.fizyka.umk.pl/nrbook/c14-8.pdf
365 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 18:55:28 ] >>364 >Foxit readerでさえ 「でさえ」? そりゃ Adobe Reader で読めなかったときに使う言葉だろ。
366 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 19:15:04 ] >>365 >>363 は携帯で読めないのかって書いてるじゃん。 まあもちろん携帯のadobe readerでも読めない訳だが。
367 名前:343 mailto:sage [2009/03/13(金) 19:21:33 ] >>364 普通にIE+AcrobatReaderで見えるけど。怪しげなクローンより本家の方がいいと思ったんだけどな。 # そして私は>363ではない。
368 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 20:26:31 ] PCのAcrobat Readerでも開かない。 なんか、変なプラグイン入れろって出る。 IEからでも。
369 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 03:35:05 ] 暗号化してあるみたいだね。headerがどうたらって出た どうせnumeric recipiは信用できないからいいけど。
370 名前:デフォルトの名無しさん [2009/03/14(土) 18:25:38 ] 作ったソフトをオープンソースで公開しようかと考えているのですが、 ネット上のサンプルをコピペしたコードが多々あって、勝手にオープンソースにしていいのかわかりません。 ライセンス表記がされていないものも多いので確認のしようがないのです。 こういう場合でも勝手にBSDライセンスとか付けて配布してしまっていいのでしょうか? 出所はもちろん明記するつもりですが。
371 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 18:31:47 ] バレてトラブルになった時の対処ができるなら。
372 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 18:55:18 ] コピペでオープンソースですか、笑っちゃいます。 コードを書けないのなら無茶な事しない。 ネット公開されてれば、使ってよいの判断ですが、 それでも、自身でコードを書き直して公開するのが本当でしょう。 動けば良いだけのコードをオープンソースですか、違うでしょ
373 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 21:00:58 ] そうですよねぇ。 でも反面、せっかく既にあるコードまで自分で書き直さなきゃならないのか?とも思うのです。 しかもサンプルの書き方が一番スマートなのに、あえて別の書き方をするのも無意味に思えてなりません。 サンプルを利用して書くのは普通のことだと思いますが、皆どうしているのでしょうか。 とりあえず今回はクローズドでいきます。ありがとうございます。
374 名前:デフォルトの名無しさん [2009/03/14(土) 21:54:26 ] >>370 もともとライセンス表記もせずパブリックドメイン同然で公開しているコードなら コピペのままではなく、君がそのコードを理解して、作りなおせば問題ないだろ。 出所も明かす必要無し。 コードって作り直せないくらい長かったり何回だったりするの?
375 名前:デフォルトの名無しさん [2009/03/14(土) 21:56:48 ] 何回→難解
376 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 22:21:17 ] >>374 いや逆に、数十行程度のサンプルが多くて直しようがないんです。 そのまで洗練されているのでいじると無駄にこんがらがります。 変数名やカッコの書き方を変えるといったしみったれたことしかできず…。
377 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 22:40:02 ] モジュールを丸ごとじゃなくてサンプルコードか・・・ サンプルコードをかき集めた場合は、いろんな流儀で書かれているわけだから、自分の流儀に書き直したほうがメンテしやすくなるぞ。変数名や括弧を直すだけでも効果的だ。 そうすれば改良できるところが見えてくるぞ。
378 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 22:44:48 ] なるほど、書き方は自分流に統一した方がいいですね。ありがとうございます。 小さいところでも直していけばいいのですね。そういう方向でいってみます。
379 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 22:59:23 ] つーか、数十行程度ならサンプルを理解した上で、自分で書けばいいじゃん。 その程度だったら記憶を手繰りながら書けるべ。
380 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 23:05:01 ] その二度手間が無駄って話じゃねーの
381 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 23:07:19 ] Linuxなんかは、著作権回避のために書き直しとかしてるだろ?
382 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 23:09:05 ] コピペしただけでは解ったつもりで解ってないことがほとんど。自分の手でコードを書かないと理解できない。それは無駄ではない。
383 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 23:18:43 ] せっかく再利用を前提としてソースコードを書いても ほとんど再利用されることはない 参考にすることはあっても
384 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 23:21:50 ] それは再利用性の設計が不十分なんだよ。
385 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 23:26:41 ] 再利用されることが無いのに再利用性の設計なんてそもそも不要だし
386 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 23:35:47 ] 再利用なんて、幻想だよ。 結局、作り直して使ってるだろ
387 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 00:52:54 ] 再利用性なんて、無駄なコード入れて行数増やすための方便になってるからなあ
388 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 01:06:40 ] まだ行数とか言ってんのかこの業界は
389 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 01:16:57 ] リファクタリングしたら負けかなと思ってる
390 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 02:17:37 ] わかりやすいコード記述を心掛け且つ 流用者が理解するのを諦める難解な操作を 程よく織り込むのがプロの仕事だ
391 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 02:30:08 ] チンケなプロだなぁ
392 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 08:58:28 ] 自分で恰好良く書いたつもりが 「何それ?だっせーソース」 とか笑われたことがあるんだろ
393 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 11:41:41 ] libファイル配布
394 名前:デフォルトの名無しさん [2009/03/16(月) 14:12:14 ] あるテーブルより、KOJIN_ID(数値型8桁)を一旦ホスト変数H_KOJIN_IDに入れ それを11桁の文字型として出力しなければいけないのですが(余った桁はスペースで埋める) 下記のようにsprintf関数を使ってH_KOJIN_IDから、ファイル書き出し用構造体outの項目KOJIN_IDに セットするときに、現状のままだと余った桁に0が入ってしまいます。 データセット部 sprintf(out.KOJIN_ID,"%11.11ld",H_KOJIN_ID); 余った桁に半角スペースが入るようなsprintf指定方法はありませんか?
395 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 14:24:22 ] "%11d"
396 名前:デフォルトの名無しさん [2009/03/16(月) 14:43:45 ] %11dで試しましたが0で埋められてしまいます。
397 名前:デフォルトの名無しさん [2009/03/16(月) 14:46:47 ] 失礼しました! 間違えて%11.11dで試しましたが、%11dだけにしたら できました。 ありがとうございました。
398 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 14:51:24 ] >>394 マルチすんなゴミ
399 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 00:50:51 ] C++の書籍を買おうと思っているのですが、大体何円くらいなんでしょうか? 教えてください
400 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 00:55:30 ] そんくらいamazonで調べろよ
401 名前:デフォルトの名無しさん [2009/03/17(火) 00:56:09 ] Cの書籍は何円ぐらいしたよ? だいたい相場はかわらんさ
402 名前:デフォルトの名無しさん [2009/03/17(火) 01:00:51 ] >>399 1800-4500円
403 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 02:17:46 ] >402 ただし、○冊セットの中の1冊のお値段、というオチが付くことも多そう。
404 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 02:49:33 ] C++のセット本なんかあったか? 見た事無いが >>403 不味い本買ってんじゃねぇか?
405 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 03:12:49 ] 週刊C++、創刊号は980円
406 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 03:32:14 ] それを言うなら、創刊号1800円で、二号から4500円だろ…
407 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 04:00:40 ] 3号は9450円か?
408 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 06:25:56 ] まず創刊号の付録を教えてくれ
409 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 06:27:57 ] VC++EEとGCCの豪華セット
410 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 06:30:29 ] ↑エラー起きた場所が分かりやすいように、AAに変換してしくれる機能搭載
411 名前:403 mailto:sage [2009/03/17(火) 10:03:10 ] >404 あー、C++であったかどうかは分かんない。 でもVC++とかだと何シリーズか見かけた気がする。
412 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 16:30:39 ] 毎週付録のモジュールをリンクしていくことでオリジナルIDEが完成
413 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 18:27:14 ] //////////////////////////////// a.h template<typename T> class test { public: test(); void _inc(T n); void _dec(T n); private: T m_n; }; //////////////////////////////// a.cpp #include "a.h" template<typename T> test<T>::test() : m_n(0) { } template<typename T> void test<T>::_inc(T n){ return m_n++; } template<typename T> void test<T>::_dec(T n){ return m_n--; } test<int> aaa;
414 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 18:28:32 ] //////////////////////////////// main.cpp extern test<int> aaa; #include <stdio.h> #include "a.h" void main(void){ aaa._dec(1); } externで宣言してるのにリンク時に未解決になります。 どこに誤りがあるのでしょうか?
415 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 18:32:13 ] テンプレートは実装もヘッダに入れろ そういうもんだと思っておけばいい 詳しく知りたければ export キーワードあたりで自分で調べな
416 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 18:40:22 ] >>415 ありがとうございます 無事解決しました
417 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 18:50:20 ] なんでexportなんてキーワードがワザワザ必要な文法になったの? なにもつけなくても実装が別ファイルにあるなら、それはそれで問題ないのじゃね?
418 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 18:55:14 ] >>417 宣言が必要なのよ。
419 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 19:09:02 ] この場合、明示的にインスタンス生成すれば済む気が。
420 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 19:15:11 ] C++0x に期待。
421 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 19:30:18 ] C++0a
422 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 19:32:53 ] >421 ありそうで困る
423 名前:デフォルトの名無しさん [2009/03/17(火) 19:33:38 ] 実装部分が別ファイルだと、コンパイル時にTが実際になんなのか分からないから、 実装部分は、コンパイルできなくない?リンク時に、改めてコンパイルし直すのか? exportって、どう言う仕組みで実現してるの?
424 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 19:35:55 ] 16進にすると許容範囲内に見えるから怖い
425 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 19:36:16 ] >>423 > リンク時に、改めてコンパイルし直すのか? そういうこと。 それやってというお願いするキーワードがexport。 まあg++とかVC++とかの有名どこが無視しているから、事実上死に設定だけど。
426 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 23:54:31 ] >>421 2010年になると言うことかw
427 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 23:56:03 ] >>413-414 explicit instantiationを知らないなら テンプレート関数の明示的インスタンス生成 - akihiko’s tech note d.hatena.ne.jp/aki-yam/20081129/1227982516 ここが分かりやすいよ。必読。
428 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 00:53:11 ] >>421 C++0xa
429 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 07:15:29 ] 記述場所が関数内かグローバルか判るコンパイル定数無い? GCC 3 で
430 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 07:53:28 ] ttp://seclan.dll.jp/c99d/c99d07.htm#dt19990516 前定義識別名 __func__
431 名前:!=429 mailto:sage [2009/03/18(水) 14:53:38 ] >>430 へー そりゃ知らんかったな
432 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 17:00:28 ] VS2008 C++について質問です。 構造体の配列に文字を格納したところ、デバッグでみると その場所+4つ先に格納されているのですがどういったことなのでしょうか。 以下は新規にプロジェクトを作成し、構造体とそれに代入しただけのソースの一部です。 struct TEST{ char testes[10]; }; struct TEST ttt; [STAThreadAttribute] int main(array<System::String ^> ^args) { ttt.testes[0]='A'; // コントロールが作成される前に、Windows XP ビジュアル効果を有効にします Application::EnableVisualStyles(); Application::SetCompatibleTextRenderingDefault(false); // メイン ウィンドウを作成して、実行します Application::Run(gcnew Form1()); return 0; } 上記の例だと[0]にAが入るはずなのですが、ブレークポイントを 置いて、デバッグでみると[4]にAが入っているように見えます。 実際は[0]にAが入っているので、動作については問題なかったです。
433 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 17:44:58 ] まさかとは思うが、リリースビルドでデバッグしているとか、デバッグビルドに最適化を指定しているとか、 リビルドしてみてないとか言わないよな。
434 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 18:07:27 ] >>432 C++とC++/.CLIは名前が似てるだけで別言語。
435 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 18:16:53 ] >>434 でも質問の内容自体はVisual C++固有のことだから、 もし誘導するとしたら、Visual C++かVisual Studioスレがふさわしいと思う。
436 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 18:32:57 ] >>430 ありがとう。 でも、コンパイル"後"定数に成るみたいで微妙に目的と合致しませんでした。
437 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 20:04:24 ] BorlandC++Builderで以下のCプログラムを記述したところ 式の構文エラー(関数 main )と出ます。 #include<stdio.h> int main(void) { int english; printf("点数を入力してください\n"); scanf("%d",&english); printf("英語 %d点\n",english); if(english=>80) { printf("良くできました!"); } return 0; } if文を用いる場合は必ずelseでそれ以外の時の処理を書かなければならないのでしょうか?
438 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 20:07:10 ] >=
439 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 23:37:58 ] BASICでは>=でも=>でもOKだから、間違えちゃう人多いのかも。 他にも==を=と間違えたりべき乗に^を使っちゃったり。 BASICを習得してるといろいろ困るよねオマンコ
440 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 00:15:49 ] >>438 数学では >=は 大なりイコール って発音するじゃん。それで覚えれば大丈夫。
441 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 00:19:51 ] べき乗に^使ってしばらく悩む事あるな powとかすぐ出てこねーよw
442 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 00:22:17 ] /= を否定と間違えて使いそうになったりね
443 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 00:27:05 ] >>441-442 プログラムしばらくやってるやつは、悩むところじゃないだろ。 プログアム初心者は、悩む以前に分からない部分調べるか、誰かに聞くだろ。
444 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 01:56:47 ] >プログアム初心者は、悩む以前に分からない部分調べるか、誰かに聞くだろ。 そして>437にループ
445 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 09:19:46 ] PHPでは=>は矢印
446 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 17:37:43 ] >>440 数学に、そんな記号ない。縦に並べたのなら知ってる
447 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 17:41:56 ] じゃあやりなおし 数学では ≧は 大なりイコール って発音するじゃん。それで覚えれば大丈夫。
448 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 17:50:53 ] そもそも数学で子供の頃から慣れ親しんだ記号と 似ているようで違う表記をするために間違えるのだから、 それは意味ないのじゃね?
449 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 17:58:50 ] 声に出して確認しろってことだろ
450 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 18:03:35 ] 自分は>=と打つときに、心の中で「大なりイコール」と諳んじてるから まず間違えないな
451 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 18:10:04 ] 俺もBASIC出身だから=>やったことあるわw
452 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 18:22:15 ] BASICやった後、Cに戻った直後は ==と書くべきところを=にして悩む 少しリハビリすると大丈夫だけど
453 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 18:44:24 ] というか、≧ を口に出して読んだ記憶がないな だから「大なりイコールって考えればわかりやすいでしょ」といわれても 頭の中でもそんな風に考えたことないし・・って感じ
454 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 19:09:25 ] >>453 は≧を大なりイコールって読むことを知らなかったってことか? そりゃ問題だな。
455 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 19:21:11 ] greater or equal って読んでてごめんね
456 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 19:23:40 ] greater than or equal to と言うのが正しい
457 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 19:26:30 ] JISとかで読み方決まってないのかのう
458 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 19:26:53 ] gte
459 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 19:48:21 ] > gt < lt >= ge <= le == eq != ne
460 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 20:52:55 ] >>453 見よ、これがゆとり教育の被害者である
461 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 21:22:32 ] larger than or equal toって読んでた
462 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 21:54:23 ] 普通は以上未満つかうだろ
463 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 22:05:20 ] 以下<−>以上 未満<−>???
464 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 22:06:27 ] より小さい<−>より大きい
465 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 22:06:44 ] より大きい
466 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 22:06:54 ] 超過
467 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 22:07:32 ] {○, ●}×{→、←}
468 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 22:10:47 ] ○→) ●→]
469 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 23:01:44 ] >>463 反対の意味で使ってるなら間違い
470 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 23:44:36 ] 同じ意味で使ってるなら間違い
471 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 23:47:10 ] どっちの推測も間違い
472 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 04:16:01 ] この議論に意味は無い
473 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 13:23:59 ] それ以外ネタが無い
474 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 21:28:22 ] 年度末の一番忙しい時期に、仕事以外で頭を使いたくない
475 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 22:24:42 ] ここに言う意味が無い
476 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 00:02:16 ] >>459 FORTRANはすっこんでろ
477 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 00:07:15 ] おっとtestコマンドの悪口はそこまでだ。
478 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 02:07:37 ] 『C++はCの完全な上位互換を失った』と見るのですが 具体的にC言語ファイルをそのまま.cppにしてエラーが起こる例ってどんなのあります? 例えばmain関数内でmain関数を使うとエラーになるようですが。(でも常用外だから普通は問題にならない) (1) C++ではエラーが出る (2) Cで稀に使われるが、C++で別の動きをする (想定外動作) 無理して作れば色々出てきそうですが・・・・
479 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 02:19:01 ] >>478 main(c){}
480 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 02:23:36 ] 一番よく指摘されるのは void*をキャストする必要があるかどうかだろ。 char *p = malloc(...); が通るかどうか。
481 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 02:25:31 ] 変数名にthrowとかusingとか使ってる場合など。 C++が作られていくときに、新たなキーワードの導入は常に強い反対があったと聞く。
482 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 02:32:45 ] 複合リテラルとかは?
483 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 02:33:38 ] >>478 C99のことだと思うけど可変長配列とかC++に無い あとintの省略もできないな
484 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 02:33:56 ] newとか多いよな。 oldとnewの両方を一時変数名にするとか。
485 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 02:38:49 ] >>478 extern のついてない const なグローバル変数を定義して ほかのソースからextern宣言して見てるとき
486 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 16:49:25 ] でも俺としては例え過去のとかぶっても予約語はしっかり作って欲しい。 無理に予約語を増やさないようにするあまり、同じ予約語で少しずつ違った意味に使うの多くない? (例 static, template)
487 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 18:35:34 ] D言語でも使ってろよ
488 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 19:30:32 ] >>478 C++ の規格の付録 C にまとめられてるよ
489 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 09:24:50 ] char hoge[4] = "ABCD"; // これがエラーになるかどうか
490 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 12:37:17 ] 構造体タグの名前空間が独立していない。 struct foo {int bar;} foo; // 例えばこれがエラーになる
491 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 08:18:48 ] >>489 char hoge[4] = "ABCD"; がC言語だとhoge[0]='A',hoge[1]='B',hoge[2]='C',hoge[3]='D'でC++だとエラーになるんだっけ? char hoge[5] = "ABCD"; の場合はCでもC++でも同じhoge[0]='A',hoge[1]='B',hoge[2]='C',hoge[3]='D',hoge[4]='\0'だよね。
492 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 18:04:39 ] C++のお勧めの書籍教えてくだされ
493 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 18:05:16 ] Modern C++ Design 超お勧め。っていうか、一度読んでみると歯が全部抜け落ちる。
494 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 18:07:30 ] うむ、サンクスbb 早速見てくる
495 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 18:09:17 ] 入門者向けの書籍教えてくだされ
496 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 18:12:19 ] 入門者向けなら、C++ Coding Standards。 Effective C++とかExceptional C++の最新の要約が詰まってる。 わからない場所=自分の理解が足りていない場所 という今後の学習指針にもなる。 読むと腸内がすっきりする。
497 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 18:21:11 ] サンクス とても参考になります やはり値段が高いほうが内容も詰まってるんでしょうね
498 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 18:39:57 ] Effective C++ 原著第3版 amazonで感想を見てみたんですけど・・・・ 中級者以上を対象としているみたいな感じなのがありました 本当にこれで大丈夫でしょうか・・?
499 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 19:03:58 ] >>491 ==
500 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 19:07:13 ] >>498 基本構文だとか継承だとかテンプレートの使い方だとか そういう基礎的なのは習得してる人向けっていう程度 だが、そんなに難しくはないよ コード付でかなり親切な説明がされてるし
501 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 19:08:34 ] Effective C++とかは中級者向けじゃないよ。 入門書の次に読まなければならないレベルの本だよ。 この本を読まずに「中級者」を名乗ること自体がおこがましいよ。 この本を読んだことのない人は 個人的なプログラムしか組む資格がないといってしまっていいくらいに 基本的な事柄について書かれた本だよ。
502 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 20:29:39 ] Effective C++か。わかるわかる。 でも初心者レベルではないと思う。 「中級者になりたい初心者なら必読」という意味では初心者向けだな。 入門者の場合は意味不明だと思うが、初心者なら説明が丁寧でたとえがすばらしく分かりやすいからオススメ。
503 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 20:32:17 ] 10年間Cを書いてきたシニアエンジニアが独力で半年間C++を検討した結果が全て、 EffectiveC++に(より洗練された形で)書かれていたと言っていた。 要は、EffectiveC++を最初から読んでいれば半年間無駄にしなかったのにね、と。
504 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 20:39:53 ] Cのファイルアクセス程度までしか勉強していないようなヤツでもわかるものかしらね
505 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 20:40:06 ] 中級者なら知ってて当然のことが書いてあるだけで、 読まなくても別に中級者になれるけどな
506 名前:503 mailto:sage [2009/03/24(火) 21:59:39 ] >>504 >Cのファイルアクセス程度までしか勉強していないようなヤツでもわかるものかしら C++の入門者だから無理じゃないかな? クラスって何よ?継承って何だよ?テンプレートとは??? っていう感じになっちゃってまともに読み進められないと思う。 >>505 確かにそう言うことになるな。 別に全員が読んでるわけじゃないだろうし。
507 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 22:45:56 ] Effective C++はC++を真面目にやろうと思ったら必読書。 読んで理解できなければ、理解できるようになってからまた読めばいい。 よって常にお薦め。 いつまでも理解できないならそいつはC++に向いてない。
508 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 23:00:50 ] Effective C++は中級者なら知ってて当然の知識集だから、 この本自体は中級者向けじゃないよ。 この本に書かれている知識を習得していない人は 中級者じゃなくて単なるカスプログラマだから。 何度も書くけど、入門書を読んだあとに読むべき本だよ。
509 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 23:09:56 ] 口悪いの多いな。
510 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 23:22:00 ] 件のEffective C++自体、結構口の悪い文章だから。
511 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 23:28:42 ] 2chだからだろ。 日常生活なら滅多に使わない侮蔑を含む日本語が飛び交う場所だからな。 むしろこのスレはまだマシな方じゃね?
512 名前:504 mailto:sage [2009/03/25(水) 00:36:26 ] >>506 クラスとか継承はJavaのさわり程度ならやったので意味だけならなんとか
513 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 00:43:42 ] Effective C++はC++特有の仕様に触れることもあるから 少なくとも初心者向けのC++解説本は読んでることが前提。 ちゅか、Effective C++を読めば、C++のプログラムに Cのテクニックはあまり(ほとんど?)役に立たないことがわかる。 Cの知識は無用ともいえる。
514 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 00:45:12 ] >>513 Cで培った危険を予知する感覚というか知識は必要じゃね? まあC++のソースを書いていてprintfなんて書こうものならもうそいつのソースは信用できないな。
515 名前:デフォルトの名無しさん [2009/03/25(水) 00:46:23 ] >まあC++のソースを書いていてprintfなんて書こうものならもうそいつのソースは信用できないな。 なんてことを言う奴は信用しないことにしている。
516 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 01:00:11 ] coutなんか使わなくてもprintfで十分足る(キリッ
517 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 01:09:59 ] printfは型安全を無効化するっていうことを理解して使う分には問題ないんでないの? サッターは「安全装置のない車を運転するほうが楽なのといっしょだ」みたいな主旨のことを書いてた。
518 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 01:27:36 ] fgets()でstd::stringに読み込めないのは不便だな
519 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 01:35:46 ] シフト演算子オーバーライドして返り値への代入を繰り返す「どうだ凄いだろ」的な構文でなければ C++内の printf は早々に駆除されてたと思う。 初めて見たとき もうちょっとマトモナやり方があるだろう?と感じた。
520 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 01:40:01 ] でも吐き出すコードはそこそこまともじゃない?
521 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 01:43:16 ] CにないC++の機能 たとえばClassとかSTLとかは使わにゃ損々なんだが iostream系のようにCにもある機能は 別に置き換えなきゃならんわけじゃないし
522 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 01:46:49 ] まあiostreamは単なる多重継承の技術的デモンストレーションだという 極論まであるし遅いしだな 時と場合に応じて使い分ければ良い
523 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 02:54:02 ] 可変引数のもたらす潜在的なセキュリティホールがむにゃむにゃ
524 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 08:12:59 ] >>519 返り値への代入を繰り返すってなに?
525 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 09:20:24 ] >>524 ((std::cout << hoge) << moge) 代入じゃねえな。 他は >>519 に同意。 特にシフト演算子のオーバーライドとか、やっちゃ駄目な部類。
526 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 12:39:57 ] 初期のC++には、C++のライブラリは、ほとんどiostreamしか付いて無かった (stringや複素数はあった)。だからC++の基本機能や、言語概念の説明といった役割が大きかった。 その後、多重継承が追加されて、書式付き入力ストリームと出力ストリームを結合させるなど、 仮想基底クラスの用法を示している。そういう歴史的経緯が判らないと、 微妙に感じるかも知れないけど、自分定義の型拡張やコンパイル時のチェックも効くし、 長く使ってると愛着も湧いたりする。better Cとして使ってる人には不評みたいね。 カレー南蛮そばが来ないので、長文してしまった。
527 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 13:36:58 ] 不評っつーか、わざわざ使うまでもない
528 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 13:47:06 ] わざわざも何も、それが標準的な出力手段なんだが?
529 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 14:28:01 ] オーバーライドとオーバーロード混ざってる悪い子はいねがー?
530 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 14:53:12 ] 最初から可変長テンプレートを入れてれば、 std::cout(hoge, fuga, std::endl); とか書けたのにな。 だが、D言語では Stdout(hoge)(fuga).newline;
531 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 15:15:07 ] オレオレフィルタとか書くときはboost::iostreamsを使う
532 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 15:58:48 ] >>526 じゃあもう要らないですね。obsolete にしましょ。
533 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 17:48:52 ] OKです
534 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 18:12:00 ] いくら不要になったといえども 作ってしまった過去の資産()があるから削っちゃだめだろ iostream
535 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 18:32:28 ] 負債というべき