[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 05/09 12:15 / Filesize : 193 KB / Number-of Response : 819
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

スレを勃てるまでもないC/C++の質問はここで 8



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 ]
負債というべき

536 名前:デフォルトの名無しさん [2009/03/25(水) 20:09:12 ]
浮上

537 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 20:18:28 ]
ぶっちゃけ、iostreamは、C++の入門書で使われている以外で
使われてるのを見たことない。

538 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 20:45:35 ]
C++ Coding Standards 第98項
「printf系の脆弱性は、本書執筆時点でも尚、深刻なセキュリティ問題である。」
(中略)
「vararg以外の方法で可変引数をサポートする型安全なライブラリを利用しよう。
 例えば、[Boost]のformatライブラリがある。」

Boost C++ Libraries 第2版 p.69
「もしもプログラマが間違った書式指定をしてしまったら(中略)、
 printf関数は(中略)、もう何がおきるかわからないトワイライトゾーンへ突入してしまいます」

などなど。


539 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 20:46:25 ]
>>530
俺もDさわってみて、何でC++には可変長引数が配列で取れないのか非常に不思議になった。
すごい便利なんだよな。D1をバックポートしてほしいぞ。

540 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 20:49:09 ]
型安全を無視するつもりなら、最初からC++を使う意味ないんだよ。
別の言語を使ったほうがいい。

目的ごとにぴったりあう言語というものは違うのだから。



541 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 20:50:45 ]
>>538
間違ったプログラムであの世へ行くのはprintfに限らない
間違わなければいいだけ

542 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 20:51:43 ]
>>541
君にはデスマーチとかアジャイルプラクティスとかを読む権利をあげますw

543 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 20:54:24 ]
>>541みたいな人はC++使う価値ないんだって。
C++は厄介ごとはコンパイラにまかすという方針なんだから。
プログラマがすべてを制御できる自身があるなら
Cの方がよっぽど単純で軽快だ。

C++を選択することが最初から間違っている。

544 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 21:03:05 ]
Effective C++にも「FORTRANかよっ!」って書いてあるな。
自分はメイヤーズ先生やサッター先生の言うことに従うわ。
この板にそれ以上の能力の人間が来ているとはとても思えないから。

545 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 21:04:01 ]
printfで出会った不具合といえば、
クラスが内部で規定してる構造体に型オーバーロードしたメソッド書いて、クラスの返り値としてその構造体をprintfに食わせたら、
オーバーロードが働かなくて構造体そのものを食いやがった事がある。アドレスぽいものが表示されんの。
表示系だから良かったけどいやなバグだった。
コンパイラはVC9EE。

546 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 21:09:15 ]
VS2008のRelease Modeでは出力と入力の速度が逆転するな

kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9000.txt

547 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 22:16:49 ]
printf系関数はtypedefされた型には無力なのがダメだね

548 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 22:24:33 ]
Boost.Spirit.Karma.formatを使おうぜ

549 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 06:38:13 ]
入出力先と書式化の癒着関係を美しく分離する術を思いつけなかった
可変長テンプレートマンセー君レベルが当時の最先端だったって事か

550 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 13:37:06 ]
>>543
>>>541みたいな人はC++使う価値ないんだって。
間違いを犯す莫迦にこそ価値がないのでは?

>C++は厄介ごとはコンパイラにまかすという方針なんだから。
いいえ。
コンパイラが余計なことをしないか、常に心配しながら
コードを書き連ねることを
プログラマに強いる方針です。



551 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 14:36:00 ]
間違ったプログラムを出来るだけコンパイルエラーにしようってのがC++の方向性なんじゃないの?

プログラムの知的能力に関わらず、タイプミス等の軽微なミスは起こりうるものだと思うけど。

552 名前:551 mailto:sage [2009/03/26(木) 14:37:29 ]
プログラムの→プログラマーの

553 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 15:52:50 ]
そうだよ。間違いを犯しやすい人ほど高級言語が必要になる。
コンピュータを完全にコントロールできる人間は高級言語に頼る必要はない。
高級言語は人間のミスを吸収するために余計なコードを山ほど作るからね。

C++はCよりも遅いしコードも大きいし規則も山ほどある。
その規則の多くはコードを早くしたり小さくしたりするためのものじゃない。
単に間違いをコンパイラが見つけやすくするため。

間違いを犯さないプログラマには無用のものばかり。

554 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 16:59:10 ]
>>その規則の多くはコードを早くしたり小さくしたりするためのものじゃない。
>>単に間違いをコンパイラが見つけやすくするため。

そうか?
コンパイラにとって正しいけど、プログラマの意図通りにならないことは
C++の方が多いのでは?

555 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 17:06:14 ]
えーと、どこから突っ込めばいいの?C++が目指したのは基本的に効率だよ。
それは速度とコーディング効率で、プログラマの能力と方針にあわせて、
どちら側を重視する事も出来る。充分に熟練していれば、他の言語よりも高い
バランスで、両立する事も可能。それは全ての言語の、全てのメリットを上回る
意味では無いけどね。現実には機能を散漫に付けすぎて、高いバランスどころの
騒ぎじゃないけど、目標としてはそんなところ。

>>554
どうも設計者が平均的プログラマの能力等を、考慮に入れなかったのでは無いかと予想。
自分で設計しといて、ベテランしか使えねーとか言ってるしねぇ。

556 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 17:21:38 ]
「間違いを犯す莫迦にこそ価値がない」

という仮定が間違ってるんだよ。
なぜなら、間違いを犯す莫迦しかいないから。

間違いを犯さないプログラマなんて一人も存在しないから。

557 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 17:28:43 ]
「オレの嗜好通りにソースを書かないやつはクズ」

558 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 18:26:47 ]
C++標準化委員会に名前を列ねている連中だってbugを出すんだから、
ましてや昼間に書き込んでるネラーなんてなあ?w


559 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 18:58:04 ]
>>556
全員一律に同じレベルの莫迦だということにしないと
自分を保てないというのなら
そういうことにしてもよい。

560 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 19:06:06 ]
つまり、自分は間違いを犯さないプログラマであるといいたいわけね。

ちなみに、99点も0点もどちらも「間違いを犯す」ことに違いないよ。
100点満点だけが「間違いを犯さない」といえる。

さぁ、ベン図を描いて確認だ!w



561 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 19:09:56 ]
>>559は「莫迦」の程度の話に摩り替えてるな
「間違いを犯すか否か」の話なんだが。

まぁいいか。論理的精密さを求めるような話でもない。
所詮は小さなプライドにしがみついた煽りあいだ。

562 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 19:10:19 ]
自分ひとりだけで完結する規模のものしかやらないのなら
将来メンテすることもないような使い捨てのものしか書かないならそれでいいじゃん

563 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 19:13:37 ]
だな。それならいくら自分がバカで間違いだらけでも問題ない。

564 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 19:32:38 ]
アンドリューハントによると、自分のプログラムにバグがないと思っているときには、バグは見つけられない。
言い換えれば、自分は間違いを犯さないと考えているプログラマは自分のプログラムからバグを見出せない。

565 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 19:42:27 ]
このスレもム板化してきたな…技術の話しろよ、カスども。

566 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 19:53:58 ]
>>565
ここはム版ですよ?w

567 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 20:05:29 ]
>>565
一週間ぐらい我慢しろよカス

568 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 20:21:31 ]
>>561
すりかえてなんかいねぇよ。
程度問題だろっつってんだよ。
>>556 の「間違いを犯す莫迦」の前に「ひとつでも」てのが付くなら、
そんな頭のおかしい「仮定」なんざ誰がしてるってんだ。

569 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 21:47:01 ]
いや、頭がおかしいのはあなたですよ^^

570 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 22:00:27 ]
いかに「あいまいな」仕様書が危険か、これでわかりましたね。
では、次の話題どうぞ。



571 名前:デフォルトの名無しさん [2009/03/27(金) 22:40:22 ]
C++が危険なコーディングには警告を出すという方針なのだとしたら
printfを使ってもC++コンパイラは全く警告を出さないからprintfを使うことはC++的に全く問題ないということだよ。

572 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 22:44:15 ]
>>571
その考え方はおかしい

573 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 22:57:20 ]
警告を出すかどうかはC++の仕様で定められてはいない。コンパイラの実装者の考え次第だ。
実際、Stroustrupはいろんなことについて「これに警告を出さないコンパイラが多いのはがっかりだ」とか言ってるな。
D&Eに書いてある。具体的な事例はあんまり覚えてないが。

574 名前:デフォルトの名無しさん [2009/03/27(金) 23:10:50 ]
C言語は上から順番に処理されるんだよね。
そうすると、割り込むみたいなことは許されないんだよね?
例えばfor文のループ中にキーを押したらそのときのtimeを取れるみたいなのは無理?
for( )
・・・・・・・・・
if(getchar

見たいなのじゃなくて、for文でゲームみたいなの動かしたいんだけど、
その途中でどんな途中でもtimeが取れるみたいなことは出来ないですか?

575 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 23:18:42 ]
>>574
_beginthreadex


576 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 23:23:46 ]
つ _kbhit()

577 名前:574 mailto:sage [2009/03/27(金) 23:29:12 ]
初心者板ってあるんですね。行って来ますすいませんでした。

578 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 08:28:32 ]
UWSCというフリーソフトに [CHKIMG]という関数があります。
画像ファイルと一致する画像を発見すると、その座標を変数に格納するというものです。
これと同じ機能をC言語で実装するにはどのような関数を使えば良いのでしょうか?


579 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 08:45:58 ]
>>578
Win32API に画面をキャプチャするのがあるから
それで画面を取り込んで指定画像と比較すればいいんじゃないかな

580 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 15:35:03 ]
すまん質問させてくれ
今C++のtemplateで新しく設計・作成したクラスがあるんだが

main.cpp
temp.h
temp.cpp

のようにソースを分けたいと思ってる
でも、templateだから.objにしてしまうとビルドエラーが発生
何とか分けたいのだが、良い方法ないでしょうか?



581 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 16:49:25 ]
蛇足だと思うが、Templateはコンパイル時に計算されてしまうのでobjになった時点で定数になっている。
exportっていう仕様があるにはあるけど、各社ともに実装できなくて放置状態だ。いや、一個だけあったかもしれんが。。。

VC6でやってた記憶があるけど、もう忘れちゃったなぁ。
VC9使ってるが、ヘッダにベタ書きしてる。

582 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 17:09:53 ]
>Templateはコンパイル時に計算されてしまうのでobjになった時点で定数になっている。
さっぱりワケが解ってないらしい。
(なんだ「計算」だの「定数」だのって)

583 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 17:16:43 ]
そりゃ君の経験不足

584 名前:581 mailto:sage [2009/03/30(月) 17:33:07 ]
CTFE(だっけ)が何で高速っていわれるかしってんの?しらないの??魔法じゃないのよ。
多分>>580が望んでるのはジェネリックスのほうだと思う。

585 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 17:37:34 ]
CTFEって何

586 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 17:38:49 ]
en.wikipedia.org/wiki/Compile_time_function_execution

587 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 18:05:35 ]
>>580
こういうのがあったが。
ttp://okwave.jp/qa270432.html

これで解決かな??

588 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 19:13:56 ]
>#include "TList.cpp"
…分ける意味ねぇな、とか思わないのが不思議。

589 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 19:39:23 ]
>>581
俺もヘッダにべた書きしてた事あるんだが
ヘッダに書くなんてありえないとか言われて、それ以来分けてる
template classを使ったのは速度を犠牲にしてでも、汎用性+αの目的の為

>>587
ありがとう。これは知らなかったからまた新しく知識が増えた
只、ヘッダ以外をインクルード…まあヘッダにベタ書きしたと思えばいいかな…
暫くはこれを使ってみます

レスくれた方々本当に有難うございました

590 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 19:46:47 ]
>ヘッダに書くなんてありえないとか言われて、
「ありえねぇよな、STL」と言い返せ。



591 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 20:02:36 ]
printfは素晴らしいよね。
coutより使いやすい

592 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 20:24:38 ]
でもたとえば template<> hoge< int >( パラメータリスト )
みたいなテンプレート特化がしぽぽファイルに書き込まれていると
これはテンプラータ関数ではなく一般の関数と同じ扱いだから
定義を頭ファイルに書き込めないのであって(淫乱は別として)
多重定義アラーがでるよって思うな。あっさらーむ。

593 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 20:30:49 ]
あぁ、そうそう。ただテンプレート特化の注意点についてだけ言及しても
解決策はどうしたらいいのってことになるので、つまりそこはグーグルだよ。おにいさん。
以下の「-inl.hファイル」という項が参考になる。

www.textdrop.net/google-styleguide-ja/cppguide.xml

要するに、もう一個、てんぷらクラス/関数専用のサブのヘッダファイルを用意して
そこにてんぷらの実装コードだけを分離しつつ、
ヘッダファイルでそのサブヘッダファイルをインクルードしたらどうなの?って話。
これなら本来実装を書き込むしびびんファイルをいんこるどするよりも気持ち的に安全。

594 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 21:18:29 ]
>>592-593
酔っ払いすぎ。

595 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 21:24:22 ]
今の話題がよく分からないんだが。

特に理解出来ないのが#include "TList.cpp"とかやってるサンプルが出てきてからなのだが、
この会話はレベルが高い話なのか低い話なのか?

(このレベルってのはハードウェアに近いかどうかって意味じゃなくてね。)


>>580が悩んでるのはExplicit instantiationで解決する類の話じゃなくて?

596 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 21:28:39 ]
ヘッダに置きたくない理由がわからんのにレベルもくそもあるかいな

597 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 21:29:06 ]
そのエクストラボーキサイトイニシエーションとかいうのの詳細は
このスレのちょっと前の方に出てきているわけです。
d.hatena.ne.jp/aki-yam/20081129/1227982516

しかしこれはソースの分離というより、
あらかじめ分離してコンパイルしたオブジェクトファイルを用意しておく
という感じでありますね。いいです。すごく。おおきい。

598 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 22:31:51 ]
>>597
オヤジギャグかますなよ

599 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 22:51:34 ]
かます。>゚))))))<

600 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 20:04:07 ]
グローバル変数って他のファイルからexternで参照できるよね。

グローバル変数にstaticを付けると、
他のファイルからexternで参照できなくなるの?




601 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 20:13:14 ]
ぐぐれかす

602 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 20:29:10 ]
>>600
そうだよ。

603 名前:600 mailto:sage [2009/03/31(火) 20:58:08 ]
>>601
とっっくにググってあるよ。
ググった結果、>>600のように解釈したんだ。
何の実りもないレスすんなカス。


>>602
納得できた。
ありがとう。

604 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 21:05:12 ]
ちょっと試せば1分で判るような質問も、何の実りもないけどね

605 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 21:14:07 ]
>>604
動いたかどうかじゃなくて正式な仕様として聞きたかったとか?
だいたい2chで実りを求める方がおかしいよーな。

まあどうでも良いけど、これが火種になってスレが汚れないことを願う。


606 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 21:18:57 ]
>>605
おまえが汚れだ。

607 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 21:28:20 ]
>>606
2chに一生をかけてる人が「2chで実りを求める方がおかしい」発言にキレた構図。


608 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 21:34:15 ]
>>607
バーカ

609 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 21:36:20 ]
>>608
って言われてるのか。かわいそうだがお似合いなお方w

610 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 22:49:49 ]
             ,.、   .,r.、
            ,! ヽ ,:'  ゙;.
            !  ゙, |   }
            ゙;  i_i  ,/
             ,r'     `ヽ、
|  ,.、  ,r.、    ,i" _,    ._   ゙; うーん・・・・
| ,! ヽ,:'  ゙;.     !. ・     ・  ,! 
| !   ,!  }     ヽ、 x    _,r''  僕には何も言えない
|二゙;  i二二二(⌒ノ"''`''''''''''''"´`ヽ.
| ,r'      `ヽ、 ´ヾ、      l  l
,i"   _,   _ ゙;    !      i___|
!.  ・     ・,!   |       t,ノ
|ゝ_    x _::'    !、、、、、、、、、、!
|,/"`''''''''''''''"´';,     |   |    |
(,;!         !)       |   |   |
|゙''::r--、::--;r'        |____|_____|
|―゙'ー-‐゙ー-゙'―┐   (,,,__(,,,____)



611 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 23:14:21 ]
>>600のせいでスレのレベルが落ちたな

612 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 23:16:48 ]
>>611
もともと低かったろ。

613 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 07:46:43 ]
普通の頭であれば検索だけで理解できるからな
検索先が信じられずに2ちゃんのレスのほうを信じるのもどうかと思うし

614 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 08:14:01 ]
ここは検索のスレではありません。
検索に関する会話はご遠慮下さい。

615 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 09:57:04 ]
staticをつけると内部的な名前が変わる

616 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 13:13:50 ]
かどうかは知ったこっちゃないわな。

617 名前:デフォルトの名無しさん [2009/04/01(水) 16:33:56 ]
バイナリデータとテキストデータを結合してchar型配列に格納したいです。

例えば

char STR[256] = {0};
unsigned long Value_A = 0x01234567;
unsigned long Value_B = 0x89ABCDEF;
char Str_A[] = "sample1";
char Str_B[] = "SAMPLE2";

というデータがあったとして、配列STRに以下のようにデータを格納するコードを教えて下さい。

< binary > < text >
0x01234567 0x89ABCDEF sample1|SAMPLE2

ちなみに、バイナリデータはテキストにはせず、BigEndianで格納したいです。
あとテキストには'|'文字を入れて区切りたいです。
よろしくお願いします。

618 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 17:24:58 ]
#include <ctype.h>
#include <stdio.h>

#define swap(ul) ((ul)<<24)|(((ul)&0xFF00)<<8)|(((ul)&0xFF0000)>>8)|((ul)>>24)

void main()
{
unsigned char STR[256] = {0};
unsigned long Value_A = 0x01234567;
unsigned long Value_B = 0x89ABCDEF;
char Str_A[] = "sample1";
char Str_B[] = "SAMPLE2";
unsigned long ul;
int i;

ul = swap(Value_A);
memcpy(STR, &ul, 4);
ul = swap(Value_B);
memcpy(STR + 4, &ul, 4);
strcpy(STR + 8, Str_A);
strcat(STR + 8, "|");
strcat(STR + 8, Str_B);

for (i = 0; i < 8 || STR[i]; i++) {
printf("%d:%02X[%c] ", i, STR[i], isprint(STR[i]) ? STR[i] : '.');
}
}

0:01[.] 1:23[#] 2:45[E] 3:67[g] 4:89[.] 5:AB[.] 6:CD[.] 7:EF[.] 8:73[s] 9:61[a]
10:6D[m] 11:70[p] 12:6C[l] 13:65[e] 14:31[1] 15:7C[|] 16:53[S] 17:41[A] 18:4D[M]
19:50[P] 20:4C[L] 21:45[E] 22:32[2]

619 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 17:39:06 ]
char * push_STR(char* d,char* e,char* s,int ln){
int i = 0; while(d < e && i < ln){*d++ = *s++; ++i}
return d;
}

char *p = STR, *end = STR + sizeof(STR);
if(p=push_STR(p,end,&Value_A,sizeof(Value_A)) >= e) abort();
if(p=push_STR(p,end,&Value_B,sizeof(Value_B)) >= e) abort();
if(p=push_STR(p,end,&Str_A,sizeof(Str_A)) >= e) abort();
if(p=push_STR(p,end,&Str_B,sizeof(Str_B)) >= e) abort();

620 名前:デフォルトの名無しさん [2009/04/01(水) 17:50:34 ]
もしかしたら上の方のコードが途中かもしれませんが 
よろしくおねがいします。
C言語の入門ページの動的配列などの部分を読んで
mallocやreallocでメモリの再確保などができる事はわかりました。
しかし、結果的にははじめに変数に入力をうけてその結果にあわせて
配列の量を変更する事はできません。
例えば文字列の入力を受け付けるプログラムでたとえば書籍の
タイトルを受け取る処理なのでせいぜいこのくらいだろうと見積もって
配列の大きさをとっていたとしてユーザーが予定以上の
非常に長いタイトルの書籍を入力したりしても残りの部分は切り捨てられるように
なってしまうと思います。これを回避する方法は無いでしょうか?



621 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 17:57:18 ]
ない、と言ってしまうのは簡単だが
もし上限がなかったらどうなるかを考えてみよう

622 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 18:02:15 ]
1文字ずつ受け取って、それらをリンクリストでつないでいくというのはどうだろう?
メモリが許す限りどんどん大きくできるぞ。しごいね!

623 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 18:02:34 ]
Stringクラスを使う

624 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 18:04:42 ]
cstringでぐぐったら紐なしエロパンツサイトがヒットした

625 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 18:05:29 ]
キー入力を都度処理してグルグル回せば出来ない事はないけど

パイプ通しての洪水テキストや
例えばカナ漢字変換が驚くほど丈夫で数メガバイトの変換済文字列をイッキに送り込んでくるような状況

には対処しきれんよな

626 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 18:15:49 ]
ありがとう御座います。
前もって入力を受け付けるときに文字数宣言が有る事を書いておきたいと思います。

627 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 18:24:43 ]
そこでstream IOですよ

628 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 19:36:41 ]
結局メモリ+HDD(外部記憶装置)以上のデータは扱えないので扱えるデータには制限がある


629 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 19:39:55 ]
ネットがあるじゃないか

630 名前:デフォルトの名無しさん [2009/04/01(水) 19:51:28 ]
もうデバッグに一日以上費やしても理由がわからなかったので、ここで質問させてもらいます。
本当に理由が解明できなくてマジで困ってます…。

for (i=0; i < (Num_Points-1); i++)
{
distance_x = (gsd[i+1].x-cur_xpos) * (gsd[i+1].x-cur_xpos);
distance_y = (gsd[i+1].y-cur_ypos) * (gsd[i+1].y-cur_ypos);
distance = sqrt(distance_x + distance_y);
}

for (i=0; i < (Num_Points-1); i++)
{
a0 = atan2(cur_ypos-gsd[i].y, cur_xpos-gsd[i].x)-atan2(gsd[i+1].y-gsd[i].y, gsd[i+1].x-gsd[i].x);
a1 = atan2(gsd[i+1].y-cur_ypos, gsd[i+1].x-cur_xpos)-atan2(gsd[i+1].y-gsd[i].y, gsd[i+1].x-gsd[i].x);
}

コンパイルエラーは出ないのですが、実行した際に途中で止まってしまいます。
何回か試したところ、上のループか下のループどちらか一方しか書いてない時は動きます。




631 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 19:58:34 ]
一日以上費やしたってデバッガ使った?

632 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 20:15:36 ]
どっか別のところでスタック破壊してんじゃねーの?

633 名前:デフォルトの名無しさん [2009/04/01(水) 20:15:52 ]
使いましたが、デバッガではよくわかりませんでした。
どちらのループも単体でしかコードに存在しない時は動くので、
printfで結果表示した場合、ちゃんと計算結果が出ます。

しかし、両方ともコードに書くと、なぜか止まってしまうんです。

634 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 20:46:09 ]
>>633
for文の中でiを表示したらどこまで進むの?

635 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 20:53:29 ]
本当に>>630の通りに書いてあるならループにする意味がねーよw

636 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 21:08:33 ]
>>634
どちらかのループ単体のみの実行なら、Num_Points-2まで進んでいます。
なので、配列の範囲外から数を呼び出してるということはないみたいです。

637 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 21:15:24 ]
>>635
エイプリル・フールは午前中までだってのにな

638 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 22:09:54 ]
ソースアップすれば調べてもいいよ

639 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 22:51:04 ]
>>635
distance, a0, a1 がクラスのインスタンスで、
= がオーバーロードされてるかもよ。


640 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 23:58:38 ]
本人かデバッガ使って解らないものを、他人が不定な変数の多い
部分的ソースだけ見せられて判るとは思えない。



641 名前:デフォルトの名無しさん [2009/04/02(木) 00:04:08 ]
>>636
上のループで1からNum_Points-2まで進んで
下のループでも1からNum_Points-2まで進んだってこと?
それなら処理終わってるよね?

せっかく解決しようと聞いているんだから省略しないできっちり説明してほしいな。


642 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 00:40:04 ]
>>641
上のループ、もしくは下のループどちらかしか書いてなければ正常に動きます。
だから、printfでiがどこまで進んでいるかも確認して、Num_Points-2まで進んでました。
このループを両方コードに書いてプログラム実行すると止まって、
printfで表示できてたものも表示されなくなってしまいます。

643 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 00:48:48 ]
>>642
printfを具体的にどこにどのように入れてるのか知らないが、つまりループを両方書くと
実行時に最初のループに入ってすらいないということか?

もし可能であれば、実際にその問題が生じるような最小限のコード全部を書いてほしい。
つまり、俺らがそのままコピペして自分でコンパイルしてみると、同じ問題に遭遇できるようなコードってことね。
それが出来れば問題解決のための労力は少なくて済む。
まあ実際にはかなり長いコードになっちゃうのかもしれないけど。
あと、君が使ってるコンパイラに特有のトラブルだったりすると、助言できないかもしれない。

644 名前:デフォルトの名無しさん [2009/04/02(木) 00:54:16 ]
>>634
これ↓実行したら何が表示されるの?

Num_Points=1
fprintf(stderr, "start(1) Num_Points=%d\n", Num_Points);
for (i=0; i < (Num_Points-1); i++)
{
fprintf(stderr, "(1)[i=%d][Num_Points=%d]\n", i, Num_Points);
distance_x = (gsd[i+1].x-cur_xpos) * (gsd[i+1].x-cur_xpos);
distance_y = (gsd[i+1].y-cur_ypos) * (gsd[i+1].y-cur_ypos);
distance = sqrt(distance_x + distance_y);
}
fprintf(stderr, "end(1) Num_Points=%d\n", Num_Points);

fprintf(stderr, "start(2) Num_Points=%d\n", Num_Points);
for (i=0; i < (Num_Points-1); i++)
{
fprintf(stderr, "(2)[i=%d][Num_Points=%d]\n", i, Num_Points);
a0 = atan2(cur_ypos-gsd[i].y, cur_xpos-gsd[i].x)-atan2(gsd[i+1].y-gsd[i].y, gsd[i+1].x-gsd[i].x);
a1 = atan2(gsd[i+1].y-cur_ypos, gsd[i+1].x-cur_xpos)-atan2(gsd[i+1].y-gsd[i].y, gsd[i+1].x-gsd[i].x);
}
fprintf(stderr, "end(2) Num_Points=%d\n", Num_Points);

645 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 00:59:13 ]
>>643
printfはどこに入れても実行されないです。
このループを二つ入れると、そのvoid関数の部分のprintfは全てダメになります。
結構変数値を他の部分から呼び出してて、
その部分に関しては別の人がやった部分なので最小限のコードを作るにも少々時間かかると思います。
他にも少しやらなくてはいけないことがあるので、もしそれができたら戻ってきます。

ここまで、あまり上手く説明できなくて御迷惑おかけしました。
レス下さった方々、ありがとうございます。

646 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 01:03:50 ]
最小限のコードなんて作らなくていい。
とりあえず>>644をコピペすればいいだけだろ。

647 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 01:06:28 ]
無駄骨

648 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 01:10:54 ]
ステップ実行して、どこで爆死してるか見つけないとダメじゃね?
どっかでメモリ、ぶっ壊してるのだろ、きっと

649 名前:630 mailto:sage [2009/04/02(木) 01:30:25 ]
>>644
何も表示されません…。自分が両方のループ入れた時の症状と同じです。

650 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 05:50:46 ]
もう4月馬鹿は過ぎているんだから釣りは勘弁してくれ。



651 名前:デフォルトの名無しさん [2009/04/02(木) 06:40:26 ]
#include<stdio.h>

int sum(int x,int y){
return x+y;
}

int max(int x,int y){
return x*200+y*300;
}

int main(void){
int x,y,i,am,pm;
char cl;
for(i=0;i<9;i++){
scanf("%s %d %d",&cl,&x,&y);
am=sum(x,y);
pm=max(x,y);
printf("%s %d %d\n",cl,am,pm);
}
return 0;
}
と書いて実行するとき、%sの読み込みにc1と入れても
出力の%sではcだけとしか表示されないんです。
誰かこの謎の答えを教えてください。

652 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 06:46:18 ]
>>651
char cl; → char cl[5000];


653 名前:デフォルトの名無しさん [2009/04/02(木) 07:03:43 ]
>>652さん
ありがとうございます!!ありがとうございます!!
何でこんなことにも気づかなかったんでしょ(;'ω`)アホだ自分…

654 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 07:32:36 ]
>>633
「デバッガでは良く分からない」んじゃあない
お前がデバッガを分かってないだけ

655 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 07:38:41 ]
>>651
char cl[100];
if (scanf("%99s%d%d", cl, & x, & y) != 3) fprintf(stderr, "Illegal input.\n);

656 名前:デフォルトの名無しさん [2009/04/02(木) 08:14:44 ]
ここからユーザ定義関数で処理しなくてはならないんだが、 コレ以上の行動は俺の頭ではむりです…誰か助けて下さいorz
#include<stdio.h>
#define ROW 8 /*縦*/
#define COL 8 /*横*/

int main(void){
int i,j;
int matrix[ROW][COL] ={ {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'},
{'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'},
{'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','#','#','#','#','#','#','#'}};
for(j=0;j<COL;j++){
for(i=ROW-1;i>=0;i--){
printf("%2c ",matrix[i][j]);}
printf("\n");}
printf("\n");
for(i=ROW-1;i>=0;i--){
for(j=COL-1;j>=0;j--){
printf("%2c ",matrix[i][j]);}
printf("\n");}
printf("\n");
for(j=COL-1;j>=0;j--){
for(i=0;i<ROW;i++){
printf("%2c ",matrix[i][j]);}
printf("\n");}
return 0;
}

657 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 08:22:20 ]
>>656
宿題スレへどうぞ

658 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 08:56:29 ]
#include<stdio.h>
#define ROW 8 /*縦*/
#define COL 8 /*横*/

void disp(int (*matrix)[ROW][COL], int revrow, int revcol)
{
int i,j,row,col;

for (j = 0; j < COL; j++) {
col = (revcol) ? COL - 1 - j : j;
for (i = 0; i < ROW; i++) {
row = (revrow) ? ROW - 1 - i : i;
printf("%c ", (*matrix)[row][col]);
}
printf("\n");
}
}

int main(void){
int matrix[ROW][COL] ={ {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'},
{'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'},
{'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','#','#','#','#','#','#','#'}};

disp(&matrix, 1, 0);
printf("\n");
disp(&matrix, 1, 1);
printf("\n");
disp(&matrix, 0, 1);
return 0;
}

659 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 09:20:59 ]
c初心者です。 以下の二つの関数はまったく同じように動きますか?

int f1(int a)
{
if(a==3){ return 1;};
if(a>1){ return 2;};
return 3;
}

int f2(int a)
{
if (a==3) { return 1;}
else if (a>1) { return 2;}
else {return 3;};
}

660 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 09:24:27 ]
実行してみればいいじゃん



661 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 09:39:24 ]
>>659
動きます。

662 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 10:12:28 ]
春休みが終わりそうで、カツオ状態だから、このありさま?

663 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 11:36:16 ]
>>662
春休みに宿題なんかないだろ。

664 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 11:36:47 ]
あるよ

665 名前:デフォルトの名無しさん [2009/04/02(木) 14:33:24 ]
LinuxでC++で書いたクラスをまとめて、sharedライブラリ作ろうとおもってるんですが
ヘッダファイルは、まとめたり、きれいにできませんか?

公開したいクラスは1つだけ(class A)です。実装はライブラリファイルひとつになります。
内部でたくさんのクラスを使ってるんですがこれらは外からは直接
使いません。
で、class Aのメンバにたくさんの他のクラスのオブジェクトがあったり、使ったり
しているので、 class AのヘッダファイルA.hには内部のクラスたちを定義した
たくさんの *.h がincludeされてます。

ライブラリを他人につかってもらうとき、ライブラリ1つと、ヘッダたっくさん
になっちゃうんです。ひとつのヘッダファイルにまとめる方法ないです?

666 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 14:57:10 ]
>>665
ひつの手だが、privateメンバにはダミー宣言を使う方法がある
例えば下の例(ヘッダ)で
LIBをビルドする時だけ _LIB_MAIN_ を定義する
こうすれば、LIB利用者には aaa.h は渡さなくて良い

#ifdef _LIB_MAIN_
#include "aaa.h"
aaa *a;
#else
void *a;
#endif

667 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 16:46:14 ]
それをいかに容量上限を感じさせないようにプログラムさすのがプログラマの役割だろ、常識的に考えて

668 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 16:52:42 ]
誤爆

669 名前:665 [2009/04/02(木) 17:33:37 ]
>> 666
なるほど。いただき。
ポインタじゃなきゃだめ?サイズが合えばよい?

670 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 17:46:27 ]
どんなクラスなのか分からんが、そもそもポインタ型にするなら、ヘッダからヘッダをインクルードする必要はないよ。
前方宣言だけで済む。



671 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 17:51:49 ]
>>668
できるよ。
以上。
はい次の方。

672 名前:665 [2009/04/02(木) 18:04:13 ]
>>670
そか。
全部ポインタにして、前方宣言すればすればよいのね。
ポインタじゃないとやっぱりむり?

673 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 18:10:08 ]
>>672
参照でも可能だけど、まあ同じ話だね。
普通の変数の形で持つなら、その変数の型の完全な定義が必要になる。ポインタや参照なら不要。

674 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 18:31:47 ]
Aのポインタだけメンバに持つ公開用のクラスでも作ればいいんじゃ
まぁ要するにpimplなんだが

675 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 21:44:13 ]
pthreads関数を使用してその環境で一番処理が早いスレッド数に自動的にあわせるプログラムを作っているのですが、
すべてのスレッド内の一秒間にループした回数の和を取得することができません。

どうすればうまくできるでしょうか。

676 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 21:59:41 ]
一番簡単なのはグローバル変数に格納する事。
2番目はクラスにしてメソッドで各スレッド内で足したものを返す。かなぁ??

677 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 23:20:48 ]
>>675
pthread_joinで戻り値(第2引数)を合計すればいい。

678 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 05:06:12 ]
#include<stdio.h>
int main(void){
int a,s,i;
int box[10]={0};
scanf("%d",&s);
while(s!=0){
for(i=0;i<s;i++){
scanf("%d",&a);
if(a<=9) box[0]+=1;
else if(9<=a&&a<20) box[1]+=1;
else if(29<a&&a<40) box[3]+=1;
else if(19<a&&a<30) box[2]+=1;
else if(39<a&&a<50) box[4]+=1;
else if(49<a&&a<60) box[5]+=1;
else box[6]+=1;
}
}

printf("%d\n",box[0]);
printf("%d\n",box[1]);
printf("%d\n",box[2]);
printf("%d\n",box[3]);
printf("%d\n",box[4]);
printf("%d\n",box[5]);
printf("%d\n",box[6]);
}
return 0;
}

上のソースをユーザ定義関数を使って書きたいときはどうしたらいいのでしょう?

679 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 05:21:41 ]
mainの中身をそっくり自分の関数に移動して、mainでそいつを呼ぶ。

680 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 08:00:22 ]
#include<stdio.h>

int hantei(int i)
{
if (i < 0) {
return 0;
}
if (60 <= i) {
return 6;
}
return i / 10;
}

int main(void){
int a,s,i;
int box[10]={0};

scanf("%d",&s);
for(i=0;i<s;i++){
scanf("%d",&a);
box[hantei(a)]++;
}
for(i=0;i<=6;i++){
printf("%d %d\n",i,box[i]);
}
return 0;
}



681 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 21:50:25 ]
他の板でこんな言葉を叩きつけられました

プログラマになりたくてなるんじゃないなってしまう者がプログラマ
貧弱一般人がプログラマになろうとしても人工的に淘汰されるのが目に見えている


この言葉にはすごく説得力があるような気がします
やはり、プログラマになろうとしている僕に、プログラマなんて無理なんでしょうか?

682 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 21:57:21 ]
向き不向きは有るかもしれないが、やりたい人は誰でもなれる。
向かない人はやりたいと思わない。

683 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 22:02:29 ]
ブロントネタに真剣にならなくても

684 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 22:28:30 ]
>>682
ありがとうございます。

頑張ってみようと思います

685 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 22:41:26 ]
0b00000001とかしたらサフィックスが無効ですってエラーでるんだけど、何で?

686 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 22:42:12 ]
サフィックスが無効だからです。

687 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 22:44:30 ]
プログラマはがんばっちゃう人はダメなんだよ。
プログラマの三つの美徳

怠惰であれ、短気であれ、コーマン大好きであれ

海軍式の努力と根性がまかり通っている職場や
そのような空気を当たり前とみなすSE/PGによるプロジェクトは
漏れなくデスマーチになる。



688 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 23:37:25 ]
>>685
2進リテラルは無い。
8進数なのにbが入ってて不正じゃないかい?

689 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 01:24:45 ]
0bはたしかgcc独自拡張で存在したと思う。
使わないほうが無難だな。

690 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 10:38:18 ]
>>681
他の板ってこれか?

プログラミング質問すれ Part1
pc12.2ch.net/test/read.cgi/unix/1127388574/474




691 名前:デフォルトの名無しさん [2009/04/04(土) 12:02:02 ]
>>681
プログラマーに限った話じゃない。
全ての職業に言えること。

692 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 13:32:32 ]
まぁ、私はプログラミングなら飯が食えると判断したからプログラマになったけどな。

693 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 13:42:21 ]
すいません。
ポインタを使って、配列のそれぞれの要素に文字列を入れたんですけども、
こういう場合の配列のアドレスって一体どういう規則で並んでいるんでしょうか?
#include <stdio.h>

int main() {

char test[] = "1234";
char *words[] = {"one","two","three","four"};

printf("%p %p %p %p\n",test[0],test[1],test[2],test[3]);
printf("%x %x %x %x\n",words[0],words[1],words[2],words[3]);

}

694 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 13:45:41 ]
雑魚ぷろぐらまあは手配師(人材派遣会社)に喰わせてやる(=喰われてやる)のが仕事だかんなあ

695 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 13:51:41 ]
>>693
%xではなく、%pを使うべきじゃないだろか。
で、質問は"one", "two", "three", "four"がどう配置されているかってこと?
だとしたら答えは「コンパイラのご機嫌次第」かな。
大抵は、その順番で8バイト境界に並べられるような気がするけど。

696 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 13:58:50 ]
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

697 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 14:06:43 ]
FFFF0000 o n e \0
FFFF0004 t w o \0
FFFF0008 t h r e
FFFF000C e \0 X X
FFFF0010 f o u r
FFFF0014 \0 X X X
※ Xに何が入るか分からない

words[0] = (char*)FFFF0000
words[1] = (char*)FFFF0004
words[2] = (char*)FFFF0008
words[3] = (char*)FFFF0010

こんなイメージ

698 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 14:12:56 ]
>>695
なるほど。ありがとうございます。

>>697
ありがとうございます。

699 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 14:12:59 ]
そのコードの前にconst char * foo = "one and two";なんてコードがあったら面白いことになりそうだ。

700 名前:デフォルトの名無しさん [2009/04/04(土) 14:20:39 ]
VC++2008EE使用
これでエラーが出るんですが、どこが悪いんでしょうか?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

main()
{
char str[100] ;
int num ;

gets_s(str) ;
num = atoi(str) ;

printf("%d",num*2) ;
}



701 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 14:29:28 ]
>>700
エラーの対処を人に聞く場合はエラーの詳細を書け
たぶん、get_s には2番目のパラメタとして長さが必要ではないかと思うけど

702 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 14:35:20 ]
gets_s(str, sizeof(str));
だろうね
mainの最後にreturn 0;も忘れずに

703 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 14:37:13 ]
なあに、この程度のソースならエスパーでなくとも
どんなエラーか想像がつくってもんさ

704 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 14:57:29 ]
>>701-703
ありがとうございます。
コンパイル通りました。


705 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 15:41:42 ]
>>704
C/C++はコンパイル通っただけじゃまっっっっったく安心できない言語だから気をつけな。
むしろコンパイル通らない内が楽だよ。(コンパイラがミスを見つけてくれるから)
コンパイル通ってからのデバッグが大変なんだよねぇ。

706 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 16:38:04 ]
それって言語として問題あるんじゃない?

707 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 16:50:40 ]
アホは黙ってていいよ

708 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 16:51:37 ]
>>706
何を今更。
そんな欠陥があっても、便利なとこがあることに変わりはないから使うというだけのこと。

709 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 17:20:12 ]
インタプリタ言語なんてすべて実行時エラーだから
もっと恐ろしいことに。

710 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 18:52:37 ]
>>705が言ってる事(>コンパイル通ってからのデバッグが大変なんだよねぇ。)は
別に言語の欠陥じゃないだろ。
プログラムを作る
→期待通りに動作していない
→何がいけないんだーー?
ってなるのはどの言語でも一緒だろ。




711 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 18:55:30 ]
ロジックエラーってやつだな。

712 名前:710 mailto:sage [2009/04/04(土) 19:07:42 ]
>>711
俺の頭のエラーってことだな。ホント質わるい。

713 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 19:12:44 ]
誰も頭の話なんてしてないが。。。

714 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 19:23:10 ]
初心者が読むc++のお勧め教えてください

お願いします。

715 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 19:34:48 ]
>>714
入門者かな?これからC++始めたいって人?

入門者ならエクスメディアの『ビジュアルラーニングC++』って本が個人的なオススメだったけど、会社が倒産した。


716 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 21:51:20 ]
>>715

ありがとうございます

717 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 21:53:53 ]
コロッとだまされちゃうんだな。

718 名前:715 mailto:sage [2009/04/04(土) 22:26:09 ]
>>717
失敬な

719 名前:デフォルトの名無しさん [2009/04/05(日) 00:27:14 ]
すんません。知り合いのフリーのPGがVBやVCのアカデミック版使って
作ったソフトを売ってるんだが、ソフト自体は差は無いのですか?
やめたほうがいいんじゃって言っても「ばれねぇ」の一点張り。
実際どうなの?

720 名前:デフォルトの名無しさん [2009/04/05(日) 00:30:31 ]
何か問題あるの?



721 名前:デフォルトの名無しさん [2009/04/05(日) 00:37:52 ]
アカデミック版で作ったソフトって売っていいの?

722 名前:デフォルトの名無しさん [2009/04/05(日) 00:38:20 ]
売っちゃいけないの?

723 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 00:39:42 ]
ライセンス読まないの?

724 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 00:41:13 ]
>>719
ライセンスキーの情報が埋め込まれてるから
ばれる可能性はある

アカデミックとかImagineCupのは商用利用負荷だよ
Expressはできるけど

725 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 00:43:20 ]
いやアカデミックは商用利用可能だよ

726 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 00:53:16 ]
>>725
ほんとだ、ごめん
アカデミックは大丈夫ですね

727 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 00:59:16 ]
テンプレートの明示的特殊化の際に「整数型全部」「浮動小数点型全部」といったことをしたいんですが、いい方法はありませんでしょうか。

template<typename T> class Hoge { void f() {} }
template<t> class Hoge<整数>::f { void f() {整数専用処理}; }
みたいな感じで。

728 名前:デフォルトの名無しさん [2009/04/05(日) 01:00:39 ]
じゃあ、学生のときに買ったアカデミックで作ったソフトは売っても全く問題ないわけね

729 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 01:00:49 ]
もうひとつ。
テンプレートの明示的特殊化はヘッダファイルに書いておいてもいいものなのでしょうか。

730 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 01:28:00 ]
>>727
boost::enable_ifを使うしか無いと思うよ。
letsboost::enable_if
www.kmonos.net/alang/boost/classes/enable_if.html




731 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 01:38:48 ]
>>730
ありがとうございました。boostの使用も考えてみます。

テンプレートの明示的特殊化を複数個所で使用する場合に、
実体を置くべき場所の解決がうまくできない問題は相変わらず……
externを使えば?とも思いましたが、BCCでもVCでも解決できませんでした。

732 名前:730 mailto:sage [2009/04/05(日) 01:51:31 ]
>>731
まあ正直俺だったらboost::enable_ifじゃなくて、
適当なprivateインライン関数テンプレートfoo_temp()を1つ別個に用意しておいて、
int, short, unsigned long, etc...
を全部考え得る限り特殊化し、それぞれから
foo_temp<int>, foo_temp<short>とかを呼び出すように定義しちゃうかもしれない。



733 名前:730 mailto:sage [2009/04/05(日) 01:54:10 ]
>>731
>>テンプレートの明示的特殊化を複数個所で使用する場合
そもそも明示的特殊化って何?
ふつーに特殊化だよね?
あと、メンバ関数テンプレートの話だよね?
実体をどこに書いてる?
特殊化してなければちゃんとコンパイル→リンクまで行くの?

734 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 02:19:10 ]
>>733
「明示的特殊化」はIBM XL C/C++ ランゲージ・リファレンスの言葉に従っています。
中身は普通の特殊化でメンバ関数です。
やりたいことはクラステンプレート内部のメンバ関数のみの特殊化です。
(クラス内部のテンプレート関数の特殊化を指す名前はあるのでしょうか?)

現在は
hoge.h
hoge.cpp
a.cpp
b.cpp
があるとして、

// hoge.h
template<typename T> class Hoge { void f() {} }
// template<> class Hoge<int>::f() { int専用処理; }  // cppでの記述を消しても多重定義、NG
// template<> class Hoge<int>::f(); // VCとBCCではじかれる。externを書いても同じ。

// hoge.cpp
template<> class Hoge<int>::f { void f() {int専用処理}; }

// a.cppとb.cpp
Hoge<int> hoge;
hoge.f();

とおいて試してみています。

735 名前:デフォルトの名無しさん [2009/04/05(日) 02:56:13 ]
>>728
学生じゃなくなってもアカデミックを使い続けて良いの?

736 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 03:40:33 ]
課題やる→コンパイルエラー→シコシコ直す→コンパイル通る→やったー!これで終わりだー
→./a.out→文字がうじゃうじゃうじゃうじゃうじゃうじゃうじゃうじゃorセグメンテーション・エラー云々
→( ゚д゚)
→( ゚д)

そうだね、今このときだね

737 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 03:41:41 ]
おれはなんて遅レスをしていたんだ・・・・・・
恥ずかしい・・・・・・っ、でも、

738 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 04:36:19 ]
>// hoge.cpp
>template<> class Hoge<int>::f { void f() {int専用処理}; }

template どうこう以前に、すでに書き方間違ってるじゃろ、それ。
あと、特化したのはクラスであってメンバ関数じゃないんだから
特化のための宣言である template<> もいらない。


739 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 04:56:41 ]
>>738
失礼しました。その部分はclass→voidですね。classだとそもそもコンパイルが通らないはず。
というわけで試してみました。

// hoge.h
template<typename T> class Hoge { void f() {} }
// なにも書かない→gcc3.4:リンカで多重定義 VC9:通るがcppでの実装は無視される BCC:cppのコンパイル時に多重定義扱い
// void Hoge<int>::f; //gcc3.4→too few template-parameter-list VC9:通るがcppでの実相は無視される BCC5.5:template<>宣言が必要

// hoge.cpp
void Hoge<int>::f { void f() {int専用処理}; }
といった感じです。

740 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 05:11:32 ]
template<> class Hoge<int>::f();

テンプレートクラスの特化宣言をなぜ落とすw
テンプレートクラスの特化はちゃんと宣言する必要がある。
それが目的なんだから。

特化宣言がいらないのはそのクラスのメンバ関数。
なぜなら特化したのはクラスであってメンバ関数じゃないから。
仕様書を読んだほうがいいかも。



741 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 05:50:37 ]
>>740
メンバが多めのテンプレートクラスの一つの関数だけを再定義、といった場合に、
教科書通りにテンプレートクラスの特化で全メンバを再定義すればいけるというのは分かるのですが、
特化したテンプレートクラスのある特定の関数だけリンカで特殊な定義に差し替えられないかと考えたのですが、
冷静に考えるとそれをコンパイラに知らせるのはかなり酷な作業の気がしてきたので、
教科書通りに全部再定義してみます。

一足飛びに変な質問をしようとして、エスパーさせてしまってすみません。

742 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 07:10:08 ]
4桁の2進数があったとします。0001←2進数表記
それを0001→0010→0100→1000→0001→…という感じでずっと1を移動させたいん
ですがifやforなど条件分岐を使わず出来るだけ軽い処理でいい方法ありませんか?
この関数が呼び出されるたびに上記のように1を移動させていくって感じです。
<<=1でシフトさせていけば軽いしいいかなと思ったんですがそれだと1000を処理したとき
0000になってしまいます。やっぱりif入れて8より大きくなったら1にとかしかない?

743 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 07:14:21 ]
(x << 1 ) & (x >> 3) 

744 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 10:36:51 ]
初心者はポインタより多重ループのほうが躓きやすくない?

745 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 11:10:02 ]
ポインタや多重ループより「躓き」の読み方の方が難しい

746 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 13:19:05 ]
>>743
m9(^Д^)

747 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 13:28:50 ]
x = ((x & 7) << 1) & (x >> 3)

748 名前:デフォルトの名無しさん [2009/04/05(日) 14:00:12 ]
x = 0;
x = (x << 1) & 16 || x = 1;

749 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 14:18:49 ]
>>748
右辺値への代入?

750 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 14:40:38 ]
|| は副作用完了店だお



751 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 14:42:06 ]
15じゃない?

752 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 14:54:35 ]
#include <stdio.h>

void main()
{
int i, x = 1;

for (i = 0; i < 10; i++) {
printf("%d:%X ", i, x);
x = ((x & 7) << 1) | (x >> 3);
}
}

0:1 1:2 2:4 3:8 4:1 5:2 6:4 7:8 8:1 9:2

753 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 14:57:43 ]
x = ((x + x) >> (x & 4))& 15

754 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 15:02:39 ]
>>752
7とか中途半端だなどうせなら非環境依存にしとけよ

755 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 15:17:34 ]
>>745
躓きの「書き」を問われたら俺失点するわ。

756 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 15:25:45 ]
簡単な文字だから今覚えてしまえば、死ぬまで忘れないだろ

757 名前:デフォルトの名無しさん [2009/04/05(日) 15:29:31 ]
>>751
15だ。ごめん。

758 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 15:42:21 ]
「躓き」覚えた



3日も経てば忘れるだろうけど

759 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 16:30:25 ]
そもそも何で足偏に質なんだ?
どの辺がつまづきなんだろう・・・。

760 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 16:32:17 ]
x=^((x<<1)+1);



761 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 16:58:46 ]
x = 1<<(((S++)%4)+1)
??

762 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 13:27:16 ]
図書館でC++の本探そうかと考えてるんですが・・

図書館にあると思いますか?(・∀・)

763 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 13:32:26 ]
うちの近所の図書館にはある

764 名前: ◆xb8eIST5.k mailto:sage [2009/04/06(月) 13:50:42 ]
そうですか!また行こうと思います(・∀・)

ところで、誰かモリタポ別けてもらえないでしょうか(・∀・ )

◆xb8eIST5.k

765 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 14:20:47 ]
>>764

お前、厨房か?クレクレやろうは逝ってよしだ、ゴルァ

766 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 14:39:11 ]
小学校の図書館とか、児童施設の図書コーナーとか、特定の分野に特化した図書館とかじゃなきゃ
数冊はあるんでねーの?


767 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 14:58:49 ]
>>764
住所晒したら着払いで送ってやんよ

768 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 15:28:31 ]
>>767

着払いでモリタポを送る!?(・∀・)

769 名前:デフォルトの名無しさん [2009/04/06(月) 18:42:31 ]
mogera.jp/gameplay?gid=gm0000000129

そんなことより exe が使用しているdllを調べるソフトってなんだったっけ?

770 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 18:43:45 ]
Dependency Walker(Depends.exe)のことか



771 名前:デフォルトの名無しさん [2009/04/06(月) 18:53:32 ]
Linuxでデバイスとのやりとり(シリアル通信)をラップするような
ライブラリを提供したいです。C++。
ユーザにはどんなインターフェイスで公開するとよいですか?
受信スレッドでデバイスから読んで
受信バッファにデータ積んで、コールバック登録されたメソッドを
呼び出してあげる。でよいですか?

ユーザアプリ側のコールバックルーチンが別スレッドで走るのが
気持ち悪い気がするのですが。

772 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 19:09:29 ]
Windowsでプロセス間通信)をラップするような
ライブラリを提供したいです。C++。
ユーザにはどんなインターフェイスで公開するとよいですか?
受信スレッドでプロセスから読んで
受信バッファにデータ積んで、コールバック登録されたメソッドを
呼び出してあげる。でよいですか?

ユーザアプリ側のコールバックルーチンが別スレッドで走るのが
気持ち悪い気がするのですが。

773 名前:771 [2009/04/06(月) 19:42:26 ]
>>772
Windowsのプロセス間通信なら、
共有メモリと、Windows Messageを使うと、ユーザアプリに求めるのは
メッセージポンプだけになるし、ほぼ標準的なつくりになる気がするので、
好みなんですが。
Linuxではどうですか?


774 名前:771 [2009/04/06(月) 19:45:43 ]
Named pipeは、よく使われますか?
ユーザアプリは、selectで待つようになるんですよね。

775 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 10:59:32 ]
自作ソフトで使うマクロの文法を、拡張しようと思い、
lexやらyaccやらbisonやら調べ始めたのですが・・・
難しい・・・

例えば呼び出し前に新たなトークンを追加したり、関数定義みたいなことが
出来るようにするサンプルを探しているのですが、見つかりません。

・自作ソフトはプラグインで拡張可能になっていて、マクロのプラグイン名
 を自前で解析していますが、区切り文字の検出とか括弧の扱いとか、自力
 では限界なので・・・プラグイン名を追加トークンにして、ライブラリお
 任せ一発という形に出来ればと思っています。

・マクロの中で関数マクロの定義が出来るようにといいのですが、
hoge(a, b, c) = {
age; sage(a, b); uge(c);
}
hoge(1, 2, 3);
 こういうのを実現しているサンプルなどありましたら教えてください。

776 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 11:43:07 ]
>>775
こっちのスレのほうが適当かな。

pc12.2ch.net/test/read.cgi/tech/1233143342/

777 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 12:56:10 ]
>>776
ありがとうございます。行ってきます。

778 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 13:22:03 ]
初歩的な質問で申し訳ないんですが

みなさんは童貞でしょうか?

779 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 13:29:35 ]
どっちか一方しか居ないとでも思ってんだろうか。

780 名前:デフォルトの名無しさん [2009/04/07(火) 13:53:49 ]
フォームの中にサブフォーム?を作ってメニューのボタンを押すたびにそのサブフォームの内容を変えるようにしたいのですが
どうすればよろしいのでしょうか?



781 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 13:54:39 ]
いきなりフォームとか言われても環境がわからんわ
どのフォーム?

782 名前:デフォルトの名無しさん [2009/04/07(火) 14:02:03 ]
えっとWindowsフォームでしょうか・・VisualC++使っています

783 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 14:03:59 ]
>いきなりフォーム
ヴビ厨特有の現象です。
>サブフォーム?
このオレ用語も。

…ほらね、俺に ESP 能力なんかないでしょ。

>>780
C++/CLI なら TabControl でも使っとけ。

784 名前:デフォルトの名無しさん [2009/04/07(火) 14:17:05 ]
すみませんでした。
ありがとうございました。

785 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 19:30:35 ]
>>779
どちらでもない、あるいは両方ってあり得るの?

786 名前:デフォルトの名無しさん [2009/04/07(火) 19:40:47 ]
>>785
「みなさんは」という集合なんだから両方は余裕であるだろ

787 名前:デフォルトの名無しさん [2009/04/07(火) 20:29:33 ]
>>786
はい、残念。

「童貞」は個体の属性だから、>>778は集合に対する問いかけじゃない。
集合の元に対する問いかけだ。

日本語勉強してから出直しな。


788 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 20:32:21 ]
>>787
数学できるのかっこいー


ってお世辞言ってもらえるとでも思っているのかな?

・・・恥さらしてないで出直しな。

789 名前:デフォルトの名無しさん [2009/04/07(火) 21:08:12 ]
できて当たり前のことをほめられてもうれしくないだろ
788が恥さらしだということだけは確実に真理だ

790 名前:788 mailto:sage [2009/04/07(火) 21:54:35 ]
>>789
>「確実に真理だ」

・・・顔 真っ赤にしちゃってかわいー



791 名前:デフォルトの名無しさん [2009/04/07(火) 22:01:26 ]
>>790
定番のレスしか返せないってほんとかっわいいいいwwwwww

792 名前:790 mailto:sage [2009/04/07(火) 22:12:06 ]
>>791
あきらめろ。
このありさまではもう、誰が見てもお前が○け犬


793 名前:デフォルトの名無しさん [2009/04/07(火) 22:26:27 ]
>>788
数学?

794 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 00:38:22 ]
>>787
「童貞」は数学用語じゃないから勝手に元と認識してはいけません

795 名前:デフォルトの名無しさん [2009/04/08(水) 00:39:57 ]
集合とか言い出したのは>>786なのだが。

796 名前:デフォルトの名無しさん [2009/04/08(水) 01:02:41 ]
>>787 童貞乙

797 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 07:03:13 ]
童貞が煽りになると思う時点でガキすぎるw

798 名前:デフォルトの名無しさん [2009/04/08(水) 07:07:20 ]
本当に童貞の奴が必死ですw

799 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 09:32:35 ]
>>787
>「童貞」は個体の属性
を不特定多数に対して問いかける間抜けさに気付けない頭の悪さを棚に上げて
>日本語勉強してから出直しな。
てのが、なんだかカッコイイですね。

800 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 11:16:42 ]
元レスの奴と違う人間に煽られて反応したお前が負け犬だwwwww



801 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 13:54:40 ]
>>800
違うか同じかは知らんが (よく解るなお前)、そんなことより
その「お前」ってのは誰?

802 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 13:55:58 ]
オレオレ

803 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 14:04:13 ]
いーや俺。

804 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 14:18:26 ]
うんお前

805 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 15:11:57 ]
初心者なんですが、質問させてください。
まず、BCCの無料版をDLして、メモ帳のソースをcファイルで保存しました。
それからコマンドプロンプトを使って実行しましたが、次の文章が出てexeファイルができませんでした。

'bcc32'は内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして
認識されていません。

そして、ソースは以下のものです。

main()
{
}


806 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 15:15:41 ]
>>805
BCCへのパス通したか?
ttp://pocketstudio.jp/win/xp/path.html

807 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 15:16:09 ]
パスが通ってない。通せ

808 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 15:21:52 ]
パス通せよ

809 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 15:26:41 ]
ttp://www.cppdrive.jp/bcc/install/
ここで勉強しる

810 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 15:39:14 ]
>>806-809
やってませんでした。ありがとうございます。やってみます。



811 名前:デフォルトの名無しさん [2009/04/08(水) 17:57:14 ]
select関数の第一引数について

TCP/IPのソケット通信処理を作成していて、select関数を使用するつもりです。
select関数の第一引数には「集合にある記述子の中の最大値に1を足したもの」
を設定するということですが、具体的に何を設定すればよいか分かりません。

以下の場合、第一引数"nSocket"には何を設定すればよいのか教えて下さい。

FD_ZERO(&rd);
FD_SET(acceptSocket1, &rd);
FD_SET(acceptSocket2, &rd);

select(nSocket, &rd, NULL, NULL, 10);

よろしくお願いします。

812 名前:デフォルトの名無しさん [2009/04/08(水) 18:03:41 ]
select()に登録するソケット(=socket()の戻り値)の中で一番大きい奴に+1した値

socket()の戻り値はint型だから比較したり+1したりできるでしょ?

813 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 18:08:20 ]
>>812

そういう意味ですか。
ありがとうございました。

814 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 18:16:27 ]
ttp://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200704/07040016.txt
nfds 引数は Windows Socket では未使用 (無視される)

Windowsのソケットはいろいろ癖がある

815 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 23:17:45 ]
クラスの継承時にコンストラクタも継承するというか、
親クラスに定義されているコンストラクタをそのまま使う方法というのは、
再定義してデフォルト初期化子に渡す以外ないのでしょうか。

816 名前:デフォルトの名無しさん [2009/04/08(水) 23:32:54 ]
class A { int m_val; public: A(int a, int b){ m_val = a+b; } }
class B : A {}

B(1, 2);

みたいにしたいってこと?再定義しかないね。

817 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 23:41:25 ]
>>816
了解しました

テンプレートで
class A { int m_val; public: A(int a, int b){ m_val = a+b; } }
template<class X> class B : public A { ... }
のようにして、定型の追加機能を持たせるテンプレートを作ろうとしたのですが、
どうしてもそこで引っかかってしまいまして。

818 名前:デフォルトの名無しさん [2009/04/09(木) 02:04:45 ]
とりあえず 童貞乙 であります!






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<193KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef