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

このエントリーをはてなブックマークに追加
1 ◆h6A7qfFFu6
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。

過去ログ
スレを勃てるまでもないC/C++の質問はここで
http://pc11.2ch.net/test/read.cgi/tech/1167476845/
スレを勃てるまでもないC/C++の質問はここで 2
http://pc11.2ch.net/test/read.cgi/tech/1178503366/
スレを勃てるまでもないC/C++の質問はここで 3
http://pc11.2ch.net/test/read.cgi/tech/1187521676/
スレを勃てるまでもないC/C++の質問はここで 4
http://pc11.2ch.net/test/read.cgi/tech/1221633708/
2デフォルトの名無しさん:2008/12/29(月) 11:24:20
                        /^\_
               ,ィー‐ '⌒´ : : : : ヽ: `ヽ、
          , :≦7: : : : : : : : : : : : : : :ヘ : : : \
         /: : : /: : : : : : : : : : :∧: : : : :', : : : : :\
    rー<⌒\_:_ /: : : : : : :/ : : : :} ',: : : : :}: : :ヽ: : : \
    |: : : : l::..::..:ヽ/: :/ : : : :/ /⌒′│j: : : ト: : : ヘ \: :ヽ、
    |: : : : |:::::::::::' : / : : : :│: : : /   |:ハ : : |ハ: :l : |: : :ヘ
    |: : : : |::::::::::i :│ : : : : { : : : ,イ气 リ ヘ : 心}: }: :|: : : :}
.   /|: : : : }::::::::::| : | : : : : /l: : :/{::ヘ_∧   j/{rイ: | : h: : :′
   ' :|: : : : l::::::::::{: ∧: : : /:ヘ: 〈{ Y: : :}     Y: |: / }: /
  {.:::|: : : : |::::::::::W::{ : :/ : : :V  ゞzソ     \W ,j/
  └┤: : : ヘ:___/⌒l: /: : : : :|    "   rー┐  }:ヘ
    | i: : : : : ヘ ー {^W{: : : i: |      { .__{  厶/   >>1 乙!
    | }: : : : : : { : : ヽ、_|: : : l: l           / }
    |八: : : :∧ヽ`゛<ム : : h:{   ____ , く: : :│
    |{ }: : /  ヽ{     }: : :|ヘヽ、 /} : 八 } : : |
.      j/       ∧ : ト、\  ヽ\}  |: /リ
              / ヘ: :l \   } ヽ. j/
           /     ヽ{ ,ィー―ヘ   \
             /ー 、     f } /⌒}   //}/⌒ヽ
          /⌒ヽ、ヽ   /^\  こヘ 〃 に⌒ /ヽ、
            {⌒\ ヽ\{\  \}⌒ /   { ,/ /∧
3デフォルトの名無しさん:2008/12/29(月) 13:21:19
    ,,,..-‐‐‐-..,,,
   /::::::::::::::::::::::::ヽ        _,..-‐‐-..,,,
  l::;;-‐‐-:;;::::::::::::ヽ//-‐,,__ /:::::::::::::::::::::ヽ
  l:l    ヽ:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ヽ
  ヽ   /   :::::::::::::::::::::::::::::::::::::;-'^~~^'‐;;:l
   ~ヽ/      ::::::::::::::::::::::::::::::::ヽミ   .ll
    /         :::::::::::::::::::::::::::ヽ  ,.ノ
    /             ::::::::::::::::::::l'^~
  ‐/-,,   (●),    、(●)、 ::::::::::::l フフフ、>>1さんおつかれ
   l  ~^''   ,,ノ(、_, )ヽ、,,       :l
  '''l^^~~~    `-=ニ=- '    -‐‐‐--l-
   ヽ、 ,,,,    `ニニ´     ~^'‐..,,_/
    / (:::::}           ,,,, イ~'''
    l:  ~~           {:::::) ::l
   l:                ~~  l
   l、                 ,l>
   /^‐-,,____,,,,,,,,..................,,,,,,,__,,,.--ヽ
   ~‐‐'~             ^'‐‐~
4デフォルトの名無しさん:2008/12/29(月) 14:42:07
boost::shared_ptr< X > X::Add( boost::shared_ptr< X > x ) {
vec.push_back( x ) ;
return boost::shared_ptr< X >( x ) ;
}

int main(){
boost::shared_ptr< X > x1 ;
boost::shared_ptr< X > x2 ;
boost::shared_ptr< X > x3 ;

x1->Add( x2 ) ; ※
x1->Add( x3 ) ;
}

とやりたいんだけど、これだと※の時点でx1の分が終わった時点で
x1の参照カウントがゼロになってデリートされちゃいます。
Addの引数と戻り値はこのままでうまいことやる方法はありませんか?
5デフォルトの名無しさん:2008/12/29(月) 15:06:27
それだけ見ると
boost::shared_ptr< X > x1 ;
にインスタンス入ってないだけみたいだけど?
6デフォルトの名無しさん:2008/12/29(月) 15:24:29
boost::shared_ptr< X > x1(new X) ;

とやると動くね
7デフォルトの名無しさん:2008/12/29(月) 15:26:31
別に動作に不具合が生じるわけではないが、

boost::shared_ptr< X > x2(new X) ;
boost::shared_ptr< X > x3(new X) ;

もする必要はないのかね。
NULL を Add しても意味ないっしょ。
そして、NULL を Add しようとしても無視するかどうか考える必要もある。
8デフォルトの名無しさん:2008/12/29(月) 15:42:05
boostするメリットって何?
9デフォルトの名無しさん:2008/12/29(月) 15:46:08
>>8
auto_ptrはコンテナに入れられない
10デフォルトの名無しさん:2008/12/29(月) 16:07:29
>>9
う、質問が悪かった
boostを利用するメリットって何?
STLで止まってるんだけど俺
11デフォルトの名無しさん:2008/12/29(月) 16:18:07
>>10
STLを始めとした標準関数・クラスにない機能がboostにはある。
124:2008/12/29(月) 16:20:42
>>6,7
おっしゃるように全てnewします、すみません
13デフォルトの名無しさん:2008/12/29(月) 16:31:01
>>11
具体的に言うと?
1413:2008/12/29(月) 16:34:16
ググったけど
日本に馴染むには時間がかかるね
15デフォルトの名無しさん:2008/12/29(月) 16:38:09
ワロス
16デフォルトの名無しさん:2008/12/29(月) 16:52:10
日本人はやる気が無いからな。
17デフォルトの名無しさん:2008/12/29(月) 17:17:41
エロス
18デフォルトの名無しさん:2008/12/29(月) 17:19:50
テンプレートメタプログラミング
mpl - テンプレートメタプログラミングのフレームワーク。 コンパイル時アルゴリズム、シーケンス、メタ関数クラス。 Aleksey Gurtovoy 作
static_assert - 静的アサート(コンパイル時アサート)。 John Maddock 作
type_traits - 型の基本的な特徴のためのテンプレート。 John Maddock, Steve Cleary, et al 作
プリプロセッサメタプログラミング
preprocessor - 繰り返しと再帰を含むプリプロセッサメタプログラミングツール群。 Vesa Karvonen 作
並列プログラミング
thread - 移植性のある C++ マルチスレッド。 William Kempf 作
数学と計算
math - 数学の領域での多くの貢献。様々な作者による。
conversion - 数学的、多相的、辞書的キャスト Dave Abrahams and Kevlin Henney 作
interval - 数字の範囲に対する通常の数学関数の拡張。Guillaume Melquiond, Herve Bronnimann, Sylvain Pion 作
integer - 汎整数型を簡単に扱うためのヘッダ。
math/common_factor - 最大公約数と最小公倍数。 Daryle Walker 作
math/octonion - 八元数。 Hubert Holin 作
math/quaterion - 四元数。 Hubert Holin 作
日本人作ってねーw
19デフォルトの名無しさん:2008/12/29(月) 17:32:42
実行はできるのですが、表示がおかしいです。どうにかしてください。

#include <stdio.h>
#define BEGIN {
#define END }
#define MAIN int main()
#define PPP =
#define STRINGNISURUUUU(x) #x
#define STRINGNISURUUU(x) STRINGNISURUUUU(x)
#define STRINGNISURUU(x) STRINGNISURUUU(x)
#define PERSPECTIVE(x) STRINGNISURUU(x)
#define PRINT(x) szFileName(PERSPECTIVE(x))
#define PAUSE getchar();
#define RET return 0;

MAIN
BEGIN
    int (*szFileName)() PPP printf;
    PRINT(パースペクティブ京都マン\n);
    PAUSE
    RET
END
20デフォルトの名無しさん:2008/12/29(月) 17:46:06
どうおかしいの
21デフォルトの名無しさん:2008/12/29(月) 17:58:55
なにこの寒いコード
22デフォルトの名無しさん:2008/12/29(月) 18:16:08
どういう意味ですか
23デフォルトの名無しさん:2008/12/29(月) 18:24:20
>>19
こういうのは原則としてやめろ
エディタの補間機能が働かなくなるし
24デフォルトの名無しさん:2008/12/29(月) 18:25:54
補間機能w
25デフォルトの名無しさん:2008/12/29(月) 18:26:39
>こういうのは原則としてやめろ
これは賛同できる

>エディタの補間機能が働かなくなるし
wwwwwwwwwwwwwwwwwwwwwwwwwwwwww
26デフォルトの名無しさん:2008/12/29(月) 18:28:04
HOKANKINOU
27デフォルトの名無しさん:2008/12/29(月) 18:29:08
その補間機能に痴漢機能はありますか
28デフォルトの名無しさん:2008/12/29(月) 18:31:56
>>19
実行したら文字化けした
マジレスすると、"文字列"と#文字列は等価じゃない。
#の方はコードに日本語が混じることになるから、文字化けするよ。
29デフォルトの名無しさん:2008/12/29(月) 18:39:56
うちは化けなかったがなあ
30デフォルトの名無しさん:2008/12/29(月) 18:40:28
>>28
修正したら上手くいきました。ありがとうございます。

>>23
的外れな意見はいりません。私は「なぜ表示がおかしいのか」を聞いたのです。
31デフォルトの名無しさん:2008/12/29(月) 18:41:18
>>29
コンパイラによるんじゃね?俺はBCCでやったら化けたよ。
32デフォルトの名無しさん:2008/12/29(月) 18:43:34
なるほど。化けなかったのはVC++でした。
3328:2008/12/29(月) 18:44:36
あー、じゃあ>>28に書いたことは処理系依存ってことかな
34デフォルトの名無しさん:2008/12/29(月) 18:46:55
つうかプリプロセス結果を確認すれよ
35デフォルトの名無しさん:2008/12/29(月) 18:47:25
あれをどう修正したのか気になるw
36デフォルトの名無しさん:2008/12/29(月) 18:48:35
37デフォルトの名無しさん:2008/12/29(月) 18:56:00
修正しました

#include <stdio.h>

int main(void)
{
    pritnf("パースペクティブ京都マン\n");
    getchar();
    return 0;
}
38デフォルトの名無しさん:2008/12/29(月) 19:01:02
>>37
お前馬鹿か、まだエラーが出るんだけど
WinMainが未解決だよ
39デフォルトの名無しさん:2008/12/29(月) 19:03:20
エ デ ィ タ の 補 間 機 能
40デフォルトの名無しさん:2008/12/29(月) 19:05:27
>>38
Win厨が何寝言ほざいているんだか。
41デフォルトの名無しさん:2008/12/29(月) 19:09:13
まじれすかよ
42デフォルトの名無しさん:2008/12/29(月) 19:10:53
補間機能が働いたんだよ
43デフォルトの名無しさん:2008/12/29(月) 19:12:12
これは補完機能のせいだよ
44デフォルトの名無しさん:2008/12/29(月) 19:16:19
補間機能って便利なのか?
45デフォルトの名無しさん:2008/12/29(月) 19:19:29
23 :デフォルトの名無しさん:2008/12/29(月) 18:24:20
>>19
こういうのは原則としてやめろ
エディタの補間機能が働かなくなるし

らしいよ
46デフォルトの名無しさん:2008/12/29(月) 19:23:00
補完機能だな。
47デフォルトの名無しさん:2008/12/29(月) 19:23:34
補間機能ww
48デフォルトの名無しさん:2008/12/29(月) 19:42:55
ゼルゲノム
49デフォルトの名無しさん:2008/12/29(月) 20:41:23
人類補間計画が発動したと聞いて
50デフォルトの名無しさん:2008/12/29(月) 20:44:06
23 :デフォルトの名無しさん:2008/12/29(月) 18:24:20
>>19
こういうのは原則としてやめろ
エディタの補間機能が働かなくなるし
51デフォルトの名無しさん:2008/12/29(月) 21:15:33
よく考えてみたら「補間」ってどういう意味だかわからねえ
52デフォルトの名無しさん:2008/12/29(月) 21:29:20
それは>>23が知っているんじゃないか?


23 :デフォルトの名無しさん:2008/12/29(月) 18:24:20
>>19
こういうのは原則としてやめろ
エディタの補間機能が働かなくなるし
53デフォルトの名無しさん:2008/12/29(月) 21:46:50
そんなに引っ張るネタか?
54デフォルトの名無しさん:2008/12/29(月) 21:47:48
>>51
( ) を書いたら、関数の引数の数に応じて適切な数のコンマが自動的に挿入されるとか。
55デフォルトの名無しさん:2008/12/29(月) 21:50:21
>>51
間に線引くとか
56デフォルトの名無しさん:2008/12/29(月) 21:56:57
57デフォルトの名無しさん:2008/12/29(月) 21:57:48
23 :デフォルトの名無しさん:2008/12/29(月) 18:24:20
>>19
こういうのは原則としてやめろ
エディタの補間機能が働かなくなるし
58デフォルトの名無しさん:2008/12/29(月) 22:02:16
>>37
#define pritnf printf
が抜けてる
59デフォルトの名無しさん:2008/12/29(月) 22:10:20
修正しました

#include <stdio.h>
#define pritnf printf
int
main
(void)
{pritnf("パースペクティブ京都マン\n");getchar();return 0;}
60デフォルトの名無しさん:2008/12/29(月) 22:11:45
なんか改行が変な感じに。。

#include <stdio.h>
#define pritnf printf

int main(void)
{
    pritnf("パースペクティブ京都マン\n");
    getchar();
    return 0;
}
61デフォルトの名無しさん:2008/12/29(月) 22:15:32
>
62デフォルトの名無しさん:2008/12/29(月) 22:22:47
>>57
ジサクジエン王国?
補完と補間の違いがそんなに気なるか?
明らかに不自然だけど
63デフォルトの名無しさん:2008/12/29(月) 22:40:49
出た、「ジサクジエン」
64デフォルトの名無しさん:2008/12/29(月) 22:41:41
>>62
気になるから貼っているとでも思っているのか
65デフォルトの名無しさん:2008/12/29(月) 22:43:15
必死にレス貼ってる奴は何がしたいの?
66デフォルトの名無しさん:2008/12/29(月) 22:46:48
そんなに貼ってほしいなら・・・

23 :デフォルトの名無しさん:2008/12/29(月) 18:24:20
>>19
こういうのは原則としてやめろ
エディタの補間機能が働かなくなるし
67デフォルトの名無しさん:2008/12/29(月) 22:48:29
変なマクロを避ける主たる理由が補間機能(笑)ねぇ・・・
68デフォルトの名無しさん:2008/12/29(月) 22:49:09
23 :デフォルトの名無しさん:2008/12/29(月) 18:24:20
>>19
こういうのは原則としてやめろ
エディタの補間機能が働かなくなるし
69デフォルトの名無しさん:2008/12/29(月) 22:51:33
23 :デフォルトの名無しさん:2008/12/29(月) 18:24:20
>>19
こういうのは原則としてやめろ
エディタの補間機能が働かなくなるし

53 :デフォルトの名無しさん:2008/12/29(月) 21:46:50
そんなに引っ張るネタか?

62 :デフォルトの名無しさん:2008/12/29(月) 22:22:47
>>57
ジサクジエン王国?
補完と補間の違いがそんなに気なるか?
明らかに不自然だけど

65 :デフォルトの名無しさん:2008/12/29(月) 22:43:15
必死にレス貼ってる奴は何がしたいの?


こういうことですね、分かります
70デフォルトの名無しさん:2008/12/29(月) 23:13:33
>>69
で、君は何が言いたいの?
何を知ってもらいたい?
さっぱりわからんから説明してくれ
71デフォルトの名無しさん:2008/12/29(月) 23:20:58
23 :デフォルトの名無しさん:2008/12/29(月) 18:24:20
>>19
こういうのは原則としてやめろ
エディタの補間機能が働かなくなるし

53 :デフォルトの名無しさん:2008/12/29(月) 21:46:50
そんなに引っ張るネタか?

62 :デフォルトの名無しさん:2008/12/29(月) 22:22:47
>>57
ジサクジエン王国?
補完と補間の違いがそんなに気なるか?
明らかに不自然だけど

65 :デフォルトの名無しさん:2008/12/29(月) 22:43:15
必死にレス貼ってる奴は何がしたいの?

70 :デフォルトの名無しさん:2008/12/29(月) 23:13:33
>>69
で、君は何が言いたいの?
何を知ってもらいたい?
さっぱりわからんから説明してくれ
72デフォルトの名無しさん:2008/12/29(月) 23:22:37
70 デフォルトの名無しさん[sage] 2008/12/29(月) 23:13:33
>>69
で、君は何が言いたいの?
何を知ってもらいたい?
さっぱりわからんから説明してくれ

71 デフォルトの名無しさん[sage] 2008/12/29(月) 23:20:58
23 :デフォルトの名無しさん:2008/12/29(月) 18:24:20
>>19
こういうのは原則としてやめろ
エディタの補間機能が働かなくなるし

53 :デフォルトの名無しさん:2008/12/29(月) 21:46:50
そんなに引っ張るネタか?

62 :デフォルトの名無しさん:2008/12/29(月) 22:22:47
>>57
ジサクジエン王国?
補完と補間の違いがそんなに気なるか?
明らかに不自然だけど

65 :デフォルトの名無しさん:2008/12/29(月) 22:43:15
必死にレス貼ってる奴は何がしたいの?

70 :デフォルトの名無しさん:2008/12/29(月) 23:13:33
>>69
で、君は何が言いたいの?
何を知ってもらいたい?
さっぱりわからんから説明してくれ
73デフォルトの名無しさん:2008/12/29(月) 23:23:09
もういい加減にしてくれ・・・・・・・
74デフォルトの名無しさん:2008/12/29(月) 23:29:06
72 :デフォルトの名無しさん:2008/12/29(月) 23:22:37
70 デフォルトの名無しさん[sage] 2008/12/29(月) 23:13:33
>>69
で、君は何が言いたいの?
何を知ってもらいたい?
さっぱりわからんから説明してくれ

71 デフォルトの名無しさん[sage] 2008/12/29(月) 23:20:58
23 :デフォルトの名無しさん:2008/12/29(月) 18:24:20
>>19
こういうのは原則としてやめろ
エディタの補間機能が働かなくなるし

53 :デフォルトの名無しさん:2008/12/29(月) 21:46:50
そんなに引っ張るネタか?

62 :デフォルトの名無しさん:2008/12/29(月) 22:22:47
>>57
ジサクジエン王国?
補完と補間の違いがそんなに気なるか?
明らかに不自然だけど

65 :デフォルトの名無しさん:2008/12/29(月) 22:43:15
必死にレス貼ってる奴は何がしたいの?

70 :デフォルトの名無しさん:2008/12/29(月) 23:13:33
>>69
で、君は何が言いたいの?
何を知ってもらいたい?
さっぱりわからんから説明してくれ
75デフォルトの名無しさん:2008/12/29(月) 23:31:00
61 :デフォルトの名無しさん:2008/12/29(月) 22:15:32
>
61 :デフォルトの名無しさん:2008/12/29(月) 22:15:32
>
61 :デフォルトの名無しさん:2008/12/29(月) 22:15:32
>
61 :デフォルトの名無しさん:2008/12/29(月) 22:15:32
>
61 :デフォルトの名無しさん:2008/12/29(月) 22:15:32
>
76デフォルトの名無しさん:2008/12/29(月) 23:35:51
                        /^\_
               ,ィー‐ '⌒´ : : : : ヽ: `ヽ、
          , :≦7: : : : : : : : : : : : : : :ヘ : : : \
         /: : : /: : : : : : : : : : :∧: : : : :', : : : : :\
    rー<⌒\_:_ /: : : : : : :/ : : : :} ',: : : : :}: : :ヽ: : : \
    |: : : : l::..::..:ヽ/: :/ : : : :/ /⌒′│j: : : ト: : : ヘ \: :ヽ、
    |: : : : |:::::::::::' : / : : : :│: : : /   |:ハ : : |ハ: :l : |: : :ヘ
    |: : : : |::::::::::i :│ : : : : { : : : ,イ气 リ ヘ : 心}: }: :|: : : :}
.   /|: : : : }::::::::::| : | : : : : /l: : :/{::ヘ_∧   j/{rイ: | : h: : :′
   ' :|: : : : l::::::::::{: ∧: : : /:ヘ: 〈{ Y: : :}     Y: |: / }: /
  {.:::|: : : : |::::::::::W::{ : :/ : : :V  ゞzソ     \W ,j/
  └┤: : : ヘ:___/⌒l: /: : : : :|    "   rー┐  }:ヘ
    | i: : : : : ヘ ー {^W{: : : i: |      { .__{  厶/   >>1 乙!
    | }: : : : : : { : : ヽ、_|: : : l: l           / }
    |八: : : :∧ヽ`゛<ム : : h:{   ____ , く: : :│
    |{ }: : /  ヽ{     }: : :|ヘヽ、 /} : 八 } : : |
.      j/       ∧ : ト、\  ヽ\}  |: /リ
              / ヘ: :l \   } ヽ. j/
    ,,,..-‐‐‐-..,,,
   /::::::::::::::::::::::::ヽ        _,..-‐‐-..,,,
  l::;;-‐‐-:;;::::::::::::ヽ//-‐,,__ /:::::::::::::::::::::ヽ
  l:l    ヽ:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ヽ
  ヽ   /   :::::::::::::::::::::::::::::::::::::;-'^~~^'‐;;:l
   ~ヽ/      ::::::::::::::::::::::::::::::::ヽミ   .ll
    /         :::::::::::::::::::::::::::ヽ  ,.ノ
    /             ::::::::::::::::::::l'^~
  ‐/-,,   (●),    、(●)、 ::::::::::::l
77デフォルトの名無しさん:2008/12/29(月) 23:38:37
    ,,,..-‐‐‐-..,,,
   /::::::::::::::::::::::::ヽ        _,..-‐‐-..,,,
  l::;;-‐‐-:;;::::::::::::ヽ//-‐,,__ /:::::::::::::::::::::ヽ
  l:l    ヽ:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ヽ
  ヽ   /   :::::::::::::::::::::::::::::::::::::;-'^~~^'‐;;:l
   ~ヽ/      ::::::::::::::::::::::::::::::::ヽミ   .ll
    /         :::::::::::::::::::::::::::ヽ  ,.ノ
    /             ::::::::::::::::::::l'^~
  ‐/-,,   (●),    、(●)、 ::::::::::::l
そう…。そのまま飲み込んで。僕のエクスカリバー…
78デフォルトの名無しさん:2008/12/29(月) 23:40:26
なんでだよw
79デフォルトの名無しさん:2008/12/29(月) 23:47:31
printf(">>77ってなんか元ネタがあるの?\n");
80デフォルトの名無しさん:2008/12/29(月) 23:50:04
scanf("ハム太郎だと思われ", &n);
81デフォルトの名無しさん:2008/12/30(火) 00:01:45
82デフォルトの名無しさん:2008/12/30(火) 00:11:19
while (1) cout << _T("これがBLというやつか") << endl;
83デフォルトの名無しさん:2008/12/30(火) 00:18:34
ハム太郎ってBLものだっけ
84デフォルトの名無しさん:2008/12/30(火) 01:14:01
#include <stdio.h>

int sum(int,int);

int main(void);
{
int ham;

ham = sum(50,20);

printf("%d\n",ham);

printf("%d\n",ham + 20);

return 0;
}

int sum(int mix,int max)
{
int num;

num = (mix + max) / 2 * 3 -100;

return num;
}
6) : error C2447: '{' : 対応する関数ヘッダーがありません (旧形式の仮引数リスト?)

なにがちがうんじゃあああ
85デフォルトの名無しさん:2008/12/30(火) 01:17:23
int main(void); ←!!!!!!!
86デフォルトの名無しさん:2008/12/30(火) 01:18:02
そ・・そうか!!!
サンクス!
87デフォルトの名無しさん:2008/12/30(火) 01:56:20
STLにマルチスレッド
例外発生しまくりなんだけど
なにかいいソースコード入力方法ない?
デバック追跡機能追加ともいいのかな
やっぱクリティカルセクション使わなければいけないのかな?
面倒くさいのよね
88デフォルトの名無しさん:2008/12/30(火) 02:02:16
STLはスレッドアンセーフだからマルチスレッドでは使っちゃダメ
別のスレッドセーフに設計されたライブラリを使いなさい
89デフォルトの名無しさん:2008/12/30(火) 02:12:25
>>88
クリティカルセクションで保護しても無理ですかね?
90デフォルトの名無しさん:2008/12/30(火) 02:14:50
>>89
速度がガタ落ちになってもいいならそれでどうぞ
91デフォルトの名無しさん:2008/12/30(火) 02:36:06
>>36
俺はそこで引き合いに出されている診断室を思い出したw
92デフォルトの名無しさん:2008/12/30(火) 12:09:13
スマートポインターを7種類も8種類も作って、C++のコミュニティって馬鹿なの?

これを用途によって間違わずに使い分けるより、new-deleteの対応付けをきっちりやる方が余程簡単だっつーのw
ホント馬鹿だな。
93デフォルトの名無しさん:2008/12/30(火) 12:09:22
プログラムの進捗状況をグラフみたいので表示したいんだが、
グラフィックスライブラリって何がいい?
今から勉強するんだが
94デフォルトの名無しさん:2008/12/30(火) 12:11:03
プロジェクト管理ツール使ってみては
95デフォルトの名無しさん:2008/12/30(火) 12:14:42
C++は標準のGCを備えない時代遅れのダメ言語

スマートポインタ(笑)を乱造する知的障害者が設計している
96デフォルトの名無しさん:2008/12/30(火) 12:28:09
>>95 またお前か。スマートポインタの種類の数にやたら固執するね。
97デフォルトの名無しさん:2008/12/30(火) 13:12:08
3つ以上は使いこなせなくて挫折したんだろ。
98デフォルトの名無しさん:2008/12/30(火) 13:17:01
GCは良いことばかりではないよ。処理に時間食うし。 
あと何度も使う配列はグローバルにすれば、再生成に時間食わない。
99デフォルトの名無しさん:2008/12/30(火) 13:18:20
プログラム書く前に吟味してから作り出せばGC(に任せる処理)は無くせるだろ。
100デフォルトの名無しさん:2008/12/30(火) 13:49:40
>>99
それならスマートポインタ(笑)もいらないだろ馬鹿
101デフォルトの名無しさん:2008/12/30(火) 13:50:30
>>100
RAIIを知らない馬鹿が出てきたよ
102デフォルトの名無しさん:2008/12/30(火) 14:03:27
マジレスすると、
単純にnew delete の解放忘れで発生するバグと
ごちゃごちゃしたスマートポインタの使い間違いによるバグと
どっちが発生しやすいと思う?

後者の方が断然多いと思うのだが。
103デフォルトの名無しさん:2008/12/30(火) 14:12:15
>>77みたいなのがスマートポインタ?
104デフォルトの名無しさん:2008/12/30(火) 14:16:44
ゴチャゴチャしたスマートポインタって、たとえばどんな?
105デフォルトの名無しさん:2008/12/30(火) 14:25:06
auto_ptr
weak_ptr
intrusive_ptr
scoped_ptr
106デフォルトの名無しさん:2008/12/30(火) 14:26:17
>>105
それをゴチャゴチャしていると感じるなら、単にそれはお前の勉強不足。
自分の勉強不足を棚に上げてよく言うよ
107デフォルトの名無しさん:2008/12/30(火) 14:29:46
スマートポインタですら管理できないならC/C++はやめた方が・・・
108デフォルトの名無しさん:2008/12/30(火) 14:33:19
>>106
で、new-deleteよりスマートポインタの方が問題が発生しにくいことについて、
お前の「勉強」の成果は述べないの?
109デフォルトの名無しさん:2008/12/30(火) 14:35:21
>>108
人の事を気にする前に自分の能の無さを嘆けよw
110デフォルトの名無しさん:2008/12/30(火) 14:39:43
new-deleteの方が、スマートポインタより問題が少ないという仮説を述べた。
それに対して>>106は勉強不足とか頓珍漢な事を言っている。

勉強不足と言うなら、どう勉強不足なのか具体的に説明しろ。
それが出来ないなら>>106は単なる馬鹿だ。話にならん。
111デフォルトの名無しさん:2008/12/30(火) 14:43:54
>>110
うぜえんだよゴチャゴチャと
スマートポインタについて説明しだすと長くなる
勉強にも長い時間がかかるしな

お前の屁理屈に付き合ってる時間はない
112デフォルトの名無しさん:2008/12/30(火) 14:46:22
仮説って・・・
根拠もなく「俺は思うのだが」を仮説と呼ぶのか?
113デフォルトの名無しさん:2008/12/30(火) 14:51:39
シチューの方が、カレーよりうまいという仮説を述べた。
それに対して>>106は食わず嫌いだとか頓珍漢な事を言っている。

食わず嫌いと言うのなら、どう食わず嫌いなのか具体的に説明しろ。
それが出来ないなら>>106は単なる馬鹿だ。話にならん。
114デフォルトの名無しさん:2008/12/30(火) 15:10:05
GCもnewも使わず、STL一本でいけば良いと思うんだが。
そしたら自動変数と同じ使い方でしょ。
115デフォルトの名無しさん:2008/12/30(火) 15:11:36
速度や安定性重視ならはじめに確保したメモリを使い回すのが良いし。
頻繁に動的確保するのは、速度と安定面でよくない。
116デフォルトの名無しさん:2008/12/30(火) 15:15:46
STLを含めて動的確保は実測してみると速度が遅い。
C++の自動変数だと、あらかじめ確保した領域を、使い回すから、確保と解放が無くて良い。
117デフォルトの名無しさん:2008/12/30(火) 15:39:07
>>116
自動変数はスタック領域だから、あらかじめ確保した領域を使いまわすってのは
ちょっと違うだろ

まぁ 「厳密にいえば間違ってはいない」 ってやつだろうが
118デフォルトの名無しさん:2008/12/30(火) 15:40:43
ageてる釣り野郎に反応しちゃダメだってば
119デフォルトの名無しさん:2008/12/30(火) 15:53:49
スタック領域 = あらかじめ確保した領域

必要なサイズがコンパイル時に決定されて、それを確保したらC++が管理して使い回す。
120デフォルトの名無しさん:2008/12/30(火) 16:21:57
スマートポインタに迷ったらshared_ptr/array使っておけばいいじゃない。
循環参照?何それおいしいの?

まあでもスマートポインタの乱立を許したのはC++の失策だったと思う。
auto_ptrの代わりにshared_ptrをC++98の時点で入れておけば少しは良くなったと思うんだけど。
121デフォルトの名無しさん:2008/12/30(火) 16:25:14
>>108
こいつ頭おかしいな。
これで仕事とか勤まるのか?
122デフォルトの名無しさん:2008/12/30(火) 16:27:29
>>121
こいつ頭おかしいな。
これで仕事とか勤まるのか?
123デフォルトの名無しさん:2008/12/30(火) 16:29:37
自作自演くせえなあ
1244:2008/12/30(火) 16:30:05
4ですが、あまりのスルーされっぷりに泣きそうです
125デフォルトの名無しさん:2008/12/30(火) 16:32:59
126デフォルトの名無しさん:2008/12/30(火) 16:43:10
>>123
だってマジで頭おかしいもん。
new-deleteのほうが問題起きないって、証明どころか傍証をあげるとか
説明もいっさいなしで、>>108の頭の中では、いつのまにか証明済みっていうか
「事実」になちゃってるわけでしょ?

>>110で、多少おかしいと思ったのか「仮説」って言い直してるけど、
自分から言い出したのに、相変わらず相手に反論しろって言ってるし。
127デフォルトの名無しさん:2008/12/30(火) 16:50:11
new-deleteでは、newしたら必ずdeleteすることだけを覚えておけば問題が起きない。

スマートポインタは乱立するそれぞれのポインタの特性を覚えておかなければいけない。
例えば、shared_ptrを使うところをweak_ptr を使ったら死亡。

故に、new-deleteの方が問題起きない。

証明終
128デフォルトの名無しさん:2008/12/30(火) 16:51:39
>>127
俺がいまいじってるソースは、異常ケースでreturnして、delete忘れてるってのが
何箇所もあるんだけど。
129デフォルトの名無しさん:2008/12/30(火) 16:52:36
>>128
それはお前があほなだけ
130デフォルトの名無しさん:2008/12/30(火) 16:54:21
すげぇ真性のバカだな
証明終
とか書いちゃってもうみてらんない
131デフォルトの名無しさん:2008/12/30(火) 16:56:18
注意してコーディングしてればなんとかなるってもんじゃないから、
あたらしい言語はGC採用してるんだろ。
132デフォルトの名無しさん:2008/12/30(火) 16:59:13
つまり、C++は標準のGCを備えない時代遅れのダメ言語ってことだな。
133デフォルトの名無しさん:2008/12/30(火) 17:01:52
もうそういう事でいいようぜぇ
134デフォルトの名無しさん:2008/12/30(火) 17:02:26
悔しいが、反論できない、、
135デフォルトの名無しさん:2008/12/30(火) 17:03:54
C++/CLIがあるじゃないか
136デフォルトの名無しさん:2008/12/30(火) 17:03:57
Dみたいに、GCあって、スコープが外れたらデストラクタ(相当)が呼ばれるって
仕組みがあればいいけど、ま、C++ならスマートポインタでいいかな。
137デフォルトの名無しさん:2008/12/30(火) 17:06:10
auto と同じ使い方だけで良いんだったらSTL使えばいいじゃん
138デフォルトの名無しさん:2008/12/30(火) 17:07:05
GCはメモリに対してリークの心配がなくなるというだけであって、
それ以外のリソースには無力だぞ
139デフォルトの名無しさん:2008/12/30(火) 17:09:22
>>130
反論できないからってごまかしてんじゃねーよカス
140デフォルトの名無しさん:2008/12/30(火) 17:11:30
GCが標準装備だったら、高性能なハードでない場合に困るだろ。
組み込みとか

組み込みシステム - Wikipedia

具体例
家庭用電気機械器具
炊飯器、洗濯機、エアコンディショナー
デジタルカメラ
テレビ、ビデオデッキなどAV機器
ゲーム機、携帯電話などのデジタル家電
エレベーター
信号機
複写機
自動販売機
パチンコ機、パチスロ機、スロットマシン
141デフォルトの名無しさん:2008/12/30(火) 17:13:54
世の中、参照カウントでGC付きって言っている言語処理系だってあるんだから、
C++でコーディングするときも常にshared_ptrを使えばいいんだよ。

>>127の「newしたら必ずdeleteすること」を次のように言い換える。
new→newしてshared_ptrの構築
delete→reset()
128の問題は無くなるし、循環参照もnew-deleteで(手動でやれば)問題にならないならば、
shared_ptrでも手動でやれば問題ないはず。

性能とか組込とか知らんがなという前提で。
142デフォルトの名無しさん:2008/12/30(火) 17:18:21
ガベージコレクションはプログラムの本来の動作とは別に時間のかかる処理であり、実装によっては一旦処理が開始されると他の処理を止め、CPUを長時間(数百ミリ秒から数十秒)占有することもある。
さらに、ガベージコレクションの動作タイミングの予測やCPUの占有時間の事前予測などが困難なことから、デッドラインが決められてるリアルタイムシステムには向いていない。


ガベージコレクション - Wikipedia
http://ja.wikipedia.org/wiki/%E3%82%AC%E3%83%99%E3%83%BC%E3%82%B8%E3%82%B3%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3
143デフォルトの名無しさん:2008/12/30(火) 17:19:32
あんまり関数を分けると重くなるから良くないって聞いたことあるけど、それって
昔のCPUがしょぼしょぼの時の話しで今ではそれほど気にしなくていい?
たまに数行づつで関数に分けてる人いるけどそのぐらいまでやっちゃっていいの?
144デフォルトの名無しさん:2008/12/30(火) 17:22:38
>>143
程度によるが、最新のコンパイラを使っていれば差はたいしてでない。
分割したりオブジェクト指向にすることは、管理が楽になるという利点がある。
145デフォルトの名無しさん:2008/12/30(火) 17:25:21
でも、再帰呼び出しは確実に遅くなるよ。ループに書き換えられるという再帰定理というのがあるので
なるべく再帰呼び出しは使わない方が良い。
146デフォルトの名無しさん:2008/12/30(火) 17:26:55
「早すぎる最適化は諸悪の根源」

実行性能が許容できないくらい悪くて、その原因が本当に
関数呼び出しのコストだと分かった時点で初めて
そういう小手先の手段に出るものだ

そんな関数の分け方くらいではまず間違いなく性能に何の影響もないと思うが
147デフォルトの名無しさん:2008/12/30(火) 17:27:36
>>143
数行とか一行の関数を書くとか普通だから。
148デフォルトの名無しさん:2008/12/30(火) 17:29:27
>>139
おまえは常に「覚えておいて」プログラム組んでろカス
149デフォルトの名無しさん:2008/12/30(火) 17:30:33
>>145
意味が分からない。
「末尾再帰だったら、再帰でもいい」とかだったら意味が通じるけど。
(再帰だって、速度に問題なかったらふつーに使うわな。あたりまえだけど)
150デフォルトの名無しさん:2008/12/30(火) 17:31:25
再帰はループに書き換えられるよ!って言ってるんだろう
151デフォルトの名無しさん:2008/12/30(火) 17:35:07
関数呼び出しに、時間食ってるのでは? と予測してマクロ関数に書き換えてみたり
するのだが、ほとんど差が出ないという経験から関数として\を使うマクロは使わないことにしている。
152デフォルトの名無しさん:2008/12/30(火) 17:39:09
ありがとう。とりあえずガンガン関数に分けちゃって問題ないんだね
これからはガンガン分けていくことにします
153デフォルトの名無しさん:2008/12/30(火) 17:44:46
MS-BASICはガベージコレクション内蔵らしいね
154デフォルトの名無しさん:2008/12/30(火) 17:47:08
>>143
数行の関数を作ってもOKだし推奨

関数の呼び出しのコストが問題になるのはループ内とかとにかく繰り返し多数呼び出される場合だね。そういう場合はinlineを使う。
仮想関数は少し重めだからループ内では要注意

最近のコンパイラはinlineの指定をしなくても勝手に判断してインライン展開をしてくれるから気にしないでいい。
155デフォルトの名無しさん:2008/12/30(火) 17:52:21
>>153
ああ文字列の操作領域だろ
確か3Kバイトが標準で一杯になったらGCを走らせる
8ビットならではの世界だった

N88BASIC(86)はもう少し広いだろうが
156デフォルトの名無しさん:2008/12/30(火) 18:01:55
突然マイコンが止まるあれだね

157デフォルトの名無しさん:2008/12/30(火) 18:11:57
そうそう
BASICで文字列を頻繁に操作していると時々止まった
その謎が解けるまで(つまりはGCだという事を知るまで)時間がかかった
158デフォルトの名無しさん:2008/12/30(火) 18:29:05
GC GCってゲームキューブじゃないのなw
何の騒ぎかわからんかったよ
159デフォルトの名無しさん:2008/12/30(火) 18:31:28
>158
ゲーム関連板ならゲームキューブのことだろうけど
ここはプログラム板だぞw ガベージコレクションに決まっておろう
160デフォルトの名無しさん:2008/12/30(火) 19:07:49
どの言語を覚えればいいの・・?
C言語ってだめなの??
161デフォルトの名無しさん:2008/12/30(火) 19:09:13
Cでいいよ。C++でもいいけど。
162デフォルトの名無しさん:2008/12/30(火) 19:25:30
C++ってCの付けたし見たいなものだよね・・?
163デフォルトの名無しさん:2008/12/30(火) 19:26:54
CがC++の一部を抜き出したものだと思え
164デフォルトの名無しさん:2008/12/30(火) 19:28:13
わかりました
165デフォルトの名無しさん:2008/12/30(火) 19:29:05
>>162
いまや全くの別物のくせに、そういう偏見が間違っているとも言えない微妙な関係。
166デフォルトの名無しさん:2008/12/30(火) 19:37:27
まあ、質問スレを共通にされるくらいだから、同じようなものだ
167デフォルトの名無しさん:2008/12/30(火) 20:50:04
結論としては、shared_ptr以外は不要ってことで、おk?
168デフォルトの名無しさん:2008/12/30(火) 20:52:27
>>167
他のスマートポインタも使い方憶えればいいんじゃない?
169デフォルトの名無しさん:2008/12/30(火) 20:55:54
struct shiken_in test;

memset(&test,0,sizeof(test));

このような文があるのですが、
&testがさす意味はなんなのでしょうか?
&がつく意味がよくわからないのです
170デフォルトの名無しさん:2008/12/30(火) 20:58:52
アドレスです
171デフォルトの名無しさん:2008/12/30(火) 21:02:39
>>168
覚えたとしても、それらを使い間違わないようにビクビクしながら使うよりは、
単純にshared_ptr使った方が、バグが少ない堅いコーディングができると思うけど。
172デフォルトの名無しさん:2008/12/30(火) 21:07:19
>>170
ポインタの宣言がなくてもアドレスは使用可なのでしょうか
ていうか、子の場合アドレスで指定する意味はなんでしょうか?
173デフォルトの名無しさん:2008/12/30(火) 21:10:39
コピーを避けるためです。
174デフォルトの名無しさん:2008/12/30(火) 21:30:52
ポインタならコピーをされる?
175デフォルトの名無しさん:2008/12/30(火) 21:38:00
ポインタなら、ポインタだけ渡せばいいからデータ自体はコピーされない
176デフォルトの名無しさん:2008/12/30(火) 21:43:01
>>167
自ら使うのはshared_ptrだけでもいい。次期標準にも入る。

入るおかげで、C++0xでは、標準に入っていないのは無視してOKと言えるようになるんだが。
例えば、>>105で挙げられているintrusive_ptrは知っていても大多数が使ったことないだろう(俺もだ)。
scoped_ptrはauto_ptrとまとめてunique_ptrになる。
#びくびくせず自信を持って使えるならweak_ptrも使ってほしい。
177169:2008/12/30(火) 21:51:30
ますますよくわからなくなってきた

まず、構造体を宣言して
sizeof(test)でなにをかえすんだろうか
testの中身は宣言だけしてるだけで、実際何もはいってない?いや、0ならはいってるのかな
で、memsetでそのtestのアドレスの先頭からだけど、testのアドレスの中身じゃなくて、アドレスの
先頭から0で埋めるとかおかしくないのかな。アドレスであってアドレスが差す値じゃないから。
178デフォルトの名無しさん:2008/12/30(火) 21:57:22
memsetは、アドレスが指す領域を指定した値で埋める関数だよ
179デフォルトの名無しさん:2008/12/30(火) 21:57:33
sizeof testはsizeof (struct shiken_in)と同じと決まっている。
memsetにはアドレスを渡すけど、
memsetが0で埋めるのは、アドレスが差す値。
180デフォルトの名無しさん:2008/12/30(火) 21:59:08
変数じゃなくて、変数の「場所」を渡してる
memsetはその「場所」をみてそこをsizeof(test)バイト分0で埋めてる
181デフォルトの名無しさん:2008/12/30(火) 22:15:59
>>171
まあ、でも、そこまで難しいものでもないし。
182169:2008/12/30(火) 22:20:36
実際、sizeof(test)は何バイトになるのでしょうか?

183デフォルトの名無しさん:2008/12/30(火) 22:22:30
わかりません
184デフォルトの名無しさん:2008/12/30(火) 22:26:41
>>182
testの型による。
testはどう宣言してるの?
185169:2008/12/30(火) 22:40:44
struct shiken_in test;

>>184
はい、このように宣言しております
186デフォルトの名無しさん:2008/12/30(火) 22:47:17
やべぇちょっと笑ってしまった
187デフォルトの名無しさん:2008/12/30(火) 22:58:22
structなんだからstruct shiken_in がなんなのか探せ
188デフォルトの名無しさん:2008/12/30(火) 23:00:07
そもそも shiken_in が分かったところで
アラインメントの設定が分からんとサイズは分からんだろ。
189デフォルトの名無しさん:2008/12/30(火) 23:02:16
>182
shiken_in のサイズになる。
具体的には環境による。
190169:2008/12/30(火) 23:05:34
sockaddr_in
すみません、正確にはこういう構造体です
中身はかいてません。sizeofしたら何バイトになるのかな?
191デフォルトの名無しさん:2008/12/30(火) 23:06:45
sizeof すればいいじゃん。
192デフォルトの名無しさん:2008/12/30(火) 23:13:27
だから構造体のメンバの内容とアライメントの2つの情報がないと誰にも答えられないんだってば。
そして理屈抜きでサイズだけ知りたいなら5行くらいのソースを書いてsizeofを見るのが一番早い。
193デフォルトの名無しさん:2008/12/30(火) 23:27:35
typedef struct DADADADADADADA
{
    char p[1024];
} CDDB;

CDDB cddb;

int main(void)
{
    return cddb;
}
194デフォルトの名無しさん:2008/12/30(火) 23:28:33
printf("sizeof(struct sokaddr_in)=%d\n", sizeof(struct sockaddr_in));
195デフォルトの名無しさん:2008/12/30(火) 23:36:16
printf("%d\n", sizeof(printf));
196デフォルトの名無しさん:2008/12/31(水) 12:48:14
>>140
言語が標準GCを備えることと、GCが言語の使用と不可分でシステムに組み込まれることとは別だろ。

「高性能なハード」とやらの場合には、GCを組み込んで
「高性能なハード」でない場合には、GCを組み込まず手動のメモリ管理を使用してシステムを構築すればいい。

C++はマルチパラダイム言語とやらを標榜するくらいだから、それくらい普通にするだろ。

それなのに何故標準GCを提供しないのか意味不明。
きっと言語設計者およびその取り巻きはバカなんだろうな。
197デフォルトの名無しさん:2008/12/31(水) 12:55:47
ということにしたいのですね
198デフォルトの名無しさん:2008/12/31(水) 12:58:24
したいのではなく、事実なのです。
199デフォルトの名無しさん:2008/12/31(水) 12:58:42
>>196
高性能なハードでない場合には手動のメモリ管理を使用してってwwwwwwww
その辺が自動化できればGCを導入するのに必要な苦労がいないし、GCもいらないじゃんwwww
バカかこいつは
200デフォルトの名無しさん:2008/12/31(水) 12:59:16
ということにしたいのですね
201デフォルトの名無しさん:2008/12/31(水) 12:59:29
>>199
お前は、先ず日本語を勉強しろ。
202デフォルトの名無しさん:2008/12/31(水) 13:00:23
>>196
GCの有無で言語仕様が大きく変わるんだよ。
GCが必要な人はGCを持つ言語を使えばいい。GCが不要な人はGCがない言語を使えばいい。
203デフォルトの名無しさん:2008/12/31(水) 13:04:28
>>202
変わるのではなく、パラダイムが追加されればいいんだろ。
GCが必要な人はC++をGCを持つ言語として使えばいい。GCが不要な人はC++をGCがない言語として使えばいい。

C++はそういうことが得意な言語じゃないのか?
204デフォルトの名無しさん:2008/12/31(水) 13:05:56
C++はgcがない言語
205デフォルトの名無しさん:2008/12/31(水) 14:17:07
>>203
パラダイムという言葉を使わずに、C++にGCを実装するのに必要なことは何か言ってごらん。
206デフォルトの名無しさん:2008/12/31(水) 14:18:57
ゲームキューブで議論するスレだったのか
207デフォルトの名無しさん:2008/12/31(水) 14:21:44
C++/CLI使えばいいじゃん
208デフォルトの名無しさん:2008/12/31(水) 14:27:23
>>203
一方C++はスマートポインタを実装した。
209デフォルトの名無しさん:2008/12/31(水) 14:36:33
一方STL野郎は独自のアルゴリズムを実装した
210デフォルトの名無しさん:2008/12/31(水) 15:00:21
>>205
先ず、お前の勘違いを訂正する。
実装するのはC++にではなく、C++の処理系に対して。

C++の処理系にGCを実装するのに必要なことは
GCの設計/コーディング/デバグ

それ以前に、C++の言語仕様にGCの仕様を追加する必要がある。
211デフォルトの名無しさん:2008/12/31(水) 15:07:23
お手軽に付け外しができる機能とでも思ってるのか
212デフォルトの名無しさん:2008/12/31(水) 15:09:38
日本語でおk
213デフォルトの名無しさん:2008/12/31(水) 15:28:19
お前らがグダグダ何と言おうが、既に将来の規格改定でGC導入は間違いない路線。
残念ながらC++0xには間に合わなさそうだけど。

現状こんな感じ。
ttp://d.hatena.ne.jp/faith_and_brave/20081117/1226913980
214205:2008/12/31(水) 15:36:48
>>210
よし、訂正された。
つづきをどーぞ
215デフォルトの名無しさん:2008/12/31(水) 15:39:09
>>214
何の続き?
216デフォルトの名無しさん:2008/12/31(水) 16:52:51
C++0x
217デフォルトの名無しさん:2008/12/31(水) 17:19:59
素晴らしいオセロゲームを作りたいんですが・・・

作れるようになるまでに、どれくらいかかるんでしょうか?
218デフォルトの名無しさん:2008/12/31(水) 17:24:45
自分が出来を素晴らしいと思えるようになるまで。
219デフォルトの名無しさん:2008/12/31(水) 17:32:14
3ヶ月くらい
220デフォルトの名無しさん:2008/12/31(水) 17:37:55
>>217
>>23の言う補間機能を使うといいよ
221デフォルトの名無しさん:2008/12/31(水) 17:48:14
23 :デフォルトの名無しさん:2008/12/29(月) 18:24:20
>>19
こういうのは原則としてやめろ
エディタの補間機能が働かなくなるし
222デフォルトの名無しさん:2008/12/31(水) 17:49:40
>>217
素晴らしいの意味によるし、経験にも依るでしょ。
強いという意味なら自分で考えるならそれなりに解析が必要。
見栄えという意味ならお絵描き/画像作りが必要。
223デフォルトの名無しさん:2008/12/31(水) 18:03:39
どれくらいって聞いてるのに、グダグダうるせーっつーの。
お前らは期間を示せばいいんだよ。前提があるなら前提も示せっつーの。
224デフォルトの名無しさん:2008/12/31(水) 18:18:45
>>223
わざわざ答えてもらってるのに失礼じゃないですか
そういうレスはやめてください
225デフォルトの名無しさん:2008/12/31(水) 18:25:28
>>224
いや、答えてないから。
226デフォルトの名無しさん:2008/12/31(水) 18:30:49
>>225
グダグダうるせーよwwwww
227デフォルトの名無しさん:2008/12/31(水) 18:37:07
223 :デフォルトの名無しさん:2008/12/31(水) 18:03:39
どれくらいって聞いてるのに、グダグダうるせーっつーの。
お前らは期間を示せばいいんだよ。前提があるなら前提も示せっつーの。
228デフォルトの名無しさん:2008/12/31(水) 18:38:11
223 :デフォルトの名無しさん:2008/12/31(水) 18:03:39
どれくらいって聞いてるのに、グダグダうるせーっつーの。
お前らは期間を示せばいいんだよ。前提があるなら前提も示せっつーの。
229デフォルトの名無しさん:2008/12/31(水) 18:55:27
>>222
C言語を学ぶだけではなく、絵もうまくなる必要があるってことですね!
230デフォルトの名無しさん:2008/12/31(水) 19:03:15
223 :デフォルトの名無しさん:2008/12/31(水) 18:03:39
どれくらいって聞いてるのに、グダグダうるせーっつーの。
お前らは期間を示せばいいんだよ。前提があるなら前提も示せっつーの。
231デフォルトの名無しさん:2008/12/31(水) 19:05:11
223 :デフォルトの名無しさん:2008/12/31(水) 18:03:39
どれくらいって聞いてるのに、グダグダうるせーっつーの。
お前らは期間を示せばいいんだよ。前提があるなら前提も示せっつーの。
232デフォルトの名無しさん:2008/12/31(水) 19:14:34
223 :デフォルトの名無しさん:2008/12/31(水) 18:03:39
どれくらいって聞いてるのに、グダグダうるせーっつーの。
お前らは期間を示せばいいんだよ。前提があるなら前提も示せっつーの。
233デフォルトの名無しさん:2008/12/31(水) 19:25:07
>>223
期間 : 5か月くらい
前提 : 俺が作るとして
234デフォルトの名無しさん:2008/12/31(水) 19:44:37
>>219 >>233
thx
235デフォルトの名無しさん:2008/12/31(水) 19:44:41
223 :デフォルトの名無しさん:2008/12/31(水) 18:03:39
どれくらいって聞いてるのに、グダグダうるせーっつーの。
お前らは期間を示せばいいんだよ。前提があるなら前提も示せっつーの。
236デフォルトの名無しさん:2008/12/31(水) 20:27:30
223 :デフォルトの名無しさん:2008/12/31(水) 18:03:39
どれくらいって聞いてるのに、グダグダうるせーっつーの。
お前らは期間を示せばいいんだよ。前提があるなら前提も示せっつーの。
237デフォルトの名無しさん:2008/12/31(水) 23:07:08
なんか、新しいスレになってから荒れてるね
238デフォルトの名無しさん:2008/12/31(水) 23:16:17
223 :デフォルトの名無しさん:2008/12/31(水) 18:03:39
どれくらいって聞いてるのに、グダグダうるせーっつーの。
お前らは期間を示せばいいんだよ。前提があるなら前提も示せっつーの。
239デフォルトの名無しさん:2009/01/01(木) 00:17:12
だめだ・・・僕にはプログラミングなんて・・無理かもしれない・・
240デフォルトの名無しさん:2009/01/01(木) 00:31:42
なぜ?具体的に。
241デフォルトの名無しさん:2009/01/01(木) 00:39:35
・・いま苦Cで文字列を扱う方法してるんですけど・・
そこで少し分厚い壁に当たってしまいました・・
こんなしょっぱなから壁にぶつかるようじゃ、俺にC言語習得なんて無理なんじゃないか・・?
って考えてます・・
242デフォルトの名無しさん:2009/01/01(木) 00:45:46
全然具体的じゃないきがするなぁ
プログラムでつまづくのは別にいいけど「良い質問/相談」を持ちかけるのはやっぱり必要だとオモ

あ、あけましておめでとう
243デフォルトの名無しさん:2009/01/01(木) 00:53:22
>>241
web で勉強してるの?個人的には本一冊買った方が良いと思うなぁ。
あと、論理的思考能力とやる気さえあればプログラミングはできるよ。
244デフォルトの名無しさん:2009/01/01(木) 01:00:58
あけましておめでとうございます

>>243
よし!本を買うことにします
245デフォルトの名無しさん:2009/01/01(木) 02:00:08
>>241
俺もWEBで勉強した

で、した感想

本買ったほうが100倍速いぞw
246デフォルトの名無しさん:2009/01/01(木) 02:31:11
やはり、特に用途がないものを学ぶのは辛いもの。
勉強でやってるなら、とりあえず作ってみて
必要になったら、Webなり2chで聞くなりした方が絶対覚えが早いよ。
247デフォルトの名無しさん:2009/01/01(木) 03:29:27
gets()は絶対に使ってはならない

↑実際どうなの
248デフォルトの名無しさん:2009/01/01(木) 03:50:21
実際そのとおり。fgetsで何も困らない。
249デフォルトの名無しさん:2009/01/01(木) 04:25:07
 使うべきではない、が正しいと思う。
バッファオーバーフローで、PCがハック(今ではクラックの方が正しいか)されたいのであれば、使えばいい。
1988年にfingerdを襲った悲劇の教訓からそう語り継がれているんだよ。
250デフォルトの名無しさん:2009/01/01(木) 04:35:03
やっぱそうか
1つくらいいいところあるかなと思ったけど、いいとこないな
251デフォルトの名無しさん:2009/01/01(木) 13:15:35
list< orekurasu > data;

data
252デフォルトの名無しさん:2009/01/01(木) 13:19:38
list< orekurasu > data; として dataにデータを入れて、リストで3連続するもののうち、
前後の二つと中央のデータにある違いがある場合、真ん中のデータを削除したいのですが、
remove_ifと叙述関数(プレディケート)を使って作れますか?
叙述関数では各要素毎にしか比較できませんか?
253デフォルトの名無しさん:2009/01/01(木) 13:20:58
まとめるとremove_ifで、一つ前と一つ後ろのデータを参照して削除可能かということです。
254デフォルトの名無しさん:2009/01/01(木) 13:23:26
無理なら、別に良いです。 remove_ifなしで書けば済むので。
255デフォルトの名無しさん:2009/01/01(木) 13:53:38
無理じゃね?
そもそも、範囲が違う (remove_ifは要素全部、3連続比較は(本質的には)要素数-2個の範囲)
256デフォルトの名無しさん:2009/01/01(木) 14:00:50
比較を削除前の列に対して行うかどうかって話もあるし単純には無理だろう。
A B C D E で B を削除するとして C に対する比較は B C D なのか A C D なのか、とか。
257デフォルトの名無しさん:2009/01/01(木) 14:41:09
誤爆してきた死ね

おすすめのC++入門サイトを教えてください。
Cは未経験です
258デフォルトの名無しさん:2009/01/01(木) 14:45:18
AやBからはじめるとよいお
259 【148円】 【大吉】 :2009/01/01(木) 15:21:22
お年玉がほしい。
260デフォルトの名無しさん:2009/01/01(木) 15:33:57
まずCをやったほうがいい。でないと死ぬ。

もし、正しい理解とかどうでもいいから速攻でC++が使えないと困るみたいな
状況だったら素直に質問にそう書いた方がいい。
(叩かれるかもしれないけど)
261デフォルトの名無しさん:2009/01/01(木) 15:35:23
>>257
ロベール
262デフォルトの名無しさん:2009/01/01(木) 15:36:10
べつにC++からでいいよ。
C++やってる連中が自分がCから入ったから、それがいいって思い込んでるだけ。
263デフォルトの名無しさん:2009/01/01(木) 15:51:29
C++やってるうちにCもできるようになると思う
264デフォルトの名無しさん:2009/01/01(木) 16:25:01
むしろC++からの方が分かりやすいよね。
C は初っ端から printf とか scanf とか面倒くさいし
(C++は桁数指定とかしないのであればフォーマット指定の必要がない)、
関数に変数の値を変更してもらうのにもポインタなんぞが必要になるし(C++なら参照で良い)、
Cから始める方がややこしいと言わざるを得ない。
265デフォルトの名無しさん:2009/01/01(木) 16:32:29
STLから始めるのが初心者向き で生産的
266デフォルトの名無しさん:2009/01/01(木) 16:42:46
char で文字列操作とか面倒くさいし(絶対バッファオーバーフローさせやがる)、
std::string 使わせた方がいいね。
267デフォルトの名無しさん:2009/01/01(木) 16:55:06
させやがる、ねぇ・・・
268デフォルトの名無しさん:2009/01/01(木) 16:57:22
既存のクラス使うだけなら、C++で入門もいいだろうね
269デフォルトの名無しさん:2009/01/01(木) 17:54:06
補間機能
270デフォルトの名無しさん:2009/01/01(木) 17:56:03
挫折して挫折して挫折して
そこでSTLですよ
(゚∀゚)神のキターですよ
271デフォルトの名無しさん:2009/01/01(木) 18:58:09
STLなんて自分で実装してからその存在に気づいた
272デフォルトの名無しさん:2009/01/01(木) 20:12:48
マルチスレッドで開放のタイミングで困っているんだが
GCが組み込まれるなら待とうかなぁ・・・
でも自前で組んだ方が速いのよね
273デフォルトの名無しさん:2009/01/01(木) 20:20:51
>>272
boost::shared_ptrがマジお勧め。
274デフォルトの名無しさん:2009/01/01(木) 20:27:06
boost(笑)
275デフォルトの名無しさん:2009/01/01(木) 20:52:13
>264
問題は多くのサイトがC++でなくベターCから入門することくらいか
276デフォルトの名無しさん:2009/01/01(木) 21:02:08
ガチ規格準拠でANSI-Cでもやれば、C++との明確な違いが分かると思うのだが、いかがなさいましたか、お客様
277デフォルトの名無しさん:2009/01/01(木) 21:03:20
>>275
プログラムのプの字も知らない人に
いきなりオブジェクト指向を語っても
どうなのかなあと思わなくもない。
278デフォルトの名無しさん:2009/01/01(木) 21:09:00
明日、本を買いに行くついでに漫画を立ち読みをしようと思います。

で・・・やはり、Cから始めたほうがいいのでしょうか?

それともC++からでいいのでしょうか?
279デフォルトの名無しさん:2009/01/01(木) 21:42:20
新人にいきなりC++を教えてるけど問題ないよ。
280デフォルトの名無しさん:2009/01/01(木) 21:42:41
ってかPCについてある程度の知識が必要だが、そこは大丈夫なのだろうか
281デフォルトの名無しさん:2009/01/01(木) 21:50:35
プログラミングの学習では、早い時期から文字列の操作は避けては通れないと思う
そのためには、Cだといきなりポインタを理解しなくてはならず厄介。
C++は文字列クラスがあるから、そのあたりは緩やかに学べると思う。
282デフォルトの名無しさん:2009/01/01(木) 22:03:57
>277
いやさ、オブジェクト指向以前に
C++なら例えば配列は初心者の扱うモノじゃないのに
何故かvectorより出て来たりさ
酷いのは#include <stdio>から始まったりとかね
それはほとんどC言語でしょって話
283デフォルトの名無しさん:2009/01/01(木) 22:11:15
それはひどいな!
284デフォルトの名無しさん:2009/01/01(木) 22:13:02
>>282
最近は iostream から始めるのも多いんじゃない?
285デフォルトの名無しさん:2009/01/01(木) 22:15:55
>>282
お前何が言いたいの?
286デフォルトの名無しさん:2009/01/01(木) 22:24:38
ちょっとかじりかけの中級者に限って、オブジェクト指向が何か特別な高尚で高度なものだと思ってしまいがち。

プログラムのプの字からオブジェクト指向で何ら問題ない。
287デフォルトの名無しさん:2009/01/01(木) 22:25:16
と、ちょっとかじりかけの中級者が申しております。
288デフォルトの名無しさん:2009/01/01(木) 22:26:15
>>287
死ね
289デフォルトの名無しさん:2009/01/01(木) 22:26:37
世の多くの人は驚くくらい抽象思考が苦手なもんだ。
本当に驚くほどに。
290デフォルトの名無しさん:2009/01/01(木) 22:27:38
>>288
死んでいただけないでしょうか?
291デフォルトの名無しさん:2009/01/01(木) 22:30:44
>>288
どうなさいましたか?
上級者なら、スルーができように。
292デフォルトの名無しさん:2009/01/01(木) 22:31:59
俺も C++ で始めた方が楽だと思うな。
ただ、C っぽい教科書が多いのは問題だね。
今やはじめから STL どんどん使った方が良い。
293デフォルトの名無しさん:2009/01/01(木) 22:32:04
オブジェクト指向を特別視するのは、オブジェクト指向を理解していない人間
294デフォルトの名無しさん:2009/01/01(木) 22:32:52
>>288
何ムキになってんのwwww
295デフォルトの名無しさん:2009/01/01(木) 22:33:48
>>290 >>291 >>294
涙拭けよw
296デフォルトの名無しさん:2009/01/01(木) 22:34:25
297デフォルトの名無しさん:2009/01/01(木) 22:35:29
286 :デフォルトの名無しさん:2009/01/01(木) 22:24:38
ちょっとかじりかけの中級者に限って、オブジェクト指向が何か特別な高尚で高度なものだと思ってしまいがち。

プログラムのプの字からオブジェクト指向で何ら問題ない。

煽られる

288 :デフォルトの名無しさん:2009/01/01(木) 22:26:15
>>287
死ね

叩かれる

295 :デフォルトの名無しさん:2009/01/01(木) 22:33:48
>>290 >>291 >>294
涙拭けよw
298デフォルトの名無しさん:2009/01/01(木) 22:36:20
299デフォルトの名無しさん:2009/01/01(木) 22:36:41
300デフォルトの名無しさん:2009/01/01(木) 22:37:25
みんな死ね
301デフォルトの名無しさん:2009/01/01(木) 22:37:46
>>300
お前だけ氏ね
302デフォルトの名無しさん:2009/01/01(木) 22:38:22
またこの流れか
303デフォルトの名無しさん:2009/01/01(木) 22:38:32
C++でポインタを習う際、何故みんなは「〇〇型へのポインタ」よりも「代入した変数のアドレス」を意識してしまうんだろうか・・・
アドレスの値が印象的なのか・・・
304デフォルトの名無しさん:2009/01/01(木) 22:38:42
崇高なオブジェクト指向が実は初歩的な概念であることを明らかにされた初心者が暴走し始めたな
305デフォルトの名無しさん:2009/01/01(木) 22:39:57
>>303
みんなって誰だよ。アホか。
306デフォルトの名無しさん:2009/01/01(木) 22:40:24
>>304
その勘違いはさすがに・・・w
307デフォルトの名無しさん:2009/01/01(木) 23:01:20
ここで関数型信者の一言
      ↓
308デフォルトの名無しさん:2009/01/01(木) 23:06:24
288 :デフォルトの名無しさん:2009/01/01(木) 22:26:15
>>287
死ね
309デフォルトの名無しさん:2009/01/01(木) 23:06:38
とりあえず黙れ
310デフォルトの名無しさん:2009/01/01(木) 23:07:29
とか言ってみる
311デフォルトの名無しさん:2009/01/01(木) 23:07:50
オブジェクト指向は便利だけど実際必要かって言われると必要ないよ。
別に無くてもいい。
現にみんながOCaml使うときオブジェクト指向的な部分ってあんまり使わないでしょ。

まずはHaskellやってMonadに慣れといたほうが後々色々と応用が効くからそっちのほうがいいよ。
312デフォルトの名無しさん:2009/01/01(木) 23:08:29
なにについて揉めてるんだ?
313デフォルトの名無しさん:2009/01/01(木) 23:08:47
誰も必要だとは言ってないし。
314デフォルトの名無しさん:2009/01/01(木) 23:10:49
>>309
wwwwwwwwww
315デフォルトの名無しさん:2009/01/01(木) 23:11:36
こいつ病気だな。
316デフォルトの名無しさん:2009/01/01(木) 23:12:34
>>315
wwwwwwwwww
317デフォルトの名無しさん:2009/01/01(木) 23:12:49
315 :デフォルトの名無しさん:2009/01/01(木) 23:11:36
こいつ病気だな。
318デフォルトの名無しさん:2009/01/01(木) 23:14:26
贈るほどでもない言葉
319デフォルトの名無しさん:2009/01/01(木) 23:15:22
printf("俺様はプログラマーの卵だ!!");
320デフォルトの名無しさん:2009/01/01(木) 23:17:09
これは酷い
321デフォルトの名無しさん:2009/01/01(木) 23:17:31

贈るほどでもない言葉
322デフォルトの名無しさん:2009/01/01(木) 23:18:34
#define loop while(1)
323 【大吉】 【1003円】 :2009/01/01(木) 23:29:13
C++はオブジェクト指向でいい
324デフォルトの名無しさん:2009/01/01(木) 23:30:39
全角
325デフォルトの名無しさん:2009/01/01(木) 23:31:42
だから何?
326デフォルトの名無しさん:2009/01/01(木) 23:32:51
だから何?
327デフォルトの名無しさん:2009/01/01(木) 23:34:07
なんか病気のコピペ厨が張り付いているんですけど
328デフォルトの名無しさん:2009/01/01(木) 23:34:12
だから何?
329 【だん吉】 【791円】 :2009/01/01(木) 23:34:19
c++にするべきかな
330デフォルトの名無しさん:2009/01/01(木) 23:34:44
するべき。
331デフォルトの名無しさん:2009/01/01(木) 23:34:54
だから何?
332デフォルトの名無しさん:2009/01/01(木) 23:49:10
壊れたラジオみたいだな
333デフォルトの名無しさん:2009/01/02(金) 00:38:41
壊れかけ、ではなくて?
334デフォルトの名無しさん:2009/01/02(金) 00:47:21
そう。壊れてる
335デフォルトの名無しさん:2009/01/02(金) 00:49:37
センスない・・・
336デフォルトの名無しさん:2009/01/02(金) 01:07:15
あきらめるな
337デフォルトの名無しさん:2009/01/02(金) 09:00:22
>284
iostream、stringについては随分普及してきたと思う

でもvectorやsstream、fstream辺りは入門サイトだとなかなか出てこなくね?
この辺りが使えないと、配列やCライブラリを使わなきゃいけない場面が多くなる

個人的にはclass定義より詳細な文法より先に標準ライブラリやSTLの使い方だと思う
初っ端からSTL連発くらいのがC++初心者には良くないか?
338デフォルトの名無しさん:2009/01/02(金) 09:39:43
>>332
学生さんだね。
社会に出ればわかるけど冤罪も罪のうち、疑わしきは罰するってのは法治国家の不文律だよ。
339デフォルトの名無しさん:2009/01/02(金) 09:42:19
まぁ、とにかく動かしたいんだっていうならそっちのが早いだろうさ
340デフォルトの名無しさん:2009/01/02(金) 11:02:06
>>337
その「入門サイト」とやらが、たまたま「class定義より詳細な文法より先に標準ライブラリやSTLの使い方」で「初っ端からSTL連発」なんだろ?

「初心者」がきちんとC++を学びたいなら、そんなわけのわからないサイトではなく、定評のある書籍や教育コースを受講した方がいいと思うけどね。
341デフォルトの名無しさん:2009/01/02(金) 12:11:34
>>340
STLが、C++基本的構造(クラスなど)より先にあって
STLを実装するために、C++の基本構造が作られたんだ。
日本語を勉強するのに、文法的な構造から始めるか、
会話から始めるかという違いだろう。
342デフォルトの名無しさん:2009/01/02(金) 12:21:35
STLのアーキテクチャの多くはアレクサンドル・ステパノフという一人の人物の手によって作られた。
1979年に彼はジェネリックプログラミングの初期アイデアを練り始め、そしてソフトウェア開発に革命をもたらす可能性を探究し始めた。
当時はジェネリックプログラミングを実際にサポートしているプログラミング言語がまだなかった。

1987年までにステパノフとマッサーはジェネリックプログラミングの研究成果としてAdaのリスト処理ライブラリを開発してリリースしていた。
しかしながらAdaは軍需産業以外ではあまり普及しておらず、
C++は当時まだ言語として未成熟ではあったものの(テンプレートはまだなく後から実装された)
より広く普及してジェネリックプログラミングの良好なサポートが提供される可能性が高いと考えられた。

ベル研究所のアンドリュー・コーニグがこの動きを察知して、1993年11月のANSI/ISOのC++標準化委員会に
アイデアを提出するように求めるようなことがもしなければ、この作業は間違いなく、さしあたっては研究プロジェクトとして、
あるいはヒューレット・パッカード研究所のプロプライエタリなライブラリとして継続されたであろう。
提案は委員会で全面的に賛同を得て、すぐさま1994年3月のミーティングでのコーニグからの正式なリクエストへとつながった。

Standard Template Library - Wikipediaの抜粋
http://ja.wikipedia.org/wiki/Standard_Template_Library
343デフォルトの名無しさん:2009/01/02(金) 12:33:51
>>341は、「STLを実装するため」に追加された機能だけが、「C++の基本構造」とでもいいたいのだろうか。
アホか。
344デフォルトの名無しさん:2009/01/02(金) 12:52:10
STLとC++の開発が始まったのは調べたら1979年らしい。
これらは別々の人たち、場所で開発されていて、STLを実装するために
C++の開発に大きな影響を与えたこととおもうが。
345デフォルトの名無しさん:2009/01/02(金) 13:03:19
らしい。
おもうが。
346デフォルトの名無しさん:2009/01/02(金) 13:06:38
聞きかじりと妄想だけで断言口調のやつ、多いな。
347デフォルトの名無しさん:2009/01/02(金) 13:19:57
これからC++を始めるならOOPを基本とすべき。
348デフォルトの名無しさん:2009/01/02(金) 14:01:13
今さら入門書って思うレベルだけどAccelerrated C++を読んでみたい。
349デフォルトの名無しさん:2009/01/02(金) 14:02:04
ぜひどうぞ
350デフォルトの名無しさん:2009/01/02(金) 14:15:37
ア、、アク、アクセ・・・
俺には無理だった・・・
351デフォルトの名無しさん:2009/01/02(金) 15:23:16
>348
その本はまさに「配列より先にvector」の本やね
352デフォルトの名無しさん:2009/01/02(金) 15:29:02
vector は vector で、
< > って何なのとか、2次元配列はどうやってつくるのとか、
面倒臭い事もあるので、
vector を先にやった方がいいと言える程手軽な物でもない。
at を使わないと境界チェックもしてくれないし。
動的配列より先に vector ってのなら構わんがね。
353デフォルトの名無しさん:2009/01/02(金) 15:32:05
>>348を読んでから言え馬鹿
354デフォルトの名無しさん:2009/01/02(金) 15:41:03
C++では、
Cのcontainer_of()相当のことは標準で出来ないでしょうか?
355デフォルトの名無しさん:2009/01/02(金) 15:57:08
カプセル化を前提とするC++で
そういうものが必要になる事自体設計がおかしいと思われる。
もちろん標準でそんなことはできない。
356デフォルトの名無しさん:2009/01/02(金) 16:02:59
クラスの継承がそれに相当すると主張するのは無茶すぎますかね?
357デフォルトの名無しさん:2009/01/02(金) 16:03:35
買いに行ったけど売ってなかった・・・(´;ω;)

DVDコピーとかの本ばっか。
358デフォルトの名無しさん:2009/01/02(金) 16:06:04
>>356
ダウンキャストか。
359デフォルトの名無しさん:2009/01/02(金) 16:16:43
>>355,356
返答ありがとうございます。
継承使えばいいのかとも考えたのですが、
継承ではクラス内にlistを3個とか複数持たせる
ことは出来ないと考えました。

クラス内にlistを複数持つという設計が良くない
のかもしれませんが、代替案が浮かびません。
360デフォルトの名無しさん:2009/01/02(金) 16:19:56
list と何か関係あるのか?
361デフォルトの名無しさん:2009/01/02(金) 16:22:21
>>356
煽りとかじゃなく純粋に質問。
それどういう意味?
362デフォルトの名無しさん:2009/01/02(金) 16:26:14
>>360
説明不足すいません。
Cでは、構造体内にlistを複数持たせておいても
それぞれのlistについてcontainer_of()を使えば、
包含する構造体は求まるので、
それと同等のことをC++で行う方法を考えていました。
363デフォルトの名無しさん:2009/01/02(金) 16:43:29
#include <iostream.h>

int main()
{
cout<<"こんにちわ。"<<endl;
return 0;
}
include ファイルを開けません。'iostream.h': No such file or directory

364363:2009/01/02(金) 16:46:19
自己解決しました。
365デフォルトの名無しさん:2009/01/02(金) 17:09:32
>>361
listを継承したクラスで, listにアップキャストしてリストを作る
それをダウンキャストしたら得られるだろ?

listっていってもSTLのではないぞ
366!omikuji !dama:2009/01/02(金) 17:17:03
C++のコンパイラはやはり
Borland C++Compiler でよろしいのでしょうか
367デフォルトの名無しさん:2009/01/02(金) 17:18:35
無料版の方だったら今時ありえない、よした方がいい
368デフォルトの名無しさん:2009/01/02(金) 17:25:06
>>362
複数なら継承ではなく包含させればいい。
そして、listにそれを所有するオブジェクトへのポインタまたは参照を持たせる。
369デフォルトの名無しさん:2009/01/02(金) 17:27:25
>>366
対応している規格がが古いからお勧めできない。VC++2088 expressを薦める
370デフォルトの名無しさん:2009/01/02(金) 17:27:40
container_of()相当で聞いてるんだから
リンク用のポインタ以外もたないlistなんじゃねーの?

持たせてもいいんだろーか?
371!omikuji !dama:2009/01/02(金) 17:34:36
>>367
>>369
サンクス
372デフォルトの名無しさん:2009/01/02(金) 17:38:01
ググってみたけど、container_ofって危険じゃないか?
引数を間違えて、構造体のメンバじゃない変数を与えてもコンパイルエラーにならないんじゃない?
373デフォルトの名無しさん:2009/01/02(金) 17:38:27
>>368,370
ありがとうございます。
とりあえずSTLのlistを使うことを考えていたのですが、
自前で作るかSTLのlistを継承したリストを
作ってそいつにポインタ持たせればいいということですね。
374デフォルトの名無しさん:2009/01/02(金) 17:43:47
>>373
なにか恐ろしい事をやろうとしているように見える。
STL のクラスは継承する事を全艇に作ってないので
基本的には継承しちゃだめ。

そもそも、list からそれを持ってるクラスをとってこようとしている時点でおかしい。
list を持っているクラスを通して list を扱うのが基本だ。
375デフォルトの名無しさん:2009/01/02(金) 18:45:24
>>373
listとポインタを所有するクラスを作ろう
376デフォルトの名無しさん:2009/01/02(金) 19:53:32
$ cat c_sizeof.c

#include <stdio.h>

int main(void)
{
printf("sizeof(\'\\x80\') == %d\n", sizeof('\x80'));

return 0;
}

/* EOF */
$ gcc -Wall -std=c99 -o c_sizeof c_sizeof.c
$ ./c_sizeof
sizeof('\x80') == 4
$ cat cxx_sizeof.cxx

#include <iostream>

int main()
{
std::cout << "sizeof(\'\\x80\') == " << sizeof('\x80') << std::endl;

return 0;
}

// EOF
$ g++ -Wall -o cxx_sizeof cxx_sizeof.cxx
$ ./cxx_sizeof
sizeof('\x80') == 1

 なぜ、C言語ではシングルクォートが、4 Bytesであり、C++では、1 Byteなのですか。
377デフォルトの名無しさん:2009/01/02(金) 19:59:46
>>376
Cではint型で
C++ではchar型だからです

C++でのオーバーロードとかの兼ね合いだろうね
378デフォルトの名無しさん:2009/01/02(金) 20:06:19
1バイトって256種類のパターンを表現できるんだっけ
379デフォルトの名無しさん:2009/01/02(金) 20:06:52
普通はそう
Cにおいては絶対ではないが
380デフォルトの名無しさん:2009/01/02(金) 20:06:58
cher型は嫌いです
381デフォルトの名無しさん:2009/01/02(金) 20:12:08
ちーあ?
382デフォルトの名無しさん:2009/01/02(金) 20:22:07
>>377
 ありがとうございます。そういうことだったんですね。
C言語とC++は、こういう細かいところでも違うんですね。
383デフォルトの名無しさん:2009/01/02(金) 20:26:19
なぁ、チーフって何だ?
384デフォルトの名無しさん:2009/01/02(金) 22:20:53
牛肉だろ
385デフォルトの名無しさん:2009/01/02(金) 22:51:07
ロベール先生にお世話になることにしました
386デフォルトの名無しさん:2009/01/03(土) 03:20:44
2ch終わった
2ちゃんねる、海外企業に譲渡 ― 西村博之氏からPACKET MONSTER INC.へ譲渡完了
http://www.rbbtoday.com/news/20090102/56801.html

ニコニコに移行して2chは完全に切る気やな
387デフォルトの名無しさん:2009/01/03(土) 03:30:31
2chが終わるってのも、思い込みすぎかも。まぁ、2chは巨大になったことだし
もし消滅するなら、また別の人がサーバーを運営するだろうね。
手法などは、既に2chのを参考にすれば済むことだし、著作権だの
知的財産権だの、抵触せずに似たものはいくらでも作れるし。
388デフォルトの名無しさん:2009/01/03(土) 03:35:19
IP記録を始めたときも、終わったというやつは大勢いたが、今まで生き残っている。
少なくともユーザに見限られるということはないだろうとは言える。
389デフォルトの名無しさん:2009/01/03(土) 03:37:26
国内しかも個人が代表に見える格好だと
裁判とか税金とかうるさいから、
スケープゴートとして海外企業に移したんでしょ。

ひろゆきとしては譲渡していいことずくめだろ
390デフォルトの名無しさん:2009/01/03(土) 03:44:35
大雑把に言って、内容は不特定多数の人が書き込んで出来上がっているし、
その不特定多数が消滅しない限り、やはり何かしらこういったコミュニティーは
継続するだろうしね。運営者も費用も必要だが。掲示板そのものに
スタイルはいくつかあれど、誰でもやれることだし。ただ、一生をそんなことに
ささげるだけの覚悟はあるかい?
391デフォルトの名無しさん:2009/01/03(土) 03:55:02
つーか、ガンガン機能追加するわけでもないしね。
運用するだけじゃん。こんな掲示板
アウトソースすればよろし
レスは1000までって制限も永遠と変わんないしw
392デフォルトの名無しさん:2009/01/03(土) 05:38:23
複雑な機能なんていらん
掲示板として書き込み/読み込みというシンプルな機能だけで十分
肥大化して良い事なんて無いってのはC++でもいえる
393デフォルトの名無しさん:2009/01/03(土) 08:35:35
2ちゃんねらーらしくもない話してるな
スルーしろよ
394デフォルトの名無しさん:2009/01/03(土) 11:03:58
protected private継承の違いについて
395デフォルトの名無しさん:2009/01/03(土) 11:12:01
int i,j;
i=0;
while(j=10-i++) ってのはありでつか?
396デフォルトの名無しさん:2009/01/03(土) 11:14:57
ありだけど、キミが期待した通りかはわからん。
397デフォルトの名無しさん:2009/01/03(土) 11:15:30
えぇ、変数って2個いっぺんに宣言できるの!?

ってかありなんじゃない
398デフォルトの名無しさん:2009/01/03(土) 11:26:55
>>395
おそらく"ってのはありでつか?"がエラーになる
399デフォルトの名無しさん:2009/01/03(土) 11:49:30
文法上問題は無いが、何か気持ちは悪い。
400デフォルトの名無しさん:2009/01/03(土) 12:03:01
>>395
あり。そう書いたとおりに動く。
401デフォルトの名無しさん:2009/01/03(土) 12:22:43
>>395の話がCの宿題スレでよく分からん議論になってる
402デフォルトの名無しさん:2009/01/03(土) 12:28:17
少なくとも、読むときには困るコードだな
403デフォルトの名無しさん:2009/01/03(土) 13:13:25
>>401
おそらく>>395が向こうで代入式!代入式!ってファビョってる奴だと思う。
追い詰められてこっちに助けを求めてきたんだろ。
404デフォルトの名無しさん:2009/01/03(土) 13:20:32
printfでも入れてコンパイル&動かせばいいだけじゃん > ファビオジニオール
405デフォルトの名無しさん:2009/01/03(土) 13:51:18
なるほど、宿題スレか。
宿題の回答としてはまずいと思うけどな。
わけもわからず写して動作聞かれたら困るべ。
406デフォルトの名無しさん:2009/01/03(土) 13:52:50
>>403
お前がコンパイラが通すから良しといっている基地外だというこは分かったから、
いつまでも必死にファビョってなさいw
407デフォルトの名無しさん:2009/01/03(土) 13:55:38
本人登場w
408デフォルトの名無しさん:2009/01/03(土) 13:56:14
>>403
見えない敵と必死に戦う低レベル講師乙。コードを客観的に考えるのと、
主観ばかりで意見する相手に対して、罵詈雑言で返すだけの無能は
黙っていた方が墓穴を掘らなくて済むぞw
409デフォルトの名無しさん:2009/01/03(土) 14:03:49
>>408
キモッ
410デフォルトの名無しさん:2009/01/03(土) 14:12:17
>>408
お前の発言が主観ではなくなんだと言うのだ
411デフォルトの名無しさん:2009/01/03(土) 14:14:20
408は自己紹介としては良く出来てると思うぜ。
412デフォルトの名無しさん:2009/01/03(土) 14:21:00
ん?
>>408の日本語がよく分からんのだが、
"コードを客観的に考え"てるのが誰で
"主観ばかりで意見する"のが誰で
"罵詈雑言で返すだけの無能"が誰だって?
413デフォルトの名無しさん:2009/01/03(土) 14:22:11
>>395は、くせぇくせぇ、○ンコの臭いがぷんぷんすんぜ、こりゃ〜生っ粋のクソースだ。
間違いねぇ、クソ麻呂のクソースだぜ、ぷぷぷw
414デフォルトの名無しさん:2009/01/03(土) 14:34:49
マジレスするとgccだとコンパイル通らないよ
警告: 真偽値として使われる代入のまわりでは、丸括弧の使用をお勧めします
だってさ
415デフォルトの名無しさん:2009/01/03(土) 14:36:20
あっ、一応警告だけでコンパイルも実行もできた。
j=10 i=1

j=9 i=2

j=8 i=3

j=7 i=4

j=6 i=5

j=5 i=6

j=4 i=7

j=3 i=8

j=2 i=9

j=1 i=10

416デフォルトの名無しさん:2009/01/03(土) 14:36:49
>>414
そりゃ、警告だ
コンパイルエラーじゃない
417デフォルトの名無しさん:2009/01/03(土) 14:38:13
警告をエラーにするオプションを立てればエラーにはなる。一応。
418デフォルトの名無しさん:2009/01/03(土) 14:42:41
質問です.
・ソース
#include <windows.h>
#include <time.h>
#include <stdio.h>
typedef struct
{
time_t time;
WORD namesum;
BYTE name[254];
} HEADER1;
typedef struct
{
time_t time;
WORD namesum;
// BYTE name[254];
} HEADER2;
main() {
BYTE name[254];
printf("HEADER1 = %d\n", sizeof(HEADER1));
printf("HEADER2 = %d\n", sizeof(HEADER2));
printf("name[254] = %d\n", sizeof(name));
printf("HEADER2 + name[254] = %d\n", sizeof(HEADER2) + sizeof(name));
}

・実行結果
HEADER1 = 260
HEADER2 = 8
name[254] = 254
HEADER2 + name[254] = 262

HEADER2 + name[254]はなんで260にならずに262になったのでしょうか?
419デフォルトの名無しさん:2009/01/03(土) 14:44:07
関係ない部分を削ってから質問した方がいいよ
420419:2009/01/03(土) 14:44:54
↑ 「ソースコードの」、関係ない部分を
421デフォルトの名無しさん:2009/01/03(土) 14:45:49
ソースは全部あげたほうがいいだろ。
どこが「関係ない部分」かわかるくらいなら自分で問題解決できるって。
422デフォルトの名無しさん:2009/01/03(土) 14:46:18
>>418
HEADER2 + name[254] = 8 + 254 = 262
ってそのまんだだと思うが
423419:2009/01/03(土) 14:47:48
で、ソースを見たが、8 + 254 はどう考えても 262
424デフォルトの名無しさん:2009/01/03(土) 14:47:54
足し算w
425419:2009/01/03(土) 14:48:48
>>421
まぁそうか・・・HEADER1はどう考えても関係ないんだが。スマソ
426デフォルトの名無しさん:2009/01/03(土) 14:48:54
なんで260になると思ったのか説明して欲しい。
427デフォルトの名無しさん:2009/01/03(土) 14:49:19
>>418の頭の中のバグを直すのは難しいw
消防からやりなおせってとこか
428デフォルトの名無しさん:2009/01/03(土) 14:49:23
パディングの話だろ。
429デフォルトの名無しさん:2009/01/03(土) 14:49:28
>422
HEADER2はHEADER1のname[254]をコメントアウトしているので
HEADER2 + name[254] = HEADER1に何でならないのかと思いまして.
430デフォルトの名無しさん:2009/01/03(土) 14:51:06
それぞれ全く無関係だから。
431デフォルトの名無しさん:2009/01/03(土) 14:51:14
パディングとかアラインメントとかでググれ
432デフォルトの名無しさん:2009/01/03(土) 14:52:31
なんかバカが紛れ込んでて話をややこしくしてるな。
>>422>>423>>424>>426>>427>>430 あたりは無視してよろしい。
433デフォルトの名無しさん:2009/01/03(土) 14:53:03
いやいや、型の定義は (おまえの疑問とは) 関係ないよ。
printfで出力された値を見れば、ただ足し算するだけ。

定義のところに疑問があるなら、疑問を持つべきは最後のprintf文じゃないでしょ?
434デフォルトの名無しさん:2009/01/03(土) 14:53:56
>>433
だから分からん奴は黙っとけ。
435418:2009/01/03(土) 14:54:25
パディングでぐぐったら答えが出てきました.初めて知ったよ.
みなさんありがとう.
436デフォルトの名無しさん:2009/01/03(土) 14:54:32
お前は代入式ってファビョってりゃいいんだよw
437デフォルトの名無しさん:2009/01/03(土) 14:55:41
>>436
クソワロタ
438デフォルトの名無しさん:2009/01/03(土) 14:57:26
パディングやアラインメントならsizeof(HEADER2)の値が6じゃないのを疑問に思うのが普通じゃね?
439デフォルトの名無しさん:2009/01/03(土) 14:57:34
数字だけ言うんだもん、足し算の問題だと思うわ
結局日本語で理解できなかったよ
440デフォルトの名無しさん:2009/01/03(土) 14:58:38
>>434
まぁ解決したからいいいけど、2個目のprintfでHEADER2のサイズが HEADER1 - 256
になってない時点で疑問に思うべきだってことだよ
441デフォルトの名無しさん:2009/01/03(土) 15:20:54
>>436
きもいぃ〜〜〜〜はいっ、きっ、もっ、いっ、キモイ!きっ、もっ、いっ、キモイ!
キモイィ〜〜〜〜
442デフォルトの名無しさん:2009/01/03(土) 15:25:47
なんか頭のおかしい基地外が、自分の不備を指摘されてファビョってまつねw
あのwhile文の中は、条件式が適切なのに、代入式で済ませているなんて、
プログラマー失格だろ。コンパイラが警告しているのに、アホ過ぎ。黙ってろよ、ド素人w
443デフォルトの名無しさん:2009/01/03(土) 15:29:52
簡単な質問で申し訳ないのですが
visual stdio 2005 無償版でデバッグ開始してみたところ
「0x0040115d でハンドルされていない例外が発生しました: 0xC0000094: Integer division by zero」
というメッセージがでて実行中に強制終了してしまいました。

これってどうすればいいんでしょうか・・・?
444デフォルトの名無しさん:2009/01/03(土) 15:30:39
Linuxでは代入が正解だ。
オープンソースも知らない素人は黙っとけよ。
恥ずかしい奴だな。
445デフォルトの名無しさん:2009/01/03(土) 15:32:30
なんか一匹、年明け早々、必死に基地外っぷりを発揮していますね(^ー^)v
アァ〜〜キモッキモッ、きっと鏡を見ると、キモイ面が映っているんでしょうね。
現実に目を向けようぜ、こんな文字列ばかりのスレじゃなくて、さ?
446デフォルトの名無しさん:2009/01/03(土) 15:33:00
>>443
ゼロで割ることはできない。
447デフォルトの名無しさん:2009/01/03(土) 15:33:15
>>443
何かを0で割ったんじゃね?
448デフォルトの名無しさん:2009/01/03(土) 15:34:57
代入式でも条件式でも「式」でありさえすればなんでもいいのがCの仕様。
バカが条件式限定だと思い込んで恥をさらしてファビョりまくってるのが現状。
449デフォルトの名無しさん:2009/01/03(土) 15:35:13
パディングって、詰め物だっけ
コンパイラの最適化って、害悪だと思う
450デフォルトの名無しさん:2009/01/03(土) 15:36:00
最適化がなかったら困ったことになると思うが。
451デフォルトの名無しさん:2009/01/03(土) 15:36:44
>>449
もう一度勉強しようね
452デフォルトの名無しさん:2009/01/03(土) 15:37:19
>>446-447さん
ありがとうございました。解決したみたいです。
453デフォルトの名無しさん:2009/01/03(土) 15:37:28
>>443
デバッグ開始してるなら、中断とか継続とか出ると思う。
中断すれば該当行にカーソルが行く。
その行で割り算してて、割る数が0なんだろう。

変数にマウスカーソルあてると数値見えたりもする。
454デフォルトの名無しさん:2009/01/03(土) 15:37:56
>>443
visual stdioなんか使うからだろ。
gcc使え。
gccなら0除算OKだ。
いまどき0除算もできないコンパイラなんてM$製くらいだ。
これだからドザは駄目なんだよ。
455デフォルトの名無しさん:2009/01/03(土) 15:38:37
パディングってワード間隔でデータを区切って
実行速度を速める為の手法だっけ
456デフォルトの名無しさん:2009/01/03(土) 15:38:42
>>442
式は値を持つんだから、なんの問題も無いだろ。
警告がいやなら、while ((j=0-i++)) とでもすればいい。
なにも知らないド素人は黙ってろよw
457デフォルトの名無しさん:2009/01/03(土) 15:38:50
>>444
これって乱数で過去レスを切り貼りするスクリプトでしょ。
458デフォルトの名無しさん:2009/01/03(土) 15:39:24
やたらからんでくる愚かものがいるなw
さすが、言語スレ

いつまでも、こんな言語仕様のスレみてるのなんて学生ばっかだっつーの
459デフォルトの名無しさん:2009/01/03(土) 15:39:52
みんな親切だな。
英和辞書引け、でいいのに。
460デフォルトの名無しさん:2009/01/03(土) 15:40:21
>>455
そう
461デフォルトの名無しさん:2009/01/03(土) 15:40:44
>>455
基本的にはそうだが、
アラインメントされてないと
データを読めない CPU もある。
462デフォルトの名無しさん:2009/01/03(土) 15:40:57
ビットフィールドってので、
手動でやる場合もある
463デフォルトの名無しさん:2009/01/03(土) 15:41:00
>>454
0で割るってどういうことか知ってる?
464デフォルトの名無しさん:2009/01/03(土) 15:41:49
>>463
宇宙の法則が乱れる
465デフォルトの名無しさん:2009/01/03(土) 15:42:15
学生や初心者が見るスレだからこそ、間違った知識は叩かれねばならない。
466デフォルトの名無しさん:2009/01/03(土) 15:44:34
>>463
visual stdioが破壊されるってことだろ。
素直にオープンソース使えって。
無理するな。
467デフォルトの名無しさん:2009/01/03(土) 15:45:39
>>460-462
アラインメントをキーワードにググってみた。
説明ありがとー
468デフォルトの名無しさん:2009/01/03(土) 16:21:15
>>458
おいっ、絡まれてまともにレス出来ないなら、お前がレスしなきゃ良くね?
だってここ、誰もお前個人を特定、指定してレスを求めているわけじゃないんだが
言うからには自分の発言に責任を持っているんだろうな?
ほれ、鏡を見ろよ。醜い酷い面が映っただろ?誰だよそれ?
そう、お・ま・え・だよ?分かる?それが現実。自分が見たものはどうこう言うくせに
自分で自分を見られる唯一の手段、何か姿を映し出すものを見た時
己の醜さを目の当たりにするのさ。今のあんたみたく。
あんたの発言、第三者から見れば、きんもぉ〜★だぜ?
469デフォルトの名無しさん:2009/01/03(土) 16:22:56
自身thisのアドレスをprintするメソッドを持つクラスを作成して
以下のようにvectorに追加する前のインスタンス
とvector内のインスタンスでprint()を実行したのですが、

addr=0x804b008
addr=0x804b018
と別のアドレスになります。
同じになると思っていたのですが、
これはvectorに登録する時点でインスタンスが
コピーされていると考えればいいのでしょうか?

またその場合オーバーヘ%8
470デフォルトの名無しさん:2009/01/03(土) 16:23:26
#include <iostream>
#include <vector>

using namespace std;

class MyClass {
public:
MyClass() {};
~MyClass() {};
void print() {
cout << "addr=" << this <<endl;
}
};

int main(int ac, char *av[])
{
vector<MyClass> vec;
MyClass *my = new MyClass();

vec.push_back(*my);
my->print();
vec.at(0).print();
delete my;

return 0;
}
471469:2009/01/03(土) 16:24:46
>またその場合オーバーヘ%8
以降の続き

またその場合オーバーヘッドが気になるんですが、
皆さんどう対処してらっしゃいますか?

お願いします。
472デフォルトの名無しさん:2009/01/03(土) 16:27:46
当然コピーが発生する。
ただ、
vector<MyClass*> vec;
vec.push_back(my);
みたいにアドレスをコピーする分には
インスタンスのコピーは発生しない。
ただ、メモリ管理を自分でしないといけなくなってしまう。
boost::ptr_vector を使うという手もある。
473デフォルトの名無しさん:2009/01/03(土) 16:29:50
vectorは、メモリを確保してplacement newという機構とコピーコンストラクタ
で初期化される (記憶があいまいなのでちょっと違うかも)

で、言うとおりコピーはされる。ポインタのコピーに比べれば
効率は悪いけど、実際そんな小さなことが問題になることはほとんどない。

よっぽどでかいデータ構造をソートしまくるとかでない限り。
474デフォルトの名無しさん:2009/01/03(土) 16:31:56
コピーのコストより、
コピーコンストラクタの実装がマズくて
問題が発生しないかチェックする方が重要だったりするよね。
475デフォルトの名無しさん:2009/01/03(土) 16:47:54
いいよいいよー、そうやって自分を否定する者を否定し続けてなさい。
それぞ、井の中の蛙、大海を知らずと言ったものだ。視野が狭いんだよ、
ファビョっている基地外は。もちっとグローバルに、客観的に物事を見な。
自分が思ったことが全て正しい、そんなことを思っているのは、お子ちゃままで。
大人の世界は、いくら自分がそう思っても、現実は、事実とは違っていることなんて
いくらでもあると気づく。実行して見て、コードが間違っていないと思っていても
もっと効率が良いものが存在するだの、自分で考えたのに、後でおかしいと気づくことなんて
いくらでもある。ただ・・・

while(代入式) は不適切だ。
476デフォルトの名無しさん:2009/01/03(土) 16:50:59
>>475
「いいよいいよー、そうやって自分を否定する者を否定し続けてなさい。
それぞ、井の中の蛙、大海を知らずと言ったものだ。視野が狭いんだよ、
ファビョっている基地外は。もちっとグローバルに、客観的に物事を見な。
自分が思ったことが全て正しい、そんなことを思っているのは、お子ちゃままで。
大人の世界は、いくら自分がそう思っても、現実は、事実とは違っていることなんて
いくらでもあると気づく。実行して見て、コードが間違っていないと思っていても
もっと効率が良いものが存在するだの、自分で考えたのに、後でおかしいと気づくことなんて
いくらでもある。」
ここまでそっくりそのままお前に返すよwww
477469:2009/01/03(土) 16:59:01
>>472,473,474
ありがとうございます。
ポインタを使うのがしっくり来そうです
478デフォルトの名無しさん:2009/01/03(土) 16:59:49
Cの規格に沿った構文解析器でも作ってみたら?
while(代入式)が不適切だろうがなんだろうが正しいんだから。
479デフォルトの名無しさん:2009/01/03(土) 17:08:53
>>478
コンパイルできて規格合致であることは誰も否定していない。
480デフォルトの名無しさん:2009/01/03(土) 17:11:38
>>479
まぁ確かに。
言いたかったのは、そこまで熱くならんでもいいんじゃね?ってこと。
481デフォルトの名無しさん:2009/01/03(土) 17:13:34
>>480
478みたいな書き方だとまた話を蒸し返されそうな雰囲気だから勘弁してくれ。
482デフォルトの名無しさん:2009/01/03(土) 17:13:44
>>479
いや、否定してる奴が約一名いるぞ
>>442 とか>>475 とか
483デフォルトの名無しさん:2009/01/03(土) 17:15:22
>>481
失礼した。
書き方に気をつける。
484デフォルトの名無しさん:2009/01/03(土) 17:16:04
while文の条件は条件式にするってのは良い心がけだと思うよ。
linuxなんかでは値があるものは何でもってくらい条件にしちゃうので、
経験積んだらそういうソースにも慣れると良い
485デフォルトの名無しさん:2009/01/03(土) 17:33:25
条件式ではなく比較式と言ってくれ。
486デフォルトの名無しさん:2009/01/03(土) 17:42:19
>>485
呂布かいでし
487デフォルトの名無しさん:2009/01/03(土) 17:44:55
比較するとは限らんぜ
488デフォルトの名無しさん:2009/01/03(土) 19:17:03
式・・・それは愛・・・・・・
489デフォルトの名無しさん:2009/01/03(土) 19:59:08
>>485
そゆこと言ってるから、論理値をリテラルと比較する莫迦が後を絶たない。
490デフォルトの名無しさん:2009/01/03(土) 20:05:45
お前、リテラルの意味分かってないだろ
491デフォルトの名無しさん:2009/01/03(土) 20:58:12
>>489
if(hoge()!=0)...
とか?

あるいは、if((x<y)!=0)...
ということだろうか?
492デフォルトの名無しさん:2009/01/03(土) 21:00:05
(is_hoge() == true) == trueのことだろ。
493デフォルトの名無しさん:2009/01/03(土) 21:05:04
>>492
真理値型の無い言語だぞ?
巣に帰れよ。
494デフォルトの名無しさん:2009/01/03(土) 21:16:20
リテラルってほらあれだ
前屈みになって腕を横に挙げるやつ
495デフォルトの名無しさん:2009/01/03(土) 21:18:09
ボケがわかりにくい上につまんねーよw
496デフォルトの名無しさん:2009/01/03(土) 21:19:33
どどんまい?
497デフォルトの名無しさん:2009/01/03(土) 21:32:53
>>493
処理できた件数を返す関数hogeの場合、#define TRUE -1に対して、
if(hoge()){・・・}
if(hoge()==TRUE){・・・}
とか。
498デフォルトの名無しさん:2009/01/03(土) 22:01:46
>>493
お前の頭はC89止まりか。
499デフォルトの名無しさん:2009/01/03(土) 22:07:12
左辺が右辺より大きいとき

左辺が右辺以上の時
って何が違うんでしょうか?
>これと>=を使い分けたりすることってあるのでしょうか?
500デフォルトの名無しさん:2009/01/03(土) 22:09:23
>>499
ちゅうがっこう から やりなおせば
わかると おもいます。
501デフォルトの名無しさん:2009/01/03(土) 22:11:25
>>500
それいぜんに にぽーんごの もんだいかと
おもわれまっしゅる
502デフォルトの名無しさん:2009/01/03(土) 22:12:31
  ヾヽ\ヾ\                           ////  //
 \丶\\                               ////
                 |・\  _____ /・>      ///
     / ̄ ̄ ̄ ̄\,,   ミ\.\ヽ|||liiiii||/ /./彡   ////
 |・\ /_____/・>     /\.\|||iii||l//彡  ノ(
ミ \.\ヽ|||liiiii||/ /./ノ(   / / (,-、 ,:‐、 ) \ ⌒ヽ
   \.\|||iii||l// | ⌒  .|/ ─////─   ヽ   |
    |(,-、 ,:‐、 )   6 l   |. ////──    |  .|    \\\
.   ////Vヽ  ,-′  ////'VVVヽ     |   l
  ////ェ∧/_ /ヽ . ////  γ    l    / /
 //// |/\/ l ^ ////  i∧ェェェ∧/  / /
//// |       |//// l━━(t)━━━━┥
503デフォルトの名無しさん:2009/01/03(土) 22:28:36
>>499
左辺==右辺の時に真になるか偽になるかの違い。
必要に応じて>と>=のふさわしい方を使う。
504デフォルトの名無しさん:2009/01/03(土) 22:30:48
xが12より大きいとき
xが12以上の時

より・・以上・・そこにある違い・・それが問題ってことですよね?
505デフォルトの名無しさん:2009/01/03(土) 22:30:52
面白い釣りだなあ。
506デフォルトの名無しさん:2009/01/03(土) 22:32:36
>>503

x >= 10 == x > 10
は偽になるってことでしょうか?
507デフォルトの名無しさん:2009/01/03(土) 22:34:12
さんすうのきょうかしょをよんでね
508デフォルトの名無しさん:2009/01/03(土) 22:42:07
>>506
x==10のときだけ偽、それ以外は真。
509デフォルトの名無しさん:2009/01/03(土) 22:42:37
優先順位は大丈夫か?
510デフォルトの名無しさん:2009/01/03(土) 22:44:32
>>509
優先順位知らないんなら口出すなw
511デフォルトの名無しさん:2009/01/03(土) 22:47:21
申し訳ございません
512デフォルトの名無しさん:2009/01/03(土) 22:59:32
>>508
そ・・そうか!!
やっと理解できました!!!!

x < 10は10もは含まれないってことですよね!?
だから
int a;
cin>>a;
if("x < 10"){
cout<<”真"<<endl;
はxが10より小さいってことで
つまり10と入力しても偽になるわけだ!!!!!!!!!
513デフォルトの名無しさん:2009/01/03(土) 23:16:33
while ("テュルー")

はどうなりますか?
514デフォルトの名無しさん:2009/01/03(土) 23:17:47
無限ループ
515デフォルトの名無しさん:2009/01/03(土) 23:17:50
突っ込みどころ満載w
516デフォルトの名無しさん:2009/01/03(土) 23:18:13
・・・??
517デフォルトの名無しさん:2009/01/03(土) 23:25:24
while("forever") ってしない?
518デフォルトの名無しさん:2009/01/03(土) 23:27:07
しない
519デフォルトの名無しさん:2009/01/03(土) 23:30:13
>>517
条件式じゃないと暴れだす奴がくるぞw
520デフォルトの名無しさん:2009/01/03(土) 23:34:54
>>517
そのアイデア貰った
521デフォルトの名無しさん:2009/01/03(土) 23:43:25
ちょ、それ古典w
522デフォルトの名無しさん:2009/01/03(土) 23:43:49
俺も面白いと思った。

while("無限ループ")
{
  /* なんか */
}

まあ、しないけど
523デフォルトの名無しさん:2009/01/03(土) 23:44:49
>>519
さすがにお前の粘着ぶりがキモイ
524デフォルトの名無しさん:2009/01/03(土) 23:46:13
while(j=10-i++) を書いた奴が指摘されて、まだファビョってるのか?
基地外だろ、こいつ。指摘した方が言ってもいないことを思っているとか言い出すし。
525デフォルトの名無しさん:2009/01/03(土) 23:49:41
whileの括弧の中が条件式でなければ駄目とは言っていないし、変数を用いて
0か否かで繰り返し条件を指定することもかのうだが、あの式は紛れもなく
代入式で、jの値を使うにしては、不適切だとコンパイラも指摘しているのだが・・・
526デフォルトの名無しさん:2009/01/03(土) 23:51:04
プw
527デフォルトの名無しさん:2009/01/03(土) 23:53:39
いやぁがんばってるね
528デフォルトの名無しさん:2009/01/03(土) 23:55:30
while(*dst++=*src++);
529デフォルトの名無しさん:2009/01/04(日) 00:00:53
>>525
>while文の括弧の中は、
>本来は条件式が入るんだが、それは代入だろ。例え括弧で代入式を括っても、
>それに対して条件式にあう措置をとるべき。
530デフォルトの名無しさん:2009/01/04(日) 00:03:01
>>524
ファビョってるのは「while文の中は、条件式が適切なのに、代入式で…」うんぬん
いってる>>442だろ
ながれ読めよ

>>525
>>456 で結論出てるのにいつまでやってんの?
531デフォルトの名無しさん:2009/01/04(日) 00:04:48
>>530
>>524=>>442で本人だからしょうがないんだよw
532デフォルトの名無しさん:2009/01/04(日) 00:15:46
最近よく喧嘩するね
533デフォルトの名無しさん:2009/01/04(日) 00:29:14
テュルー
534デフォルトの名無しさん:2009/01/04(日) 00:29:51
冬休みだからしかたない
535デフォルトの名無しさん:2009/01/04(日) 00:30:16
出た、「冬休み」
536デフォルトの名無しさん:2009/01/04(日) 00:37:35
connect(sock,( struct sockaddr * ) &echoservaddr, sizeof(echoservadr))

この文の * が意味することがまったくわかりません
*の後に文字もないのですが、ポインタとしてありえなくないでしょうか?
537デフォルトの名無しさん:2009/01/04(日) 00:38:30
ポインタ型でキャストしてるだけ
538デフォルトの名無しさん:2009/01/04(日) 00:51:54
人はなぜ>>534のような発言をするのか。
それは「私は子供ではない」と誇示したいからである。

では、「私は大人だ」と主張する人間が「大人」なのだろうか。
答えは否、断じて否である。
539デフォルトの名無しさん:2009/01/04(日) 00:56:57
で?
540536:2009/01/04(日) 00:57:57
つまり&echoservaddr構造体のポインタを
sockaddr構造体のポインタとしてあつかうってことでしょうか?

まったく何をしているか理解できないのですが
541デフォルトの名無しさん:2009/01/04(日) 00:58:58
542デフォルトの名無しさん:2009/01/04(日) 01:00:57
>>540
その通りの事をやっている。
sockaddr_in 構造体を sockaddr 構造体であるかのように
無理矢理見なして渡している。
sockaddr_in 構造体と sockaddr 構造体はサイズが同じで、
かつ、こうやってキャストしてもいいと問題ないとされている。
543デフォルトの名無しさん:2009/01/04(日) 01:02:07
connect()の第2引数はstruct sockddr *型(struct sockddr型へのポインタ)を取る。
そこで、&echoservaddr(echoservaddrのアドレス)をstruct sockddr *型(struct sockddr型へのポインタ)へキャストしている。
544536:2009/01/04(日) 01:03:51
>>542
見なす理由がわからないのです。
sockaddr_inのほうが入ってる情報というか入力する情報は多いし
その情報はconnectする際に必要だと思います。
なのに、何故必要な情報がすべてあひってないsockaddr構造体とみなすのかがよくわかりません
545デフォルトの名無しさん:2009/01/04(日) 01:07:27
http://www.linux.or.jp/JM/html/LDP_man-pages/man2/connect.2.html

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

2番目の引数の型には、const struct sockaddr *が”必要”
546536:2009/01/04(日) 01:08:58
必要な理由がわからないのです。
ていうか、入れてしまっては前述した疑問がわいてしまって
547デフォルトの名無しさん:2009/01/04(日) 01:10:08
理由は、connect()がそういう仕様だから。
connect()を作った人間がそういう風に作ったから。
548デフォルトの名無しさん:2009/01/04(日) 01:11:16
>必要な理由がわからないのです。

なんというか……
549デフォルトの名無しさん:2009/01/04(日) 01:12:22
>>544
総称的な型として sockaddr を用意して、
connect は sockaddr* を受け取る汎用的な形にしておいて、
より詳細な構造体として sockaddr_in を用意し、
それをキャストして渡す、という風になってんじゃないのかね。
場合によっては sockaddr_in 以外のものも作るつもりだった、
あるいは将来作れるように、そういう風にしてんじゃない?
void* でいいような気もするけど、
それだと何でもキャスト無しに渡せちゃうから、
渡していい構造体なのかどうか注意して指定させるように、
キャスト無しでは渡せないようにしているんだと思う。
まあ、全部推測だけどね。
550536:2009/01/04(日) 01:13:40
つまりsockaddr_in 構造体の中にある入力したアドレスに接続するわけですよね。
しかしsockaaddr構造体にはアドレスがない。それなのに、sockaddr構造体とみなしてしまっては、
アドレスないから接続できなくないのでは?ということです。

551デフォルトの名無しさん:2009/01/04(日) 01:14:33
っていうか、全部が全部
現状が正しい前提で理由を付けなくてもいいと思うけど。
頭いいひとにありがちだよね。
552デフォルトの名無しさん:2009/01/04(日) 01:16:41
後の改造のために凝った事やって、
結局改造なんてしなかった、
ってこともよくある話で。
互換性のために、とかもよくある話。
553デフォルトの名無しさん:2009/01/04(日) 01:18:58
>>546
int connect(int sockfd, const void *addr, socklen_t addrlen);
なら、キャストする必要はないが、connect の第二引数が struct sockaddr である以上、
キャストする必要がある。
ここではキャストする型が重要なのではなく、socket作成時に指定したプロトコルファイミリーが重要。
プロトコルファミリーごとにconnectに必要な情報量は異なり、
kernelでもプロトコルファミリーごとに呼ばれるconnecが異なる。
kernelではaddrlen分ユーザー空間からメモリをコピーし、
所望の処理を行うので、struct sockaddr が重要なのではない。
554デフォルトの名無しさん:2009/01/04(日) 01:20:44
>>550
ああ、そういうことか。
sockaddr_inはsockaddrをIPv4に特化したもの。
sockaddr_inを使うのはIPv4だけだ。
connect()はIPv4以外でも使われる。

http://www.linux.or.jp/JM/html/LDP_man-pages/man2/socket.2.html

AF_INETの他に
AF_APPLETALKとかあるだろ。
555536:2009/01/04(日) 01:26:58
>>554
socketでAF_INETを指定しているのですが、
この場合だとIPv4でconnectしてるということでは?
556デフォルトの名無しさん:2009/01/04(日) 01:34:20
>>555
そう。
sockaddr_inを使うのはsockaddrを使うより便利だから。
IPv4を使う場合でもsockaddrにアドレスを設定してもいいよ。でも面倒だよ。
ともかく、connect()が必要とするのはsockaddr_inではなくsockaddrなの。

/usr/include/sys/socket.h にstruct sockaddrとstruct sockaddr_inの定義があるから見比べてみてよ。
557デフォルトの名無しさん:2009/01/04(日) 01:36:55
>>550
sockaddrとしてもsa_familyが読み取れる。
そこがAF_INETならsockaddr_inにキャストしてアドレスを読み取るという風になっている。
ほかのAF_*にも対応するsockaddr_*が存在しうるという仕組み。

>>549
そういうことなんだろうけど、IPv6を収めるには小さすぎたのが惜しかった。
558デフォルトの名無しさん:2009/01/04(日) 01:39:57
どうせサイズ渡してんだし、
sockaddr::sa_family だけでよかった気もする。
559536:2009/01/04(日) 01:42:07
struct sockaddr {
u_short sa_family;
char sa_data[14];
};

sockaaddr構造体はこのようになっているが、何も入力していない

struct sockaddr_in{
short sin_family;
unsigned short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};

inのほうはこのようになっていて、アドレスはポートやファミリーは入力している。

で、このinの方を
struct sockaddr {
u_short sa_family;
char sa_data[14];
};
これとして扱う。しかし、ここにはアドレスが入っていない。
だとしたら、どうやってサーバーに接続する?という疑問がわきます。

けれど、inに入力したファミリーがsockaaddrに引き継がれて、
sockaddrのファミリがわかって、そこからまた、inの構造体を参照?するのでしょうか
どうやって参照するかがまた謎ですが
560536:2009/01/04(日) 01:44:22
>sockaddrとしてもsa_familyが読み取れる。
>そこがAF_INETならsockaddr_inにキャストしてアドレスを読み取るという風になっている。

これだと、sockaaddrをキャストしてもsockaaddrにはポートやアドレス入力してなければ
読み取れないのでは?

561デフォルトの名無しさん:2009/01/04(日) 01:45:14
4.2BSDのsockaddrはsa_lenは無くて、sa_familyだけだった。
562デフォルトの名無しさん:2009/01/04(日) 01:46:55
IPv4として使う場合、
アドレスファミリをAF_INETにして
sockaddr_inにアドレス詰めて
connect()に渡すときはsockaddrにキャストして
connect()の内部ではsockaddr_inとしてアドレスを読み出す。
563デフォルトの名無しさん:2009/01/04(日) 01:48:29
>>561
それが合理的だな。

>>560
sockaddr_in を渡すのなら
sa_family に AF_INET を入れないといけないし、
sa_family に AF_INET を入れるのなら
渡す物は sockaddr_in でなくてはいけない。
それ以外の使い方して変になっても
それはそんな変な使い方をした人が悪い。
564デフォルトの名無しさん:2009/01/04(日) 01:48:51
>>560
入力してなければ読み取れないが、入力するためにsockaddr_inにしてポートやアドレスを入力するんだろ?
キャストしてもメモリの内容は変わらない。
565デフォルトの名無しさん:2009/01/04(日) 01:50:49
echoservaddr.sin_family = AF_INET;
echoservaddr.sin_port = xxx;
echoservaddr.sin_port = yyy;
connect(sock,( struct sockaddr * ) &echoservaddr, sizeof(echoservadr))

――connectの中
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
{
if (addr->sa_family == AF_INET)
{
const const struct sockaddr *addr_in = (const const struct sockaddr *)addr;
だいたいこんな感じのはず。
ここでaddr_in->sin_portを読めばxxxだし、addr_in->sin_addrからはもちろんyyyが読み取れる。
566536:2009/01/04(日) 01:58:56
>connect()に渡すときはsockaddrにキャストして
>connect()の内部ではsockaddr_inとしてアドレスを読み出す。

つまり、connectに渡す情報は、空の
struct sockaddr {
u_short sa_family;
char sa_data[14];
};
これであって、特に決まりで中に何も入力されてなくても意味はない。

で、内部でどこのアドレスに接続するか処理するのが、
struct sockaddr_in{
short sin_family;
unsigned short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
この入力しておいたinの方。ってことでいいのでしょうか。

inをsockaddrにキャストしても入力しておいた値で共通する変数名とかないですもんね
だからキャストしても??
567デフォルトの名無しさん:2009/01/04(日) 02:00:32
空じゃなくてアドレス等を入力したものをsockaddrとみなして渡してる。
(( struct sockaddr * ) &echoservaddr)->sa_data[2]〜[5]とか見れば納得するのかな?
568デフォルトの名無しさん:2009/01/04(日) 02:04:55
>>566
connectに渡しているのは構造体のアドレス。内容は渡していない。
569デフォルトの名無しさん:2009/01/04(日) 02:10:06
#include <stdio.h>

void print_bytewise(const unsigned char *buf, size_t size) {
 size_t i;
 for (i = 0; i < size; i++) {
  printf("%02X ", buf[i]);
 }
 putchar('\n');
}

int main(void) {
 int n = 0x12345678;
 print_bytewise((const unsigned char*)&n, sizeof n);
 return 0;
}

これとやってる事は本質的に同じ。
570536:2009/01/04(日) 02:13:08
>>567
struct sockaddr_in {
u_short sa_family;
char sa_data[14];
[0]short sin_family;
[1]unsigned short sin_port
[2]struct in_addr sin_addr
[3]char sin_zero[8];
};

つまり、イメージ的にはこうなのかな?
571デフォルトの名無しさん:2009/01/04(日) 02:17:05
こう。

sa_family          ⇔ sin_family (2 バイト)
sa_data[0]〜sa_data[1] ⇔ sin_port (2 バイト)
sa_data[2]〜sa_data[5] ⇔ sin_addr (4 バイト)
sa_data[6]〜sa_data[13] ⇔ sin_zero (8 バイト)
572デフォルトの名無しさん:2009/01/04(日) 02:23:51
connect(2)ってだいたいこんな感じで使うだろ。

struct sockaddr_in addr = {
.sin_family = AF_INET,
.sin_port = htons(80),
.sin_addr = {
.s_addr = inet_aton("192.168.1.1")
}
};

connect(skfd, (struct sockaddr *)&addr, sizeof(addr);

>>536はなにか勘違いしてる気がしてならない。
573536:2009/01/04(日) 02:34:31
>>571
お!
もしかして
sockaddr_inは、計16バイトでその情報はsockaddrに全て対応する
sa_family はsinfamilyに
sa_data[14]には残りの14バイトのアドレスが格納されるということになってるのかな

だとすると、どちらかの構造体だけ入力しとけばいいってのも納得できるのですが
これでいいのでしょうか?
574デフォルトの名無しさん:2009/01/04(日) 02:46:42
>>573
いままでの回答全て無駄っぽい。
sockaddrはアドレスファミリーから見れば関係ないんだって。
例えばUNIX ドメインソケットなら sockaddr_un だし、
IPv4なら sockaddr_in がconnectには必要。
ただ、歴史的背景かなにかはしらないが、connect(2)のインターフェースが
「void *」ではなく、「sockaddr *」になってるってだけ。
575536:2009/01/04(日) 02:56:41
>>574
つまり>>571ではないと?
ますますわけわかんなくなってきた

struct sockaddr* をキャストの型として &echoservaddrするってのがよくわからないのかなぁ

&echoservaddrには>>572にかいてあるようなin構造体のアドレスが入力ずみではあるけど
それをキャストすると、どう扱われるってのがよくわかんないかも

いや、本当にみなさんに色々教えてもらっているのに理解がたりなくて申し訳ないです。
キャストとかsockaaddrとかぐぐってるけど、いまいち理解できない・・・
576デフォルトの名無しさん:2009/01/04(日) 03:01:20
>>575
>>571 であってる。
まず、>>569 が理解できるか確認してくれ。
577536:2009/01/04(日) 03:11:36
>>576
すみません。まったくわかりません。
const unsigned char*)&n
char型(nの値が格納されている)アドレスへのポインタ

なんかもうわかりません
578デフォルトの名無しさん:2009/01/04(日) 03:18:13
ま、深夜だし思う存分続けてくれたまえ
579デフォルトの名無しさん:2009/01/04(日) 03:27:31
>>577
典型的な「ポインタを理解していない」状態だね。
まあ、初心者は大抵一度は通る道だ。

ポインタを理解するのは簡単だ。メモリを理解すれば良い。ただそれだけだ。

変数とかの中身はメモリに置かれている。
メモリは1バイト単位に分割されていて、それぞれのバイトに住所が割り振られている。

[0番地][1番地][2番地]・・・

でも、例えば int とかのサイズは1バイトではない。現在は4バイトが主流だね。
こういうのは、メモリ上の連続した領域を占有することになる。
そして、int 型の変数(例えば >>569 の n)に & をつけると、
この連続した4バイトの領域の先頭のバイトの住所が取得できる。

[----------------------- int n ------------------------]
[12938100番地][12938101番地][12938102番地][12938103番地]   (住所は一例)
   ↑
  先頭   &n == 12938100番地

でも、別にこの4バイトの領域を int の値と見なさなくてはいけないわけではない。
例えば勝手に char 4要素の配列だと見なしても構わないわけだ。

[-- char [0] --][-- char [1] --][-- char [2] --][-- char [3] --]
[12938100番地][12938101番地][12938102番地][12938103番地]

んで、この char 4要素の配列の先頭要素の住所もやっぱり12938100番地なわけだ。

こういう解釈の変更を行っているのが、
(const char*)&n みたいなキャストになるわけだ。
580デフォルトの名無しさん:2009/01/04(日) 03:39:44
ポインタってのは2つの属性から構成されている。
1つはメモリ上の占有している領域の先頭の住所(アドレス)と、
そしてそのアドレスにある値を「何の型の値だと見なすか」だ。
ある変数のポインタは、変数に & をつけることで得られる。

変数に & を付ける事によって得られるポインタの型は、
元の変数の型に * をつけた形で表現する。
ポインタは基本的にただアドレスなんつー単なる値を保持するだけのもんなので、
ポインタを保持する変数なんかも作る事ができる。
例えばこんな感じだ。

int *p = &n;

変数 p は n のアドレス、例えば12938100番地などといったような値を保持しているわけだ。
んでさらに、p は int* という型なわけだが、
この int って部分は、12938100番地から始まる領域を int 型の値だと見なすよ、って意味を持っている。

これを char 型の値だと見なしたい場合は、char* にキャストしてしまえばいい。

char *c = (char*)p;

これで、やっぱり変数 c には p に入れられていた領域と同じ場所を指すアドレスが入れられるわけだけど、
c の型は char* なんで、その領域を char 型の値だと見なすようになるわけだ。

この話の int と char を sockaddr_in と sockaddr に置き換えれば、
connect に関する話も分かるはず。
581デフォルトの名無しさん:2009/01/04(日) 03:46:11
ポインタ……それは恋だ!
582デフォルトの名無しさん:2009/01/04(日) 03:48:03
>>580
ポインタの正確な定義わ?
583デフォルトの名無しさん:2009/01/04(日) 03:53:40
ボイン太、それはAVだ!
584デフォルトの名無しさん:2009/01/04(日) 03:56:43
残念ながらボッシュートで〜す
585デフォルトの名無しさん:2009/01/04(日) 05:24:40
ってか、ぶっちゃけお前らの一番好きなC89基本型ってなんなの
586デフォルトの名無しさん:2009/01/04(日) 05:50:24
int
異論は認めない
587デフォルトの名無しさん:2009/01/04(日) 05:58:07
unsigned long int
588デフォルトの名無しさん:2009/01/04(日) 05:59:37
size_t 異論 は 色ん なものがあるだろうから認める
589デフォルトの名無しさん:2009/01/04(日) 06:10:51
char
ちゃ〜
590デフォルトの名無しさん:2009/01/04(日) 06:21:28
size_tって中身はint?
591デフォルトの名無しさん:2009/01/04(日) 06:33:26
符号なしのint型が一般的らしい。time_tとかも。
592デフォルトの名無しさん:2009/01/04(日) 06:33:54
grepすりゃすぐ判るかと
593デフォルトの名無しさん:2009/01/04(日) 06:39:50
>>592 だから何?
594デフォルトの名無しさん:2009/01/04(日) 06:44:36
にしても
>>588>>589はひどいなww
595デフォルトの名無しさん:2009/01/04(日) 07:06:34
俺は断然


bool
596デフォルトの名無しさん:2009/01/04(日) 08:34:21
し、bool……?
597デフォルトの名無しさん:2009/01/04(日) 09:30:43
いやいやいや
void*
598デフォルトの名無しさん:2009/01/04(日) 09:31:48
√とかはC言語で使えないのでしょうか・・?
特殊相対性理論における時間の遅れ、運動してる物体の速度を入力することによって
運動してる物体の時間の刻みを出すプログラムを作りたのですが、・・C言語で√は使えないのでしょうか・・?
599デフォルトの名無しさん:2009/01/04(日) 09:34:48
>>598
確かに特殊相対論は中学生でも理解できるが、お前は別の勉強をした方がいいよ
600デフォルトの名無しさん:2009/01/04(日) 09:35:15
#include <math.h>
601デフォルトの名無しさん:2009/01/04(日) 09:36:56
あえて俺はLPVOIDと書く
602デフォルトの名無しさん:2009/01/04(日) 09:43:28
>>600-601
サンクス
603536:2009/01/04(日) 10:55:21
>>580
丁寧にありがとうございます。
しかによくわからない点があります。

>変数に & を付ける事によって得られるポインタの型は、
>元の変数の型に * をつけた形で表現する。

つまりこれで先ほどの例だと
int n; という宣言が先に必ずある
int *p = &n;    その上で、元の変数の型はint n よりint型であることがわかっているので
p の型はintにしないといけない。よって、nのアドレスが格納されているpは、
(元の変数の型)intに*をつけて int *pとあらわすということですよね。
しかしよくわからないのですが、p = &n; とint *p = &nの違いがわかりません
前者はpにはnのアドレスの値が入っている。
後者はpにはnのアドレスの値が入っているのではないのでしょうか?
前者だと先にint p; と宣言しておけばp はint型になるのでは?

604536:2009/01/04(日) 10:57:59
あと、もう1点ですが
>char *c = (char*)p;

int *p = &n;  としたのなら、
char*c = (char*)*p もしくはchar*c = (char)*p となるのではないのでしょうか?
605デフォルトの名無しさん:2009/01/04(日) 11:04:19
二段ダブルベット
606536:2009/01/04(日) 11:10:16
すみません、もうひとつ
先ほどの例の場合

int型をchar型にする利点というか意味がわからないのですが
サイズが異なる構造体をキャストしたら中身が全然違うのに型を変えるとか想像がつきません

607デフォルトの名無しさん:2009/01/04(日) 11:13:34
>>603
>>580ではないけど、
その日本語だと君がどこまで理解できたのかが分からない
材料は揃ってるようだから、手を動かしたほうがいいよ。

問題の値をそれぞれprintf()してどうなったか、
試すくらいはしてから再度の質問はするものだ
608デフォルトの名無しさん:2009/01/04(日) 11:18:19
型宣言の *と
演算子の*を混同している・・・・?
609デフォルトの名無しさん:2009/01/04(日) 11:20:10
C言語でおk
610デフォルトの名無しさん:2009/01/04(日) 11:28:42
>p の型はintにしないといけない。よって、nのアドレスが格納されているpは、
p の型は int へのポインタ型。

>しかしよくわからないのですが、p = &n; とint *p = &nの違いがわかりません
>前者だと先にint p; と宣言しておけばp はint型になるのでは?
int *p; と宣言してあれば両者はほぼ同じ。

int* っていうのは「int へのポインタ」っていう「型」だってのは OK?
ポインタと元の型はきちんと区別するべき。

>int *p = &n;  としたのなら、
>char*c = (char*)*p もしくはchar*c = (char)*p となるのではないのでしょうか?
c は char へのポインタ型。p は int へのポインタ型。*p は int 型。
(char*)*p だと int 型を char へのポインタという型に変換している(c と型は一致するが普通意味を持たない)。
(char)*p だと int 型を char 型へ変換している(c と型が違うのでコンパイルできない)。

>int型をchar型にする利点というか意味がわからないのですが
>サイズが異なる構造体をキャストしたら中身が全然違うのに型を変えるとか想像がつきません
int へのポインタ型を char へのポインタ型にしても大抵メリットはない。
sockaddr 型と sockaddr_in 型は >571 の通り sa_family の部分は共通しているので >557 の通り
sockaddr へのポインタ型を経由して sa_family を読み出し、AF_INET だったら実は sockaddr_in を指していたんだとして
キャストしてきちんと読み出すことができる。
つまり関数の引数の型としては sockaddr へのポインタ型としてまとめておいて、実際には sa_family に応じて
正しい型にキャストして使うことができる。
611536:2009/01/04(日) 11:33:40
int へのポインタ型。ってのがよくわからないのですが
一つのプログラムでintを宣言する変数なんてたくさんでてくるとおもうのですが、
この場合、intへのポイントとはどうなるのでしょうか?
612デフォルトの名無しさん:2009/01/04(日) 11:43:30
>536
キャストもポインタもないこのコードは理解できる?
sockaddr, sockaddr_in, connect() についても本質的にはこのコードみたいなことをしている(type が sa_family)。

#include <stdio.h>

struct Any
{
    enum { CHAR, INT, DOUBLE } type;
    union {
        char c;
        int n;
        double d;
    } u;
};

void print(struct Any a)
{
    if(a.type == CHAR) printf("%c\n", a.u.c);
    if(a.type == INT) printf("%d\n", a.u.n);
    if(a.type == DOUBLE) printf("%f\n", a.u.d);
}

int main(void) {
    struct A a;
    a.type = CHAR; a.u.c = '>'; print(a);
    a.type = INT; a.u.n = 536; print(a);
    return 0;
}

もっとも共用体が分かるなら最初っから理解できているような気もするけど。
分からなかったら余計混乱する気がするんで無視してくれ。
613デフォルトの名無しさん:2009/01/04(日) 11:49:45
>611
>一つのプログラムでintを宣言する変数なんてたくさんでてくるとおもうのですが、
>この場合、intへのポイントとはどうなるのでしょうか?
そうだね。だから色んな場所を指せるし、指し直したりできる。

char c1;
char c2;
int n;
char *p; /* どこも指してない */

p = &c1; /* c1 のアドレスを指す */
p = &c2; /* c2 のアドレスを指す */
p = (char*)&n; /* n は char型じゃないけどキャストして無理矢理 n の(先頭)アドレスを指す */
614デフォルトの名無しさん:2009/01/04(日) 12:15:32
麻雀は分かるか? 二盃口は七対子と見た目は同じだよね。

|二|二|三|三|四|四|七|七|八|八|九|九|發|發|
|萬|萬|萬|萬|萬|萬|索|索|索|索|索|索|  |  |

これを一盃口を1かたまりで解釈すると二盃口と解釈できるし、

|二|二|三|三|四|四|  |七|七|八|八|九|九|  |發|發|
|萬|萬|萬|萬|萬|萬|  |索|索|索|索|索|索|  |  |  |

全部対子で解釈すると七対子と解釈できる。

|二|二|  |三|三|  |四|四|  |七|七|  |八|八|  |九|九|  |發|發|
|萬|萬|  |萬|萬|  |萬|萬|  |索|索|  |索|索|  |索|索|  |  |  |

そして、別に役とか関係無しに単に牌が 14 個並んでいるだけだと解釈することもできる。

|二|  |二|  |三|  |三|  |四|  |四|  |七|  |七|  |八|  |八|  |九|  |九|  |發|  |發|
|萬|  |萬|  |萬|  |萬|  |萬|  |萬|  |索|  |索|  |索|  |索|  |索|  |索|  |  |  |  |
615デフォルトの名無しさん:2009/01/04(日) 12:16:14
ここで、1つの牌を1バイトと考え、
対子を2バイトの toitsu_t 型で、
一盃口を6バイトの ipeko_t 型で表せるとする。

役とは関係無しにただ牌が 14 個並んでいると解釈している時は手牌を

char tehai[14];

というただの char 配列で眺めているのに相当する。
二盃口と解釈している時は手牌を

struct ryanpeko_t {
 ipeko_t ipeko[2];
 toitsu_t toitsu;
};

という構造体だと見なして解釈しているのに相当する。
七対子と解釈している時は手牌を

struct chitoitsu_t {
 toitsu_t toitsu[7];
};

という構造体だと見なして解釈しているのに相当する。
616デフォルトの名無しさん:2009/01/04(日) 12:16:36
#include <iostream>
using namespace std;
#include <math.h>

void atai();
int main()
{
cout<<"こんにちわ。"<< endl;
atai();
return 0;
}
void atai()
{
double v;/*v=物体の速さ*/
double undou;/*運動する物体の時間の刻み*/
double c = 108000000;/*光の速さ*/
cout<<"物体の速さ入力:(km)";
cin>>v;
double ruto;
ruto = sqrt(1 / (1.0000000 - (v/c) * (v/c)));
undou = ruto;
cout<<"物体の時間の刻み"<<undou<<endl;
cout<<"静止している物体が1年間すごしている間"<<endl;
cout<<"運動している物体は"<<1 / ruto<<"年間過ごしてる"<<endl;

}

光の速さより大きい数字を入力すると-1.#INDと、表示されます・・
617デフォルトの名無しさん:2009/01/04(日) 12:17:38
役が成り立っているか脳内で判定してると思うが、
まあそういう役が成り立っているかを判定する関数があるとする。

int check_toitsu(const toitsu_t *toitsu);  /* ちゃんと対子として成り立っていれば 1 を、そうでなければ 0 を返す */
int check_ipeko(const ipeko_t *ipeko);   /* ちゃんと一盃口として成り立っていれば 1 を、そうでなければ 0 を返す */

これを使って ryanpeko_t 型の値が本当に二盃口として成り立っているのかをチェックする関数を作ると、こうなって、

int check_ryanpeko(const ryanpeko_t *ryanpeko) {
 return
  check_ipeko(&ryanpeko->ipeko[0]) &&
  check_ipeko(&ryanpeko->ipeko[1]) &&
  check_toitsu(&ryanpeko->toitsu);
}

chitoitsu_t 型の値が本当に七対子として成り立っているのかをチェックする関数を作ると、こうなる。

int check_chitoitsu(const chitoitsu_t *chitoitsu) {
 int i;
 for (i = 0; i < 7; i++)
  if (!check_toitsu(chitoitsu->toitsu[i]))
   return 0;
 return 1;
}

んで、手牌 tehai をこのチェック関数に渡すには、こんな感じになるわけだ。

if (check_ryanpeko((const ryanpeko_t*)&tehai))
 puts("二盃口として解釈可能です");

if (check_chitoitsu((const chitoitsu_t*)&tehai))
 puts("七対子として解釈可能です");
618デフォルトの名無しさん:2009/01/04(日) 12:18:15
>>616
負の値の平方根はできない
619デフォルトの名無しさん:2009/01/04(日) 12:18:41
とりあえず、「速さ」の単位は「km」じゃないよ。
ローレンツ変換の前に学ぶことがあると思うんだ。。

620デフォルトの名無しさん:2009/01/04(日) 12:19:08
割り込まれてしまったが、
>>614>>615>>617 の順で読んでくれ。
621デフォルトの名無しさん:2009/01/04(日) 12:20:49
すげーな、この流れは
ポインタFAQ用のテンプレとして、是非利用すべきだ
まったく読んでないけど
622デフォルトの名無しさん:2009/01/04(日) 12:20:59
>>616
#include <complex.h>
623デフォルトの名無しさん:2009/01/04(日) 12:25:46
>>619
cが時速なんで許容範囲のようだ
624デフォルトの名無しさん:2009/01/04(日) 12:28:52
年速じゃないの?
625デフォルトの名無しさん:2009/01/04(日) 12:31:13
>>619
ごめんなさい・・・
626536:2009/01/04(日) 12:32:34
>>610
sockaddrのほうはsa_family
inのほうはsin_family

共通してないきがするのですが、
キャストしても別に扱われるのでは?
627デフォルトの名無しさん:2009/01/04(日) 12:36:00
fopen_sとfclose関数を用いてファイルの読み書きするプログラムを作成しているのですが、
ファイルを新規に作成し書き込む場合に、
すでに同名のファイルが存在する場合や、ディレクトリーに書き込めない場合に
エラーを返すようにするにはどうすればよいでしょうか?
628デフォルトの名無しさん:2009/01/04(日) 12:39:18
>>624
c = 108000000なんで時速kmになってる
629デフォルトの名無しさん:2009/01/04(日) 12:40:10
char mem[sizeof(sockaddr)];
struct sockaddr *sad = (struct sockaddr *)mem;
struct sockaddr_in *sadi = (struct sockaddr_in *)mem;

とすると、
sad->sa_familyは、memの0バイト目からsizeof(u_short)バイト
sadi->sin_familyは、memの0バイト目からsizeof(short)バイト
の領域をその値とする。

呼び方が違うだけで、同じデータ。
630デフォルトの名無しさん:2009/01/04(日) 12:48:45
そもそも長さと速さの単位の違いを分かっているのだろうか。
631536:2009/01/04(日) 12:50:08
てことは、つまりsockaadr_inにあった各変数がキャストした型にあてはめられる?
struct sockaddrn{
u_short sa_family = sin_family;
char sa_data[2]; = short sin_port;
char sa_data[4]; = in_addr sin_addr;
char sa_data[4]; = sin_zero[8];
};

こういうことになるということでしょうか?
あと、sizeof(sockaddr)をするとなんでsockaddr_inのサイズもわかるのかわかりません。
これは、sockaddrとsockaddr_inの構造体のサイズが同じだから
別にsizeof(sockaddr_in)でもいいということかな
632デフォルトの名無しさん:2009/01/04(日) 12:51:54
こんな教えて君に付き合うなんて
おまえよっぽど暇なんだな
Cの入門書でも読んどけって、話はそれからだ
で済むと思うんだが
633デフォルトの名無しさん:2009/01/04(日) 12:51:56
にゃ〜ん
634536:2009/01/04(日) 12:52:18
>>617
麻雀はわからないのですが、*ryanpeko はどこをさしているのでしょうか?

635デフォルトの名無しさん:2009/01/04(日) 12:52:54
>>627
fopen_s()の戻り値で判断すればいいんじゃないの?

http://msdn.microsoft.com/ja-jp/library/z5hh6ee9(VS.80).aspx
http://msdn.microsoft.com/ja-jp/library/t3ayayh1(VS.80).aspx
636デフォルトの名無しさん:2009/01/04(日) 12:53:22
修正
#include <iostream>
using namespace std;
#include <math.h>
void atai();
int main()
{
cout<<"こんにちわ。"<< endl;
atai();
return 0;
}
void atai()
{

double v;/*v=物体の速さ*/
double undou;/*運動する物体の時間の刻み*/
double c = 1080000000;/*光の速さ*/
cout<<"物体の速さ入力:(km/h)";
cin>>v;
if(1 <= v && v <= 1080000000 ){
double ruto;
ruto = sqrt(1 / (1.0000000 - (v/c) * (v/c)));
undou = ruto;
cout<<"物体の時間の刻み"<<undou<<endl;
cout<<"静止している物体が1年間すごしている間"<<endl;
cout<<"運動している物体は"<<1 / ruto<<"年間過ごしてる"<<endl;
}
else{
cout<<"光の速さを超えることはできません"<<endl;}

}
637デフォルトの名無しさん:2009/01/04(日) 12:54:01
>>631
connect()のソース読めよ
話はそれからだ
638デフォルトの名無しさん:2009/01/04(日) 12:54:32
>>627
100% 完全な方法はないと思う。

1. "r" で開いて、開けたら fclose してエラーを返す。
2. "w+" で開いて、開けなかったらエラーを返す。
3. ファイルサイズが 0 でなければ fclose してエラーを返す。
4. "w" で freopen_s する。

がまだましな方法だとは思うが、
1 と 2 の僅かな間にサイズ 0 のファイルを作られたらチェックから漏れる。
639デフォルトの名無しさん:2009/01/04(日) 12:56:13
>>631
まあそんなところだ。
sizeof に関しては、sizeof (sockaddr) は危険。
sockaddr_in を渡しているのだから、sizeof (sockaddr_in) にすべき。
640デフォルトの名無しさん:2009/01/04(日) 13:00:30
>>636
vが光速より大きいと、v/cが1より大きくなる。そうすると(v/c) * (v/c)が1より大きくなる。
そうすると1.0000000 - (v/c) * (v/c)が負になる。そうすると1 / (1.0000000 - (v/c) * (v/c))が負になる。
そうするとsqrt()の引数が負になって定義域エラーになる。
641536:2009/01/04(日) 13:02:42
なるほど。>>631みたいな感じなのですか。
これだとなんとか理解できます。こんなめんどくさいことするのはconnectの決まりだからというわけですね。

642デフォルトの名無しさん:2009/01/04(日) 13:05:20
>>641
IP以外のプロトコルのアドレスも扱えるようにしてるんじゃないかな
643デフォルトの名無しさん:2009/01/04(日) 13:12:24
>>641,642
おや、話が半日前に戻ったぞw
進歩がないスレだな
644デフォルトの名無しさん:2009/01/04(日) 13:13:54
>>643
while(代入式)の人ですね?分かります
645デフォルトの名無しさん:2009/01/04(日) 13:19:47
while君と教えて君が出現するとスレが無駄に進む
646デフォルトの名無しさん:2009/01/04(日) 13:21:50
>>645
無駄だと思うならこのスレに来るなよ馬鹿
647デフォルトの名無しさん:2009/01/04(日) 13:24:40
いや進めよう、いざ進め
さあ、次の質問カマーーン!?
648536:2009/01/04(日) 13:27:41
char c1;
char c2;
int n;
char *p; /* どこも指してない */

p = (char*)&n; /* n は char型じゃないけどキャストして無理矢理 n の(先頭)アドレスを指す */


よく考えたらpはchar *pと宣言しているからpはchar型じゃないか
だったら キャストなんてしなくてもいいんじゃないの?
char *p
p = &n; で 
649デフォルトの名無しさん:2009/01/04(日) 13:30:00
while君もcast解らん君も
自ら試すということをしないところに共通点が。

>>644
オレはレベルの低い質問については回答側だよ。
どっちも実験しようとすれば5分で結果出るじゃん。
初心者歓迎のスレは別にあるのにこのスレの存在意義が
わかんね。
650デフォルトの名無しさん:2009/01/04(日) 13:34:24
>>648
ここでそんなことしても意味ないから。
コンパイラへの明確な指示と人間の可読性を考えて
ソースは書くんだよ。
> char *p
> p = &n;
それコンパイル通してみた?

gccなら-Wallつけて、コンパイラがどう言うかちゃんと
向き合いながら勉強しなよ。
651デフォルトの名無しさん:2009/01/04(日) 13:34:34
>>648
&nはint*型だから。
それを代入する先の変数pはそれとは異なるchar*型。
そのため、キャストして&nをchar*型にしてやらないといけない。
652デフォルトの名無しさん:2009/01/04(日) 13:37:31
教えたがりが殺到してわけわからなくなってるな。
653デフォルトの名無しさん:2009/01/04(日) 13:44:33
つーか、最近の2chは微温くなったもんだな。
俺の若いころは、ちょっとバカな質問すると
逝ってよし!
半年ROMれ
とか言われたもんだが
654デフォルトの名無しさん:2009/01/04(日) 13:47:03
ここは、二番目にバカな質問を受け付けるハコだからな。
一番は、宿題スレ
655デフォルトの名無しさん:2009/01/04(日) 13:54:22
>>654 thx
本当だ
初心者歓迎C/C++室の方がレベルが高いw
656デフォルトの名無しさん:2009/01/04(日) 14:00:01
宿題スレにだけは足を踏み入れる気がしない。
657デフォルトの名無しさん:2009/01/04(日) 14:03:05
宿題スレだってピンからキリまでだよ。
アホも多いけどレベル高い人もちゃんといる。
658デフォルトの名無しさん:2009/01/04(日) 14:46:51
>>649
> 自ら試す
コンパイラが通せば正しいとは限らないんだが・・・
それを指摘されてファビョったキチガイですね?分かります。
659デフォルトの名無しさん:2009/01/04(日) 14:47:27
もう秋田
660デフォルトの名無しさん:2009/01/04(日) 14:50:27
>>648
キャストしないとワーニングが出るよ
661デフォルトの名無しさん:2009/01/04(日) 14:54:07
>>658
正しい場合でもそれと分からないやつにはな・・・
662デフォルトの名無しさん:2009/01/04(日) 14:56:08
配列のサイズを指定せず、配列に数値を格納して行く度に
配列のサイズを増やしていく方法がわかりません
言語はC++です
このような事は可能なのでしょうか、また出来るなら
どのようにすればいいのかご教示願います
663デフォルトの名無しさん:2009/01/04(日) 14:59:10
>>662
std::vector か std::deque 使え。
664デフォルトの名無しさん:2009/01/04(日) 14:59:24
STLのvectorでresize()を使うのはいかがでしょうか?
665デフォルトの名無しさん:2009/01/04(日) 15:00:06
push_back や insert でいいだろ
666デフォルトの名無しさん:2009/01/04(日) 15:04:32
http://www.amazon.co.jp/iStudy-BB-Skills-C%E8%A8%80%E8%AA%9E%E3%83%97%E3%
83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%9F%BA%E7%A4%8
E-%E3%83%91%E3%83%BC%E3%83%95%E3%82%A7%E3%82%AF%E3%83%88P/dp/B00008V
CD1/ref=sr_1_3?ie=UTF8&s=software&qid=1231048974&sr=8-3
こいつで解決
これにて糸冬 了..._φ(゚∀゚ )
667デフォルトの名無しさん:2009/01/04(日) 15:06:57
>>666
URL長すぎ
書籍名を書け
668662:2009/01/04(日) 15:07:08
皆さんありがとうございました
これで詰んでた課題が進めそうです
669デフォルトの名無しさん:2009/01/04(日) 15:07:59
iStudy BB for IT Skills C言語プログラミング基礎 パーフェクトP
670デフォルトの名無しさん:2009/01/04(日) 15:10:26
>>666
amazon の URL を縮める方法も知らない奴は勘弁して欲しい。
http://www.amazon.co.jp/dp/B00008VCD1/
671デフォルトの名無しさん:2009/01/04(日) 15:12:20
>>670
今回だけは勘弁してやるから、URLの縮め方をここに書け
672デフォルトの名無しさん:2009/01/04(日) 15:13:53
>>671
>>666>>670 を見比べりゃ分かるだろ・・・。
673デフォルトの名無しさん:2009/01/04(日) 15:15:26
>>672
お前が分かるなら、お前がやり方を書け
674デフォルトの名無しさん:2009/01/04(日) 15:17:24
>>673
そうやって法則性を見つける努力を怠るからダメなんだよ。
675デフォルトの名無しさん:2009/01/04(日) 15:18:18
>>674
そんな無意味な煽りを書く暇があったら、さっさとやり方を書け
676URLの気持ち:2009/01/04(日) 15:18:27
俺なんのために付属されたんだろう・・・orz
677デフォルトの名無しさん:2009/01/04(日) 15:19:27
>>675
そんな無意味な煽りを書く暇があったら、さっさとやり方を考えろ
678デフォルトの名無しさん:2009/01/04(日) 15:20:23
暇な奴って怖いなまで読んだ
679デフォルトの名無しさん:2009/01/04(日) 15:20:31
>>677
やり方は考えるものではなく、存在するものだ
解っているなら、さっさと書け
680デフォルトの名無しさん:2009/01/04(日) 15:21:35
>>679
やり方は存在するものではなく、考えるものだ
解らないなら、さっさと考えろ
681デフォルトの名無しさん:2009/01/04(日) 15:21:50
よーしパパがんばって教えちゃうぞー
って仕事の電話が
すまん今はダメのようだ
682デフォルトの名無しさん:2009/01/04(日) 15:22:41
よーしパパがんばってID出しちゃうぞー☆
683デフォルトの名無しさん:2009/01/04(日) 15:23:27
質問に答えない、無意味な質問スレッド

死ね
684デフォルトの名無しさん:2009/01/04(日) 15:27:13
教えて欲しいなら下手に出ろよw
685デフォルトの名無しさん:2009/01/04(日) 15:29:06
下手に出ても教えないけどな。
見りゃすぐ解る事を教える事ほど害悪なことは無い。
686デフォルトの名無しさん:2009/01/04(日) 15:33:12
ワカラン → 教えろカス → 嫌 → 氏ね
小学生ですね
わかります
687デフォルトの名無しさん:2009/01/04(日) 15:34:01
>>683
おめーに答える義務はねー
688デフォルトの名無しさん:2009/01/04(日) 15:40:37
3分LifeHacking:Amazonの長いURLを短縮表示する - ITmedia Biz.ID
http://www.itmedia.co.jp/bizid/articles/0805/13/news065.html
689デフォルトの名無しさん:2009/01/04(日) 15:42:37
>>684
死ね

>>685
死ね

>>686
死ね

>>687
死ね

>>688
ありがとう
690デフォルトの名無しさん:2009/01/04(日) 15:43:20
>>688
死ね
691デフォルトの名無しさん:2009/01/04(日) 16:05:14
http://www.amazon.co.jp/iStudy-BB-Skills-C%E8%A8%80%E8%AA%9E%E3%83%97%E3%
83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%9F%BA%E7%A4%8
E-%E3%83%91%E3%83%BC%E3%83%95%E3%82%A7%E3%82%AF%E3%83%88P/dp/B00008V
CD1/ref=sr_1_3?ie=UTF8&s=software&qid=1231048974&sr=8-3

http://www.amazon.co.jp/dp/B00008VCD1/

え?これの区別も一人で解決できないの?
辞めたほうがいいよ 君
てか こないで
692デフォルトの名無しさん:2009/01/04(日) 16:05:54
void error(char * errormessage)
{
perror(errormessage);
exit(1);
}

error("エラーです")

これを実行するとエラーです と表示されますよね

でも、
void mputs(char *p)
{
while(*p);
printf("&c", *p);
p++;
}
printf("\n");
}

mputs("エラーです”);

前者と後者では表示される文字は同じですよね。
後者だと変数pが指定する領域を1バイトのchar型として、読み取るので1文字ずつループしていってますよね
でも前者だとそのようなループがないのに、1バイトのchar型として一度に全部の文字を表示しているって
おかしくないでしょうか?
693デフォルトの名無しさん:2009/01/04(日) 16:10:46
694デフォルトの名無しさん:2009/01/04(日) 16:12:04
>>692
先ず、Cでは文字列をどう表わすか知ってる?
695デフォルトの名無しさん:2009/01/04(日) 16:12:55
>>692
void perror( const char *string );
文字列の先頭のアドレスを指定します

何の問題もありません
696デフォルトの名無しさん:2009/01/04(日) 16:14:58
>>692
char *aiueo = "あいうえお";
myprint(aiueo);

void myprint(char *str)
{
 printf("%s\n", str);
}

何かおかしい?
697デフォルトの名無しさん:2009/01/04(日) 16:19:26
>>696
ポインタ使う必要があるのでしょうか?
698デフォルトの名無しさん:2009/01/04(日) 16:21:02
>>697
それでは、逆にポインタを使わなければどうなるのでしょうか?
699デフォルトの名無しさん:2009/01/04(日) 16:21:48
>>698
ポインタ使う場合は、下記の文になる
使わないとできない

void mputs(char *p)
{
while(*p);
printf("&c", *p);
p++;
}
printf("\n");
}

mputs("エラーです”);
700デフォルトの名無しさん:2009/01/04(日) 16:31:26
string aiueo("あいうえお");
myprint(aiueo);

void myprint(string str)
{
 cout << str << endl;
}
701デフォルトの名無しさん:2009/01/04(日) 16:38:39
char *aiueo = "あいうえお";
myprint(aiueo);

void myprint(char *str)
{
 printf("%s\n", str);
}

変数aieuoに文字列 あいうえお を代入
char[0]にあ char[1]にい char[2]にう を入れる。
つまり、aiueoが指すアドレス領域はすべてchar型だと
で、aiueoを指定するとchar[0]のアドレスが得られる。
そのアドレスを引数にして関数に渡す。渡された関数でも同じことをし
str配列の中身を全て表示する

ということでしょうか
702デフォルトの名無しさん:2009/01/04(日) 16:40:35
だとしたら、こんな文でするよりそっちでしたほうがいいってことですよね
こんな文は使い道ないということかな

void mputs(char *p)
{
while(*p);
printf("&c", *p);
p++;
}
printf("\n");
}

mputs("エラーです”);
703デフォルトの名無しさん:2009/01/04(日) 16:43:37
>>701
システムがメモリーを確保して、そこに"あいうえお"と言う文字列定数を配置。
その先頭アドレスをchar型へのポインタ変数aiueoに代入。

aiueoが示すのは"あいうえお"の先頭だけ。
ただし、コンパイラはaiueoを使うときには、char単位に操作することを知っている。(char *と宣言したから)
704デフォルトの名無しさん:2009/01/04(日) 16:48:13
なんでaiueoには先頭アドレスしかはいってないのに
void myprint(char *str)
{
 printf("%s\n", str);
}
これで、全部表示されるかがわかりません。
引数としてmyprintに渡すのは先頭アドレス。
その先頭アドレスをchar *str でどう処理しているのでしょうか?
705デフォルトの名無しさん:2009/01/04(日) 16:51:28
>>704
Cの文字列について勉強するといいかも。

それから、↓の6.2を読んでみるとわかるかも。
http://www.kouno.jp/home/c_faq/c6.html
706デフォルトの名無しさん:2009/01/04(日) 16:59:27
こういうので、ネットでいちいち質問してたら効率悪すぎるよ。
適当な入門書でも読んでみたら?
707デフォルトの名無しさん:2009/01/04(日) 17:00:04
ダメだ全然わからない
なんでポインタの文字を一気に表示できるんだ

708デフォルトの名無しさん:2009/01/04(日) 17:00:21
>>706
独習Cよんでるがわからない
709デフォルトの名無しさん:2009/01/04(日) 17:01:10
文字列と配列 - 文字列 - C言語 入門
http://www.cppdrive.jp/cstart/string/index1.html
710デフォルトの名無しさん:2009/01/04(日) 17:01:20
そういうもんだって深く考えずに受け入れることも大事。
711デフォルトの名無しさん:2009/01/04(日) 17:02:14
>>707
ポインタの指してるとことから連続で並んでるからだろ。
712デフォルトの名無しさん:2009/01/04(日) 17:04:41
なんで、*strじゃなくてstr
713デフォルトの名無しさん:2009/01/04(日) 17:06:18
>>704の疑問がすべて>>702に書かれているというのに…
714デフォルトの名無しさん:2009/01/04(日) 17:12:21
過去を振り返っては駄目です
715デフォルトの名無しさん:2009/01/04(日) 17:13:26
>>658
俺はwhile君じゃないよ。回答側と言っている
お前はここ来るまえに日本語からやりなおせ
716デフォルトの名無しさん:2009/01/04(日) 17:14:36
宿題スレと統合したら?
結局、皆さんのおかげで課題が進みそうってw
717デフォルトの名無しさん:2009/01/04(日) 17:17:08
宿題スレは課題丸投げ用
718デフォルトの名無しさん:2009/01/04(日) 17:19:07
宿題テンプレも埋めるのが面倒臭いから、こっちに投げてんだろ。
テンプレ強制になっても、他に飛び火するだけ。
719デフォルトの名無しさん:2009/01/04(日) 17:23:15
文字列を作成すると自動的に末尾に\0が付加される
char *str = "あいうえお"
とすると
正確には あいうえお\0となっている
ので先頭の str[0] のアドレスさえ分かっていれば
\0がくるか0がくるまで その内容は何かしらの意味を持った文字列だと認識する

自分でもやってるだろ?
デバッカで
char *str = "あいうえお";
の内容を見てみれば分かる
720デフォルトの名無しさん:2009/01/04(日) 17:43:06
>>719
わかりました。
\0が出てくるまでが文字列ということですね。
721デフォルトの名無しさん:2009/01/04(日) 17:49:04
>>640
非常に解りやすい!!!
サンクスです
722デフォルトの名無しさん:2009/01/04(日) 18:20:00
ウィンドウに貼り付けたプッシュボタンのWM_NCHITTESTメッセージをキャッチするには
サブクラス化するしかないのでしょうか?
723デフォルトの名無しさん:2009/01/04(日) 18:49:02
そうだね。
724デフォルトの名無しさん:2009/01/04(日) 19:02:04
今リスト構造やってるんですが、ポインタが非常に分かりづらい;
どなたかおすすめのポインタ解説サイト知ってましたら
教えていただけないでしょうか
725デフォルトの名無しさん:2009/01/04(日) 19:33:56
小数点のより右の数字だけを取る方法はないでしょうか?
x * y =200.1となったら0.1にしてしまうような
726デフォルトの名無しさん:2009/01/04(日) 19:37:41
z = x * y;
z = z - (int)z;
727デフォルトの名無しさん:2009/01/04(日) 19:38:38
>>726
ハイパーサンクス!!
728デフォルトの名無しさん:2009/01/04(日) 19:38:45
trunc
729デフォルトの名無しさん:2009/01/04(日) 19:42:53
>726 の方法だとzがintの範囲をオーバーフローしてるときにおかしくなるね
730デフォルトの名無しさん:2009/01/04(日) 19:56:28
それと負の数も考えて、floorつかえばいいさ
731デフォルトの名無しさん:2009/01/04(日) 19:57:05
floorじゃだめか負の数
732デフォルトの名無しさん:2009/01/04(日) 19:58:39
modf使えよカス
733デフォルトの名無しさん:2009/01/04(日) 20:02:34
倍精度でも仮数部が52bitだから
64bit整数型使えば精度的に大丈夫のはず
734デフォルトの名無しさん:2009/01/04(日) 20:23:28
だから0方向切り捨てなんだからtrunc一発で終わりなんだって
735デフォルトの名無しさん:2009/01/04(日) 21:47:38
クラスは分かったけど配列クラスで詰んだ…
他にも同じような人いそうだな…
またこれが使えるようになった人ってのはやっぱり
テキスト熟読してやっとの事で理解出来たんだろうか
736デフォルトの名無しさん:2009/01/04(日) 21:50:54
>735
「配列クラス」というのは何のことだ
vector等のことか、それともオブジェクトの配列なのか
737デフォルトの名無しさん:2009/01/04(日) 22:26:27
grwinで三角形を任意の角度回転させて表示するってのを作ってるんですが
三角形の中心を求めて原点に置き、回転させる方法が分かりません・・
どなたかご教授おねがいしまう
738デフォルトの名無しさん:2009/01/04(日) 22:53:34
>>737
教授なんかできるか。
1. ググれない事情がある。
2. それらしい解説ページは見つけたが、言葉の意味が解らない。
3. 意味は解るが、コードに落とせない。
どれだ?
739デフォルトの名無しさん:2009/01/04(日) 23:06:20
>>738
そんな書き込み要らないから
740デフォルトの名無しさん:2009/01/04(日) 23:07:59
>>737
三角形の中心って外心?
重心なら簡単なんだけど。
741デフォルトの名無しさん:2009/01/04(日) 23:09:05
高校の数学の教科書でも見直せばいいんじゃね?
742デフォルトの名無しさん:2009/01/04(日) 23:26:06
普通に考えて慣性モーメントが最低の軸、つまり重心を通る軸じゃね?
743デフォルトの名無しさん:2009/01/04(日) 23:35:11
なるほど。
でも軸なの?
重心を中心にして点対称に回転させるんじゃないの?

ともかく「三角形の中心」を決めないと。
内心?外心?垂心?重心?傍心?
744デフォルトの名無しさん:2009/01/04(日) 23:41:57
中心が決まったら、あとは「アフィン変換」「回転行列」「クォータニオン」辺りで。
745デフォルトの名無しさん:2009/01/05(月) 00:38:14
>>737
>三角形の中心
中心は5つほどありますが、どれになさいますか
746デフォルトの名無しさん:2009/01/05(月) 00:44:06
傍心は中心じゃないだろw
747デフォルトの名無しさん:2009/01/05(月) 00:48:56
>>746

三角形の中心(さんかくけいのちゅうしん)とは、任意の三角形から一意的に求めることができる点の総称である。単に心または芯とも呼ばれる。

「五心」と呼ばれる点(内心・外心・重心・垂心・傍心)が一般的に広く知られている。
748デフォルトの名無しさん:2009/01/05(月) 00:59:00
下の例のような文字列や小数などが入り混じったchar型の変数の配列があります。
これから小数だけを取り出してファイル出力したいのですが、何かいい方法はあるでしょうか?

char name[0]=frame
char name[1]=0.123  ←取り出したい
char name[2]=23
char name[3]=1.234  ←取り出したい
749デフォルトの名無しさん:2009/01/05(月) 00:59:39
まるちうぜえ
750デフォルトの名無しさん:2009/01/05(月) 01:06:24
>文字列や小数などが入り混じったchar型の変数の配列
751デフォルトの名無しさん:2009/01/05(月) 01:19:51
取り出す前に、どうやって入れたのか知りたい
752デフォルトの名無しさん:2009/01/05(月) 01:27:54
そうだな
小数入れる前に構造体にしてフラグ立てとけよカス
753デフォルトの名無しさん:2009/01/05(月) 01:45:18
for(int i = 0; i < 4; i++){
 if(name[i].isFloat())
  name[i].toFile();
}
754デフォルトの名無しさん:2009/01/05(月) 02:49:45
規格書高ぇ・・・
755デフォルトの名無しさん:2009/01/05(月) 06:54:50
Unicode対応プログラムの作成練習してるけどしょっぱなからつまずいた…

#include<stdio.h>
#include<tchar.h>
#define _UNICODE
#define UNICODE

int main(void){

TCHAR uni[]=_T("UnicodeTest");

printf("%s\n",uni);
return 0;
}

上記のコードを実行するとUしか出力されません。原因はUの2バイト目が00なので
ヌル文字と勘違いしてしまうからだと予想しますがforで回すしか回避方法はないのでしょうか?
756デフォルトの名無しさん:2009/01/05(月) 07:10:05
つ wprintf
757デフォルトの名無しさん:2009/01/05(月) 07:20:54
TCHAR 使うんなら _tprintf だろ・・・。
それに、_UNICODE を定義するのなら tchar.h をインクルードする前っつーか、
プロジェクトファイルの設定をいじれ。
_MBCS が定義されてるかもしんないし、混乱の原因になる。
758デフォルトの名無しさん:2009/01/05(月) 07:24:04
(^ー゚)テヘッ
759デフォルトの名無しさん:2009/01/05(月) 08:29:01
か   わ   い   い
760デフォルトの名無しさん:2009/01/05(月) 11:46:49
>>754
X3010なら俺の上でアンアン言ってるぜ
761デフォルトの名無しさん:2009/01/05(月) 13:15:32
それ規格書じゃなくて魔導書じゃね?
762デフォルトの名無しさん:2009/01/05(月) 20:33:37
インデックスか
763デフォルトの名無しさん:2009/01/05(月) 20:34:35
vs2003を使っている者です。
ヘッダで構造体を
struct fff{
double a;
double b;
double c;
double d;
double e;
double f;
double g;
double h;
double i;
double j;
};

struct fff ggg[2]={
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0}
};

こういった形で宣言・初期化しているのですが、
double型のメンバの数を11個以上に増やすと、この構造体と全く関係のない処理でおかしな動きをしてしまうのです。
例えば、プログラム内で全く使われない、double型のメンバ数11以上の構造体を作ったとしても、どこかの演算に影響を及ぼしてしまうようです。
これは一つの構造体の大きさに上限があるということなのでしょうか?
また、これを解決し、多くのメンバを持つ構造体を宣言する方法などがあれば教えてください。
764デフォルトの名無しさん:2009/01/05(月) 20:45:14
>>762
イ、禁書目録?
765デフォルトの名無しさん:2009/01/05(月) 20:53:17
>>763
>ヘッダで構造体を宣言・初期化している
「そのヘッダをいろんなファイルで読み込んでいる」に500ガバス
766デフォルトの名無しさん:2009/01/05(月) 21:02:01
>>756
>>757
サンクス
767デフォルトの名無しさん:2009/01/05(月) 21:03:27
レイテンシ
768デフォルトの名無しさん:2009/01/05(月) 21:06:07
>>763
メンバ数の上限がそんなに低いところにあるとは考えられない。何か勘違いをしていると思われ。
問題の再現する最小限のソースを貼りたまえ。
769デフォルトの名無しさん:2009/01/05(月) 21:08:49
0x0040とは一体どういう意味なのでしょうか?

0xがつくから16進数かと思ってたけど違いますよね?

あとif文で、 変数 & 0x0040 == 0 とかいった文がありますが
これはどういう意味なのでしょうか?
この場合、変数には絶対0x0040のような値がはいるということでしょうか
また==0 で何を判定しているのでしょうか?

よろしくお願いいたします。
770デフォルトの名無しさん:2009/01/05(月) 21:11:11
テキストファイルを読み込み、行数を数えるプログラムを作れ(C言語)

との課題が出ました。
テキストファイルを読み込み配列(構造体で定義)に格納するところまでできたのですが

行数をカウントするプログラムがうまくいきません。

現在
char *strText(構造体で定義)

for (Count = 0; Count < TextVol(構造体で定義); i++) {
 if (strText[Count] == 0x0D) EnterCount++;
}

という感じです。
これだと
「abc□
 d□
 ef□
 g」
(□==改行)
という行は3行とカウントされてしまいます。(希望は4行)
ちなみにテキストファイルを読み込む関数と、カウントする関数は別で作れといわれています。

どうすれば最後
771デフォルトの名無しさん:2009/01/05(月) 21:11:54
> 0xがつくから16進数かと思ってたけど違いますよね?
まず、どうしてそう思うのか説明してくれ
772770:2009/01/05(月) 21:12:06
とぎれてしまいました

どうすれば最後の行が空でない場合カウントさせることができるでしょう?
773デフォルトの名無しさん:2009/01/05(月) 21:13:30
>>772
+1すればいいじゃん。
774770:2009/01/05(月) 21:22:28
>>773
その場合、
「abc□
 d□
 ef□
 g□

を5行とカウントしてしまいます。
空白行はカウントせずに最終行が空白行じゃない場合のみカウントさせたいのですが、いい方法はありませんか?
775デフォルトの名無しさん:2009/01/05(月) 21:26:09
>>769
0x0040は16進数で、10進数にすると64
>この場合、変数には絶対0x0040のような値がはいるということでしょうか
何も入りません
>また==0 で何を判定しているのでしょうか?
>よろしくお願いいたします。
面倒だからいやだ、以上
776デフォルトの名無しさん:2009/01/05(月) 21:27:57
>>775
文字コード あるいは アスキーコード
でググってみ
777デフォルトの名無しさん:2009/01/05(月) 21:29:18
>>765
>>768
先程いろいろ弄っていたら何故かこのバグが起きなくなってしまいました。
再現することすらできなくなってしまいました。
昨晩からずっと悩まされていた問題だったのに何故なんでしょう・・・
でもメンバ数を増やしただけで全く関係ないような演算におかしな結果が出たのは確かなんですよ

何はともあれ解決したので良かったです。助言ありがとうございました。
778デフォルトの名無しさん:2009/01/05(月) 21:31:24
>>773
行頭の1文字目が改行かどうかも判断したら良いんじゃね

ちょっと疑問なのは、最終行じゃなくて途中に空行があったらどうするつもり?
779デフォルトの名無しさん:2009/01/05(月) 21:31:40
>>774
最終行が空と言うか、改行で終わってるだけだから、
それを判定すれば・・・
780デフォルトの名無しさん:2009/01/05(月) 21:32:15
>>776
ただのビットフラグの判定がどう関係するんだ?
781770:2009/01/05(月) 21:37:58
>>778
すみません TextVol はテキストファイルの大きさなので、
ただいまのカタチですと「行の先頭」との比較ができません。
途中の空白行がカウントされるのは問題ありません。

>>779
現在ですと
「abc□
 d□
 ef□
 g□

が4行

「abc□
 d□
 ef□
 g」

が3行とカウントされてしまうのでソコをなおしたいです。
782デフォルトの名無しさん:2009/01/05(月) 21:41:37
>>780
すまん、0x0040だけみて文字の判定かと思った。
783デフォルトの名無しさん:2009/01/05(月) 21:49:02
>>781
改行文字の次の文字が、次の行の先頭だよ
784769:2009/01/05(月) 21:50:51
すみません、お願いします・・・
785デフォルトの名無しさん:2009/01/05(月) 21:53:17
>>781
ファイルの終端に改行文字が何文字連続してるか数えれば、
最後に空白行が何行あるかわかる
786デフォルトの名無しさん:2009/01/05(月) 21:54:22
>>781
そのforを抜けた後にcount番目の文字が改行文字でなければ1行増やす。
787785:2009/01/05(月) 22:01:18
言葉足りなかった

改行文字の数+1で空白行も含めた行数が分かる。
そこから最後の空白行だけ引けばいい

んで最後に空白行が何行あるかは785
788デフォルトの名無しさん:2009/01/05(月) 22:01:24
お前ら、Cの演算子の優先順記憶してるの?
789デフォルトの名無しさん:2009/01/05(月) 22:04:34
>>784
まず2進数⇔10進数⇔16進数の変換ができるようになれ
そしたら「C言語 ビットシフト」でぐぐれ
790デフォルトの名無しさん:2009/01/05(月) 22:06:10
ビットシフトじゃなくてビットフラグ
791デフォルトの名無しさん:2009/01/05(月) 22:06:28
>>788
時々一覧を見るよ。
基本的には、括弧とかで確実にするよ。
792デフォルトの名無しさん:2009/01/05(月) 22:08:15
>>788
可読性を上げるためにも括弧をつかいます
793デフォルトの名無しさん:2009/01/05(月) 22:12:31
>>785
>>787

参考にしてもう少し考えて見ます。ありがとうございます

>>786
あ、これでいけそうですね?やってみます。
794デフォルトの名無しさん:2009/01/05(月) 22:33:48
年初にあたり優先順記憶しようと思ったけど、サンプル数0/3(自分含む)という事で
無理そうだから止めたっと。
795デフォルトの名無しさん:2009/01/05(月) 22:34:22
0x0001 & 0x1000 これの値は0 なのか、それとも0000000000000000 なのでしょうか?
また、同じく
0x1000 & 0x1000 の値は、0001000000000000なのか 1000000000000 どちらなのでしょうか?
796763:2009/01/05(月) 22:44:31
>>763,777ですが、結局また同じ問題が発生してしまいました。
今度は具体的に説明させてください。
今、ピンボールのプログラムをdirectX3Dを使って作っております。
下の構造体はある障害物の座標を表すもので、ヘッダに記述されているものです。
struct circle{
float x0;
float y0;
float x1;
float y1;
double angle;
float r;
float centx;
float centy;
}circle[]={
{-10,0,10,0,PI,0,0,0,0}
{0,0,0,0,0,0,0,0}
};
この中に新しくdouble qwerty(変数名は適当)を作ります。
そしてこの初期化部分でqwertyに0を代入します。
すると、「特定の壁の当たり判定が消えてボールがすり抜ける」という事態が起きてしまいます。
その壁の当たり判定というのはこの構造体とは全く関係のないものです。
次にdouble qwertyのdoubleをintに変えてみます。
すると、先程のバグは起きなくなります。

また、この上記の文をコピーして、構造体の名前を適当なものに変えます。
そして同様にdouble型のメンバを増やすと同じバグが発生してしまいます。プログラムで一切使われていない構造体なのにも関わらずです。

以上のことから考えると、構造体の大きさが原因で、「ある一定以上の大きさの構造体を宣言するとバグが発生する」ということになっているのではないかと思われます。
いったいこれはどういうことなのでしょうか?全く見当がつきません。
797デフォルトの名無しさん:2009/01/05(月) 22:44:47
>>795
君には早すぎるってのがわからんかな
ここで説明したところで理解できないよ
0と0000000000000000は同じ
0001000000000000と1000000000000も同じ
798デフォルトの名無しさん:2009/01/05(月) 22:45:51
どっちも同じじゃん。
普段 10 進数で 123 とか 372 とか言ってるけど、
それより上の桁は、実際には全て 0 で埋められているけど
単に省略して表現しているに過ぎない。
799デフォルトの名無しさん:2009/01/05(月) 22:53:22
>>796
無関係の配列やポインタを扱っている部分で
バグにより適切な領域を越えた所へと書き込んだり読み込んだりしている部分があり、
その領域がたまたま qwerty のあたりにあったんだろう。
そのあたりの値が常に 0 で初期化されている時のみ
たまたま変な事が起きているんだろう。

>「ある一定以上の大きさの構造体を宣言するとバグが発生する」
のではなく、
>「バグ持ちだが、qwerty がないとそれが目に見える形で現れない」
だけに過ぎない。
800デフォルトの名無しさん:2009/01/05(月) 22:58:09
>>796
circle[0]の初期化で、構造体の要素数をこえてしまってるけど、
初期化でミスってない?

つか、これってコンパイルできてるの?
801763:2009/01/05(月) 23:05:40
>>799
ということは、この構造体に問題があるのではなく、
「当たり判定が消えてしまう特定の壁」の方にあるということなのでしょうか。

>適切な領域を越えた所へと書き込んだり読み込んだりしている部分
適切な領域を越えたところを弄ってしまうというのは例えばどのような処理をしたときに起こるんですか?


>>800
宣言部分と初期化部分を分離して
struct circle circle[2]={
{-10,0,10,0,PI,0,0,0,0},
{0,0,0,0,0,0,0,0}
};
としても結果は同じでした。
>>796の記述でもコンパイルはできてます。
802デフォルトの名無しさん:2009/01/05(月) 23:05:48
>>796
だからオーバーフローしてんじゃねぇの?
それから、ヘッダでグローバル変数を宣言するのは勝手だが、externを使うような機構にしろ。
そんで何度も初期化されるような記述はやめろ。

DirectXとか以前に、C言語の基本だぞ。
803デフォルトの名無しさん:2009/01/05(月) 23:10:34
>>801
>ということは、この構造体に問題があるのではなく、
>「当たり判定が消えてしまう特定の壁」の方にあるということなのでしょうか。
その可能性もあるが、そうでない可能性もある。
バッファオーバーフローは全く予期しない所に影響を与えうるからな。

>適切な領域を越えたところを弄ってしまうというのは例えばどのような処理をしたときに起こるんですか?
int n[10];
if (n[100] == 0) {
 n[1000] = 9;
}
int a;
n[a] = 10;
804デフォルトの名無しさん:2009/01/05(月) 23:12:18
>>801
いや、言いたいのは
circleの要素はx0〜centyの8個でしょ
でも
circle[0]の初期化で9個の値を入れてるってこと
805デフォルトの名無しさん:2009/01/05(月) 23:13:58
適当に今サンプルコード書いただけなんじゃね?
普通要素多かったらコンパイル通らんだろ。
806デフォルトの名無しさん:2009/01/05(月) 23:15:32
バグとか以前の問題だな。
807デフォルトの名無しさん:2009/01/05(月) 23:16:56
>>805
>>796の書き方からして、コピペしたんじゃないかと思って。
808デフォルトの名無しさん:2009/01/05(月) 23:20:49
>>802
これが何度も初期化されるような記述だということがまずわかっていませんでした。
externでやってみます。


>>803
ありがとうございます。
ソースを確認してみます。


>>804
すいません、いろいろ弄っている途中だったのでコピペミスってしまいました
ちゃんと8個の値で初期化しても駄目でした。
809802:2009/01/05(月) 23:24:35
>>808
言い方がきつかったが、要は構造体を定義したヘッダファイル内でその変数も宣言・初期化するってことは、
そのヘッダファイルを読み込んだソースファイルの各々について宣言・初期化が行われるだろ?
ヘッダでそういう書き方をしてるってことは、そういうことが起こっているんじゃないかって思ったわけ。
断定的に書いちゃったけど、自分で確かめてみて。
810デフォルトの名無しさん:2009/01/05(月) 23:33:03
>>809
なるほど。確かめてみます。
助言ありがとうございました。
811763:2009/01/06(火) 00:24:28
原因が見つかりました。
宣言した配列の大きさ以上の領域を弄っていたようです。
そこを直したところ解決しました。
みなさんありがとうございました。助かりました。
812デフォルトの名無しさん:2009/01/06(火) 00:43:17
こちらで質問させて頂きます。
5年ほど、ACCESSのVBAでOracleやMySQLのDB操作を行い、
生産管理ツールなどを作成してきました。

そろそろ、C言語にも手を出してみようと思い、現在
C++Bilderか、VC++のどちらにしようか迷っています。
やりたいことは、ACCESSで言うフォーム上からDBのデータを表示したり、
進捗を入力したりしたいと思っています。
雑な質問で恐縮なのですが、C++Bilder2009とVC++では
どちらがとっつきやすいでしょうか?
813デフォルトの名無しさん:2009/01/06(火) 00:50:03
>>812
Bilderじゃね?
814813:2009/01/06(火) 00:50:55
>>813
Bilder?
Builderのことだな。
815812:2009/01/06(火) 00:59:41
すいません。Builderでしたね。。。
確かに、SQLServer使ってるわけでもないので、
VC++である必要もなさそうですね。
816デフォルトの名無しさん:2009/01/06(火) 01:16:10
「プログラマーは報酬さえ得ることが出来ればどんな事でもするって言うのか!」
817デフォルトの名無しさん:2009/01/06(火) 01:27:03
>>816
便所でも掃除する
818デフォルトの名無しさん:2009/01/06(火) 01:27:51
>>817
舌で
819デフォルトの名無しさん:2009/01/06(火) 01:30:23
>>818
報酬による
820デフォルトの名無しさん:2009/01/06(火) 06:00:40
>>819
http://ecx.images-amazon.com/images/I/5102gOf6cgL._SS500_.jpg
君の報酬はコレだ
働いてくれるな?
821デフォルトの名無しさん:2009/01/06(火) 06:08:19
>>820
実は表紙だけで、中身は普通のJIS X3010なんだろ?
822デフォルトの名無しさん:2009/01/06(火) 06:11:07
そっちのほうがよっぽどほしいわww
823デフォルトの名無しさん:2009/01/06(火) 06:33:57
>>821
それ、むしろ欲しいよ!
824デフォルトの名無しさん:2009/01/06(火) 11:16:19
なんでC言語なんて覚えてんだろ・・?
825デフォルトの名無しさん:2009/01/06(火) 12:45:28
2chブラウザ作りたいんですが、
他の2chブラウザって、書き込み処理とかは、ここのフォームを偽装して作ってるんですか?
826825:2009/01/06(火) 12:48:43
http://pc11.2ch.net/test/read.cgi/tech/1180406037/
ここに、

20 :デフォルトの名無しさん:2007/06/10(日) 21:26:21
まじめな話DATをダウンロードして表示して保管して
書き込みはbbs.cgiを呼んでやるだけでしょ大雑把に言って

って書いてましたが、そうなんですか?
827デフォルトの名無しさん:2009/01/06(火) 13:03:52
>>826
基本、そんな感じ。それにプラスするとしたら、画像表示、検索、あぼん、コテ管理、DAT管理、書き込み管理と言ったところか。
書き込みフォームは偽装するよりもオリジナルで作った方が使い易いと思われ。
あー、Cookieの管理とか板トップ表示なんかも必要か。
828デフォルトの名無しさん:2009/01/06(火) 13:06:43
>>825
こっちのほうが詳しいぞ。
http://pc11.2ch.net/test/read.cgi/tech/1224449899/
829デフォルトの名無しさん:2009/01/06(火) 13:23:18
暇でライブラリでも作ろうかと思ってるんで何かお題ください
830デフォルトの名無しさん:2009/01/06(火) 13:26:49
>>829
Cでスパイダーツール書くのに使えるヤツ
831デフォルトの名無しさん:2009/01/06(火) 13:28:54
スパイダーツールって何?
832デフォルトの名無しさん:2009/01/06(火) 13:33:25
833デフォルトの名無しさん:2009/01/06(火) 13:52:48
なるほど
あんまり興味ないけど作って見ます
834デフォルトの名無しさん:2009/01/06(火) 22:25:03
デバッグ作業でよく発見する間違いってどんなのでしょうか?
835デフォルトの名無しさん:2009/01/06(火) 22:34:20
>>834
コーディング段階で発見できない間違いの殆ど全て。
836デフォルトの名無しさん:2009/01/06(火) 22:42:28
どういうのが発見できないのでしょうか?
837デフォルトの名無しさん:2009/01/06(火) 22:43:50
というか全部発見しようとするのがデバッグってもんじゃないかww
838デフォルトの名無しさん:2009/01/06(火) 22:45:50
仕様の誤解釈、typo、不注意、思い込み、&c...
839デフォルトの名無しさん:2009/01/06(火) 23:06:11
デバッガのバグとかも
840デフォルトの名無しさん:2009/01/06(火) 23:57:59
>>834
配列とかポインタでアクセスしたらいけないところにアクセスしてるのが多い
841デフォルトの名無しさん:2009/01/07(水) 01:35:17
C++(gcc4.1.2使っています)で、
下記のJAVAのように、
メソッド内で同一クラス内のメソッドを利用するにはどうしたらよいのでしょうか。

public class Greeting
{
public void sayHello()
{
this.hello();
}

private void hello()
{
System.out.println("Hello");
}

}
842デフォルトの名無しさん:2009/01/07(水) 01:37:40
this->hello();}
843デフォルトの名無しさん:2009/01/07(水) 01:43:30
>>842
できました。ありがとうございます。
844デフォルトの名無しさん:2009/01/07(水) 10:19:30
質問です( VC++ 2008EE )
クラステンプレート使用時、staticなconstメンバ変数の定義でエラーになってしまいます。

<ヘッダー>
template <typename T>
class samp{
private:
T number;
static const double db;
public:
...
void disp() const { std::cout << "db = " << db << std::endl; }
};

<cpp>
template <typename T>
const double samp<T>::db = 1.35;

このクラスのオブジェクトを生成して disp() をコールすると
db の外部参照が未解決と出てしまいます。
どう修正すべきでしょうか?
845デフォルトの名無しさん:2009/01/07(水) 10:29:20
定義が無いもの、定義書けばいいだろ
846デフォルトの名無しさん:2009/01/07(水) 10:43:00
VS2008で問題出ないけどなあ、それ。
847844:2009/01/07(水) 11:00:00
>>845
<cpp>での定義の事でしょうか?
const double samp<int>::db = 1.35;
const double samp<char>::db = 1.35;
とかやれば通るんですがテンプレートの意味ないですよね・・・

>>846
マジですか?!
クラスの宣言と定義だけなら通るんですが、main にて
samp<int> smp;
smp.disp(); // ここでエラー
になってしまいます
848デフォルトの名無しさん:2009/01/07(水) 12:18:01
>>847
>とかやれば通るんですが
でも必要。
849デフォルトの名無しさん:2009/01/07(水) 12:22:43
const double samp<T>::db = 1.35;
で通るけどな、EEとProの違い?SP1だけど。
850デフォルトの名無しさん:2009/01/07(水) 12:29:42
スターチックなメンバ変数は外で定義する必要があるにょ
851849:2009/01/07(水) 12:43:05
>>847
一応書いとくけど、通ったというのは
samp<float> hage;
hage.disp();

samp<int> *hoge = new samp<int>();
hoge->disp();
delete hoge;

で実行してのことだからな。
852844:2009/01/07(水) 13:04:33
ああ・・・ 解決しました
template の場合、ヘッダで定義しないとまずい事を失念しておりました。
cppファイルでなく、ヘッダで
template <typename T>
const double Samp<T>::db = 1.35;
と定義する事で解決しました。 お騒がせいたしましたm(_ _)m
853デフォルトの名無しさん:2009/01/07(水) 13:49:31
そんなんじゃまた聞きにきそうだな
854デフォルトの名無しさん:2009/01/07(水) 14:05:13
じゃあ次の質問↓
855デフォルトの名無しさん:2009/01/07(水) 14:47:04
質問です。(C言語)

float *y,nb;

y = &nb;

printf("実数を入力\n");
scanf("%f",&y)

printf("%f",*y);

と書いたらセグメンテーション違反と言われてしまったのですが、恥ずかしながら何故そうなのか解りません。
ご教示お願いします。
856デフォルトの名無しさん:2009/01/07(水) 14:53:41
訂正。

float *y,nb;

y = &nb;

printf("実数を入力\n");
scanf("%f",&y);

printf("%f",*y);
857デフォルトの名無しさん:2009/01/07(水) 14:55:03
>>855
- scanf("%f",&y);
+ scanf("%f",y);
858デフォルトの名無しさん:2009/01/07(水) 14:57:58
>>855を訂正します。

×セグメンテーション違反と言われてしまったのですが〜

○入力した値が表示されないのですが〜

何度もすみません。。
859デフォルトの名無しさん:2009/01/07(水) 15:10:34
860855:2009/01/07(水) 15:24:22
>>857
>>859

解決しました!
ご教示ありがとうございました。
861デフォルトの名無しさん:2009/01/07(水) 17:03:47
ナニを勃てるまでもない↓画像
862デフォルトの名無しさん:2009/01/07(水) 18:44:34
863デフォルトの名無しさん:2009/01/07(水) 18:58:52
ロベール先生、いつもお世話になっております。
864デフォルトの名無しさん:2009/01/07(水) 19:22:50
それはどうも。
865デフォルトの名無しさん:2009/01/07(水) 19:48:13
「はてな」ってwikipediaのパクリなんだな
866デフォルトの名無しさん:2009/01/07(水) 19:51:17
#include <iostream>
using namespace std;
void rensyuu();
int main()
{
rensyuu();
return 0;
}

void rensyuu()
{
int tensuu[] = {
12,78,100,43,56,87,29,60,43,52,
51,67,89,03,50,68,99,94,81,10,
22,55
};
int i;
for(i = 0; i < 22; i++ );
{
cout<<"出席番号"<<i<<"は"<<tensuu[i]<<"点です"<<endl;
}
}
エラーとかは出ませんが
出席番号22は-858993460点です

と、なってしまいます・・・

自分が思うようになってくれません
どこが間違っているんでしょう・・・???
867デフォルトの名無しさん:2009/01/07(水) 19:51:49
ひとつのプロジェクトファイルに
複数のソースファイルがあります。
main.c
├sub.c
inter.c
└ter2.c

みたいにあったとして、これをコンパイルするとひとつの実行ファイルになります。

どういう風にコードを組めば、ひとつの実行ファイルとしてコンパイルされるのでしょうか?

簡単なCのソースファイルしか書いたことなく何百行や何個もあるファイルからなるプログラムを作ったことないので
よくわからないので、よろしくおねがいします。
868デフォルトの名無しさん:2009/01/07(水) 19:54:39
>>867
なんで一つの実行ファイルになってるのか理解できないってことか?
>>866
自分で数えるからいけない。
int i;
for(i = 0; i < 22; i++ );

for (int i = 0; i < sizeof(tensuu) / sizeof(* tensuu); ++i)
に変えてご覧。
870デフォルトの名無しさん:2009/01/07(水) 19:56:24
>>869
ありがとうございます!!
871デフォルトの名無しさん:2009/01/07(水) 20:12:13
>>868
はい、そうです。
普通は1つのファイルをコンパイルしたらひとつの実行ファイルですよね。
普通はっていうか、Cを学び始めたころ思うには。
2つ3つのファイルになってコンパイルすると1つの実行ファイルになりますよね。(そう設定したらとは思いますが)
これらのファイルはお互いに参照?してるから自動的に一つの実行ファイルになるのかな?
main関数を含むファイルを中心にしてひとつの実行ファイルを仕上げるのでしょうか?

872デフォルトの名無しさん:2009/01/07(水) 20:33:26
>871
一応、main.cで他のファイルを全て
#include "xxxx.c"
すれば動くことには動くよ。

ただ最終的には分割コンパイルに慣れるべきだな。
各ファイルに対応するヘッダファイルを書くことになる。
覚えることが多いので詳しくは分割コンパイルで調べてくれ。
873デフォルトの名無しさん:2009/01/07(水) 20:34:35
>>871
>これらのファイルはお互いに参照?してるから自動的に一つの実行ファイルになるのかな?

VisualC++みたいな統合環境だと、プロジェクトの設定や登録されたソースなどから
コンパイラやリンカへの指示を自動でしてくれる。
自分でするなら、必要なソースをコンパイルし、それらと適切なライブラリをリンカに渡して実行ファイルに纏め上げる。
874デフォルトの名無しさん:2009/01/07(水) 20:51:52
>>872
大きなというか複数にわたるソースをみたことありますが、
見たやつはincludeはしてなかった気がします。
includeでもmainプログラムにそのファイルを取り込むってことだけど
その場合はファイルを結合っていう感じではなく、一部分をmainを取り込むみたいな感じですよね


875デフォルトの名無しさん:2009/01/07(水) 21:24:50
extern と static ではまる
特に static マジでヤバイ
static にふたつの意味がある
全然関係ないのに同じ static で書くから
初心者は混乱しまくる超やばい
876デフォルトの名無しさん:2009/01/07(水) 21:26:37
>>874
include 無くてもリンクすればひとつになる
プロトタイプ宣言がありさえすればいい
877デフォルトの名無しさん:2009/01/07(水) 21:28:16
で、プロトタイプ宣言を全部の *.c ファイルに書くのが面倒だから
共通のはまとめて *.h に書いて include するようになったんだと
878デフォルトの名無しさん:2009/01/07(水) 21:29:14
何をプロトタイプ宣言すればよいのでしょうか?
互いに関連性のないソースでもひとつになるということかな
だったら1つにしてしまったら、どっちかは機能しないのでは
879デフォルトの名無しさん:2009/01/07(水) 21:32:14
hoge.c
--------
int hoge(int hoge){
return hoge;
}
--------

fuga.c
--------
int hoge(int);
int main(){
printf("%d", hoge(123));
}
--------

これで include なしでリンクすると
fuga.exe ひとつだけにできる
880デフォルトの名無しさん:2009/01/07(水) 21:38:40
>>878
>何をプロトタイプ宣言すればよいのでしょうか?
共通に使いたいもの

>互いに関連性のないソースでもひとつになるということかな
互いに関連性のないソースをひとつにする意味があるのか?
(強いて言えばライブラリ作るとそうなることがあるけどその場合でも無関係のはあまり混ぜない)

>だったら1つにしてしまったら、どっちかは機能しないのでは
両方のソースで static になってるとそれぞれがそれぞれのソース内でのみ機能する
881デフォルトの名無しさん:2009/01/07(水) 21:40:27
>>875
だからC++は無名名前空間を取り入れたんだな。
882デフォルトの名無しさん:2009/01/07(水) 21:45:19
>>875
ポインタよりやばい罠

ポインタで躓くなんて言ってる香具師はたいしたことない
883デフォルトの名無しさん:2009/01/07(水) 22:48:25
>>875
スコープの方は別の単語にして欲しいよなぁ。(externの対義語はinternか?)
なんでこうなんだろ。
884デフォルトの名無しさん:2009/01/07(水) 22:58:43
ローカルな静的変数にするという意味で共通してるっしょ。
885デフォルトの名無しさん:2009/01/07(水) 23:16:33
>>883
勉強不足なだけだ
あれは別にスコープのためにあるんじゃない
886デフォルトの名無しさん:2009/01/07(水) 23:57:39
「extern つけたもの」 と 「extern つけないもの」
だけで充分な気がするのですが
ここに「static つけたもの」が入ってくると訳がわかりません
スコープのため意外になにがあるんでしょう
887デフォルトの名無しさん:2009/01/08(木) 00:01:32
hoge.c
--------
int hoge=10;
--------

fuga.c
--------
extern int hoge;
--------

hage.c
--------
int hoge;
--------

hige.c
--------
static int hoge=20;
--------

main.c
--------
extern int hoge;
int main(){
printf("%d", hoge);
}
--------
888デフォルトの名無しさん:2009/01/08(木) 00:02:18
hoge.c
--------
int hoge=10;
--------

fuga.c
--------
extern int hoge;
--------

hage.c
--------
int hoge;
--------

main.c
--------
static int hoge=20;
extern int hoge;
int main(){
printf("%d", hoge);
}
--------
889デフォルトの名無しさん:2009/01/08(木) 00:06:11
>>886
普通は外部に公開するので
むしろ extern なんてものの方がいらんだろ。
実際関数では extern なんてものは使わない。
変数は、宣言と定義を区別できないので extern が必要になるが。
890デフォルトの名無しさん:2009/01/08(木) 00:08:43
static グローバル変数と static ローカル変数って同じようなものだろ?
関数外に書かれたらファイルスコープで、
ブロック内に書かれたらブロックスコープになるだけで。
891デフォルトの名無しさん:2009/01/08(木) 00:56:46
だからスコープのためにあるんじゃない
実体を静的に解決するためにstaticがある
結果的に外部から実行時参照が出来なくなるだけ
892デフォルトの名無しさん:2009/01/08(木) 03:09:56
getlineを利用したプログラムなんだけど、コンパイラ時にエラーが出る

(.text+0x9a):undefined reference to `_getline'
collect2: ld returned 1 exit status

上のような警告が出て通らない。環境はCygwinでgcc3.4.4
libc 4.6.27以降にgetlineが入ってるみたいなんだけど、その情報をどう利用していいのかわからん
インストールのパッケージにありそうだと思って探したけどそれらしき物が見つからず途方にくれてる
includeし忘れとかそういう初歩的なミスはしてないつもり。
助けてください><
893デフォルトの名無しさん:2009/01/08(木) 03:22:30
>>892
それだけの情報ではぼくもわかりません><
せめてソースを晒してください><
894デフォルトの名無しさん:2009/01/08(木) 07:00:14
一つのCのソースファイルにて<stdio.h>などをインクルードしますよね

#include<stdio.h>
main{
printf....
}
みたいに
実際これをコンパイルするとなると、ライブラリ?も関係してくるのでしょうか?
stdio.hにかかれているものをライブラリからとりこんでくる?

開発環境のソフトつかってると、ソースファイルやヘッダファイルとは別にライブラリファイルも用意されてて
コンパイルするみたいなのですが、このときのライブラリファイルがよくわかりません。
普通にソースファイル単体をgccなりでコンパイルするとこのライブラリってファイルがないので疑問におもいました
895デフォルトの名無しさん:2009/01/08(木) 07:44:58
標準関数は、特に指定しなくてもリンクされるようになっていることが多い。
有名な例外は、unix系の場合のmathライブラリ。
896デフォルトの名無しさん:2009/01/08(木) 08:06:22
>>892
-lナントカでライブラリを指定してちょうだいということ。
897デフォルトの名無しさん:2009/01/08(木) 09:36:26
RAII てなんて読んでる?
上司がずっと「レイ」って言ってて何の事だかわからんかった
俺は「ライィー」て読んでるけど・・・
898デフォルトの名無しさん:2009/01/08(木) 11:20:45
しょーもない質問で申し訳ありません
Visual studio 2008を使っていますが
構成プロパティにC/C++の項目がでません
どうしたら出ますか?
899デフォルトの名無しさん:2009/01/08(木) 11:38:19
C/C++のプロジェクトを作る
900デフォルトの名無しさん:2009/01/08(木) 11:56:24
>>897
あーるえーつー
901デフォルトの名無しさん:2009/01/08(木) 12:41:52
えーと、言葉が足りなかったようなので補足説明させていただきます

ファイル→新規作成→プロジェクト→Visual C++→
Win32 コンソールアプリケーション→次へ→
コンソールアプリケーションと空のオブジェクトにチェックを入れる

この状態でコード書いて構成プロパティ見ても
構成プロパティにC/C++の項目が出ないんです
どなたか出す方法よろしくお願いします
902デフォルトの名無しさん:2009/01/08(木) 12:49:09
>>901
プロジェクトに新規追加でcppファイル入れたら出るよ
903デフォルトの名無しさん:2009/01/08(木) 13:10:46
>>902
出ました。
ありがとうございました。
904892:2009/01/08(木) 13:28:17
$ gcc hoge.c -lc
/usr/lib/gcc/i686-pc-mingw32/3.4.4/../../../libc.a(d000681.o):(.text+0x0): multi
ple definition of `_atexit'
/usr/lib/gcc/i686-pc-mingw32/3.4.4/../../../../i686-pc-mingw32/lib/crt2.o:crt1.c
:(.text+0x2c0): first defined here
collect2: ld returned 1 exit status


getlineのエラーは出なくなったけど、今度はこんなエラーが出ちゃった
ソースを添付して聞く事は出来ればしたくないんだけど
ひょっとしてこういうエラーってソースが無いと原因をつきとめようがない?
コンパイラアセンブルは出来るけどリンクが出来ない状態だから、ライブラリの問題なのかなーと。
905デフォルトの名無しさん:2009/01/08(木) 14:28:31
ソース出せ
出せないときは出せない部分を削ってエラーだけが起こるソース出せ
削ってるうちにエラー消えるんなら出せない部分が原因
906デフォルトの名無しさん:2009/01/08(木) 14:30:36
g++ hoge.c
で治ったりする
907デフォルトの名無しさん:2009/01/08(木) 17:29:33
>>904
ふつうは -lc を指定する必要はないので、環境がなにか変なことになっている予感。
908デフォルトの名無しさん:2009/01/08(木) 20:27:36
char word[10][30];
という配列があり、現在配列には
word[0]:cabos
word[1]:banana
word[2]:apple
といった文字列が入ってるとします。
ここで、指定した番号の要素を消して配列を詰めるにはどうすればいいのでしょうか?
for文を駆使してみましたが、いまいち上手くいきません。(無くなった最後の要素には何を入れればいいのかわからない)

あと、この配列をアルファベット順に並び替える方法もしりたいです。
909デフォルトの名無しさん:2009/01/08(木) 20:33:39
>>無くなった最後の要素には何を入れればいいのかわからない

何もしなくていい。あるいは \0 を入れるとか自分で決めなさい。

>>あと、この配列をアルファベット順に並び替える方法もしりたいです。

ソートしなさい
910デフォルトの名無しさん:2009/01/08(木) 20:38:10
>>909
memmoveとか使うといいみたいですけど、
クラシックにやってみます
911デフォルトの名無しさん:2009/01/08(木) 20:58:01
n番目を削除するとして
for (i = n + 1; i < sizeof word / sizeof word[0]; ++i)
{
strcpy(word[i - 1], word[i]);
}
ソートはこれでいいだろとりあえず
qsort(word, sizeof word / sizeof word[0], sizeof word[0], (int(*)(const void *, const void *))strcmp);
912デフォルトの名無しさん:2009/01/08(木) 21:01:31
最後の要素(n=9)を削除すると、領域外をアクセスしちゃうよ(^o^ )
913デフォルトの名無しさん:2009/01/08(木) 21:34:26
static void print_ascending_list(char word[][WORD_SIZ_MAX + 1], int n)
{
int i,j;
char tmpword[1][WORD_SIZ_MAX + 1];
n--;
for(i=0; i<=n; i++){
strcpy(tmpword[0], word[i]);
for(j=i; j<=n; j++){
if(tmpword[0][0] > word[j][0]){
strcpy(tmpword[0], word[j]);
}
}
printf("%2d:%s\n", i+1, tmpword[0]);
}
}

ソートについて、こんなプログラムを作ったのですが、
これだと同じ単語を何度も出力しちゃうし、よくよく考えたら二文字以降の比較をしていないんですよね、、
どうにかできませんかね?
914デフォルトの名無しさん:2009/01/08(木) 21:37:31
strcmp
915デフォルトの名無しさん:2009/01/08(木) 22:06:45
0x1000 のアドレスが10000になるみたいなのですが、どうしてでしでしょうか?

0x10は10バイトという意味があるのでしょうか?

また、buf[10000]は、どのメモリアドレスまで格納できるという意味になりますか?
916デフォルトの名無しさん:2009/01/08(木) 22:08:29
意味不明
917デフォルトの名無しさん:2009/01/08(木) 22:13:16
0x1000や0x3EFFとかいったものは何を指すのでしょうか?
また、0x33や0x3F といったものも。
0x22FF | 0xFF01 など

これはメモリアドレスなのか、10進数になるのか、それとも両方になるのか

また、buf[10000]と確保したメモリアドレス?には、どれだけのメモリアドレス範囲が入るのでしょうか?
たとえば0x44000000〜0xFF0000000とか
918デフォルトの名無しさん:2009/01/08(木) 22:18:11
>0x って何?
16進数の接頭辞

> |
OR 演算子

>メモリアドレスなのか
ただの数値。
ポインタ型にキャストすればアドレスと解釈できはするが。

>buf[10000] と〜
buf の要素の型のサイズ×10000
919デフォルトの名無しさん:2009/01/08(木) 22:22:38
>>917
0x は16進数であることを明示するプレフィックス。
よって、0x1000 とか 0x3EFF はただの数字。

| は論理和をとる演算子。
0x22FF | 0xFF01 == 0xFFFF

buf[10000] と確保したものが、実際に確保されるアドレスは基本的に実行時に決まる。
範囲としては buf の型のサイズ * 10000
920デフォルトの名無しさん:2009/01/08(木) 22:28:01
>>919
ありがとうございます。よくわからないのですが
アドレスとして0x1000 を指定したら10000らしいのですが、これはなんのことでしょうか?
また、0xはメモリのアドレスにはならないのでしょうか?
921デフォルトの名無しさん:2009/01/08(木) 22:28:43
>>920
>アドレスとして0x1000 を指定したら10000らしいのですが、これはなんのことでしょうか?
どこでそんな話を聞いたんだ?
922デフォルトの名無しさん:2009/01/08(木) 22:31:49
配列の中身ってオチじゃ?
923デフォルトの名無しさん:2009/01/08(木) 22:32:44
16ビット環境のセグメントレジスタの話なら分かるが・・・。
924デフォルトの名無しさん:2009/01/08(木) 23:13:34
>>923
セグメントレジスタならどうやってありえる?
925デフォルトの名無しさん:2009/01/08(木) 23:13:57
でもメモリアドレスって0xからはじまってますよね
あれはなんででしょうか?
926デフォルトの名無しさん:2009/01/08(木) 23:15:29
>>924
10000が0x10000の間違いだというのなら、ね。
927デフォルトの名無しさん:2009/01/08(木) 23:18:06
>920
0x1000のアドレスにあるのがたまたま10000だっただけ。
理由なんて誰にも判らん。

0xのついた16進数だろうが普通の10進数だろうがアドレスになりうる。
だが直値でアドレスを指定する意味は
メモリの解析を行いたい時を除いてほとんど無い。
928デフォルトの名無しさん:2009/01/08(木) 23:51:53
>>927
直値?直値で指定する方法とは?
でもあらかじめ決められた領域にデータを書き込む場合は値をいれますよね?
その時に、0x....といれるような

メモリマップ?とかみると0x00000〜0x100000の領域は○○をとか
0x200000〜020001000 とかには○○のプログラムに使う領域の計算値をとか

こういう場合はメモリ範囲指定しますよね
このような場合は、どうやって指定するのでしょうか?
929デフォルトの名無しさん:2009/01/08(木) 23:53:34
930デフォルトの名無しさん:2009/01/08(木) 23:54:38
>>928
なにやらすっとこどっこいな勘違いをしている気がするので具体例を出しなさい。
通常、C/C++でメモリアドレスを指定するようなプログラミングは行なわないからね。
931デフォルトの名無しさん:2009/01/08(木) 23:55:40
>>930
組み込み・ファームではやるだろ・・・常考。
932デフォルトの名無しさん:2009/01/08(木) 23:58:19
それ、通常じゃない。
933デフォルトの名無しさん:2009/01/09(金) 00:02:13
デバッガとかICEとかの使い方を教えてほしいんじゃないの?
934デフォルトの名無しさん:2009/01/09(金) 00:02:29
今の C の業務での組み込み率がどれだけ高いか。
935デフォルトの名無しさん:2009/01/09(金) 00:03:25
組み込みです。
936デフォルトの名無しさん:2009/01/09(金) 00:06:41
組み込みだとその場しのぎのコード書いてたら、そのうち頭ぶっ飛ぶよ。
937デフォルトの名無しさん:2009/01/09(金) 00:12:20
どういう風に書けばよいのでしょうか?
アドレス指定がよくわかりません
0xつけて指定するのですよね
10000の範囲を指定するにはどうすればよいのかな
938デフォルトの名無しさん:2009/01/09(金) 00:14:10
メモリの内容を確認してる時点で何もわかってないって事がバレてるってこと。
939デフォルトの名無しさん:2009/01/09(金) 00:14:18
10000って何だよ・・・。
10進数なのか16進数なのかはっきりしてくれ。
940デフォルトの名無しさん:2009/01/09(金) 00:16:44
そういう機器固有の話を聞ける人間は周りにいないのか?
941デフォルトの名無しさん:2009/01/09(金) 00:17:05
>>937
>930
942デフォルトの名無しさん:2009/01/09(金) 00:17:27
943デフォルトの名無しさん:2009/01/09(金) 00:19:38
なんにしてもソースも出せない、用語の使い分けもさっぱりじゃ
エスパーじゃないかぎり無理
944デフォルトの名無しさん:2009/01/09(金) 00:20:32
機器固有の話を聞ける人間がいないっていうより、マニュアルも読まない(理解できない)?
945デフォルトの名無しさん:2009/01/09(金) 00:21:35
マニュアルの前にアセンブラとポインタの本を読んでくれ。
あと16進について勉強汁。
946デフォルトの名無しさん:2009/01/09(金) 00:22:04
>>942
>932
947デフォルトの名無しさん:2009/01/09(金) 00:22:55
file_nameという文字列に入っているファイル名をls の引数にしてOSで実行したい場合どうすればいいですか?
system("ls -l file"); このfileの部分を変数で実行するイメージなんですが。
948デフォルトの名無しさん:2009/01/09(金) 00:24:37
949デフォルトの名無しさん:2009/01/09(金) 00:25:25
>>947
sprintf の後 system。
まあ、system よりはもっと安全な
OS 依存の関数を使った方が良いと思うが。
system は危険。
950デフォルトの名無しさん:2009/01/09(金) 00:25:44
>>947
sprintfでsystemの引数にする文字列を作るんだ。
951デフォルトの名無しさん:2009/01/09(金) 00:26:06
>>947
sprintf()その他で文字列を組み立てれば宜しい。
例えばこんな感じ。
void func(const char * fileName)
{
char buf[1000];
sprintf(buf, "ls -l %.990s", fileName);
system(buf);
}
952デフォルトの名無しさん:2009/01/09(金) 00:29:31
>>947
"; rm -rf /"
みたいな入力がこないように十分気をつけて。
953デフォルトの名無しさん:2009/01/09(金) 00:31:11
おー。
それじゃ、"ls -l '%s'"にしとく方が無難か。
954デフォルトの名無しさん:2009/01/09(金) 00:35:32
>>949-951
ありがとうございます。それでやってみます。
>>952
確かにそんなヤバいことも出来てしまいますね・・・注意します。
955デフォルトの名無しさん:2009/01/09(金) 00:42:50
>>953
まだまだ青いぜ
".'; rm -rf /;echo 'bang!"
956デフォルトの名無しさん:2009/01/09(金) 01:04:00
質問なのですがC言語で簡単に作れるゲームにはどんなものがありますか?
例えばドット避けやタイピングゲームなど
957デフォルトの名無しさん:2009/01/09(金) 01:07:00
じゃんけん
958デフォルトの名無しさん:2009/01/09(金) 02:13:00
数当てゲーム

C言語に限らず、ユーザ入力の可能な言語なら簡単かと
959デフォルトの名無しさん:2009/01/09(金) 02:51:37
100マス計算をするプログラムを書いてください。
プログラムがランダムに出題し、人間が100個の
マスに回答を入力し、確認ボタンを押すと
全問正解なら回答にかかった時間を表示して終了。
間違った場合は間違った場所にカーソルが止まり、
別の値が入力されるまで待ちます。
横10個、縦10個の数字は各々11〜99までの乱数、
演算は +,-,x のみでよいです。
よろしくおねがいします。
960デフォルトの名無しさん:2009/01/09(金) 02:53:43
丸投げする気なら宿題スレ行け。
961デフォルトの名無しさん:2009/01/09(金) 03:06:13
描画の実装について質問です。

各クラスごとに描画関数を持たせると仕様変更したときに対応が大変なのですが、
分離するアイディアが出てきません。
おとなしく全部書き換えたほうがいいのでしょうか?


class Object
{
protected:
int x, y;
int width, height;
public:
void Draw()=0;
};

class Character : public Object
{
public:
void Draw()
{
// 描画処理
// これだと仕様変更があった場合に対応するのが大変なのですが、今一いいアイディアが出てきません。
}
};
962デフォルトの名無しさん:2009/01/09(金) 03:51:35
>>958
なるほど、では数当てゲームでも作ろうかな。
じゃあ0から100の間で数を10回以内で当てる条件で作ろうと思うんだが
ヒントってどういうのがある?
〜以上〜以下です、とか偶数奇数の区別、素数など以外で
963デフォルトの名無しさん:2009/01/09(金) 03:54:40
>>869
ほれた。
直接の原因に言及することなく、かつ今後トラブルが起こらないための
手法を伝える、すばらしいテクニックだと思った。
i++を++iに変えたのはただの趣味だろうからそこはいただけないけど、
これも直接の原因から目をそらすためのものだったのかな。
複数行に渡っていればきっとコピペするだろうと予想したのだろうか、とか
妄想がとまらん。
964デフォルトの名無しさん:2009/01/09(金) 03:59:51
>>963
STLのiteratorを使いこなせるようになれば、i++と++iの違いがわかり、
++iを使うようになる。
965デフォルトの名無しさん:2009/01/09(金) 04:01:11
intならどっちでも構わないが。
966デフォルトの名無しさん:2009/01/09(金) 04:02:53
そうでもない
967デフォルトの名無しさん:2009/01/09(金) 04:10:24
>>964
iteratorつかうとインクリメントのみの文においてi++と++iに差が出るんだ?
968デフォルトの名無しさん:2009/01/09(金) 04:43:08
>>967
operator ++関数の戻り値は、前置++なら*thisへの参照を返せば済むが、
後置++だと、インクリメント前の値の複製を返さなければならない。
戻り値を使っていないことが明らかでも、可能ならこのインスタンスの複製を作る処理を
消し去れるほど高度な最適化のできるコンパイラが無いため。
969デフォルトの名無しさん:2009/01/09(金) 05:01:22
>962
とりあえずは
「入力→もっと(大きい/小さい)です」の繰り返しから作ってみては
後でいくらでも拡張していけば良い
970デフォルトの名無しさん:2009/01/09(金) 06:44:19
0x0B00〜1AFF の取る範囲が0x1000になるのは何故なのでしょうか?
971デフォルトの名無しさん:2009/01/09(金) 07:01:16
>>961
さすがにそれだけの情報でうまい分離方法考えろとか言われても無理
972デフォルトの名無しさん:2009/01/09(金) 07:17:49
>>970
0〜9の取る範囲は10通り
0〜99の取る範囲は100通り
100〜199の取る範囲は100通り
m〜nの取る範囲は(n - m) + 1通り
973961:2009/01/09(金) 11:21:36
>>971
すみません。構成は以下のようになっています。

enum MapInfo { MapInfo_Map1, ..., MapInfo_MapNum };
enum Map1CharInfo { Map1CharInfo_Character, ..., Map1CharInfo_CharNum };
class Map {
public:
void Draw()=0;
};
class Map1 : public Map {
private:
Object* obj[Map1CharInfo_CharNum];
public:
Map1() {
// マップ上の全オブジェクトの作成
}
void Draw() {
// マップ上の全オブジェクトの描画
obj->Draw();
}
};
class Master {
private:
MapInfo scene;
Map* map;
public:
void Draw() {
map->Draw();
}
};
974デフォルトの名無しさん:2009/01/09(金) 11:26:06
純粋仮想にせず、継承元に共通描画ルーチンを入れておけばいいんじゃないの?
構成があったところで具体性がないから勝手にしろとしか言えない。
975デフォルトの名無しさん:2009/01/09(金) 11:51:19
>>98
アホな方法すすめんな馬鹿
976デフォルトの名無しさん:2009/01/09(金) 14:22:48
グローバル。・・・きたあああああああああああああ
977デフォルトの名無しさん:2009/01/09(金) 14:43:38
アホな方法、すすめんな、馬鹿、・・・きたあああああああああああああ
978デフォルトの名無しさん:2009/01/09(金) 14:50:25
>>968
なるほど理解しました。
979デフォルトの名無しさん:2009/01/09(金) 15:03:44
女性に忌み嫌われる人生を送ってきたモテない浪人生。

ある日、大好きなSM系のDVDを抱えて帰路についていた彼は、美しい女性とぶつかってしまう。

なんとその女は、力が足りなくて天界に帰れなくなっていた天使だった。

主人公は、力を得るための性行為を提案、渋る彼女を口先で丸め込み承諾させる。

こうして、清らかな天使さまを自分だけの性奴隷にするために、犯し続ける日々が始まるのだった。
980デフォルトの名無しさん:2009/01/09(金) 15:11:02
スレチになるけど、C#だと前置でもオブジェクトを作らなければならないという点でコストが高そうっすね。
http://d.hatena.ne.jp/mickey24/20081031/1225398396
いずれにしても後置の方がよりコストが高くならざるを得ないのは処理を考えれば当然のことでした。
もっと精進します。
981デフォルトの名無しさん:2009/01/09(金) 15:34:27
C#は触ったことさえないけど、
> 3. 演算子から返される値を x の評価によって得られる場所に格納します。
これがC++でいうところのリファレンスなら新しいオブジェクトを作っていないんじゃないかな。
982デフォルトの名無しさん:2009/01/09(金) 15:50:52
>>980
C#は呼び出し側で退避するので、戻り値を使っていない場合は最適化できるんじゃないか?
983デフォルトの名無しさん:2009/01/09(金) 15:59:32
ダメな例を見てもらえれば分かるんだけど、
オーバーライド処理内で毎回オブジェクトを作らないとダメっぽくないですか?
C++で後置演算子をオーバーライドする時はそんなのしなくて良いらしいのに。(というのが元々の話です)
984デフォルトの名無しさん:2009/01/09(金) 16:00:20
あああ前置のまちがいです
985デフォルトの名無しさん:2009/01/09(金) 16:43:44
あぁ、なるほど。MS得意の「余計なことして複雑にする」だね。w
986デフォルトの名無しさん:2009/01/09(金) 16:45:07
余計な 物など 無いよねぇ〜♪
987892:2009/01/09(金) 17:10:20
ccでコンパイラしたら普通にいけました(理由はよくわかってないんですが)
質問に答えてくれた方ありがとうございました
Cygwinってgccとcc同じようなもんだと思ってた…
988デフォルトの名無しさん:2009/01/09(金) 19:10:19
で、お前らRAIIてなんて読んでる?
989デフォルトの名無しさん:2009/01/09(金) 19:26:19
あーるえーあいあい
990デフォルトの名無しさん:2009/01/09(金) 19:37:03
らいい
991デフォルトの名無しさん:2009/01/09(金) 21:05:14
ラ・ツーだろjk 新手のモビルスーツみたいでイイ
992デフォルトの名無しさん:2009/01/09(金) 22:25:09
らき・すた
993デフォルトの名無しさん:2009/01/10(土) 05:58:48
>>987
--
$ la /usr/bin/{g,}cc
lrwxrwxrwx 1 Yew Users 7 Jun 10 2007 /usr/bin/cc -> gcc.exe
-rwxr-x---+ 1 Yew Users 94741 Dec 18 2006 /usr/bin/gcc
--
どう見ても、中身は同じです。
# 内部でargv[0]見て動作変えてるかどうかはしらね。
994デフォルトの名無しさん:2009/01/10(土) 12:37:52
># 内部でargv[0]見て動作変えてるかどうかはしらね。
一番重要な部分が分からんなら書くなと
995デフォルトの名無しさん:2009/01/10(土) 12:38:42
だからそのキモイ、ナンバーサイン野郎は放置しろってw
996デフォルトの名無しさん:2009/01/10(土) 12:58:33
>>995
ナンバーサインってなんですか?
ところで最近宿題スレに書かなくなったんですね。さびしいです。
997デフォルトの名無しさん:2009/01/10(土) 13:10:37
釣りとかどうでもいいが
# がナンバーサインだ。
998デフォルトの名無しさん:2009/01/10(土) 13:10:52
999デフォルトの名無しさん:2009/01/10(土) 13:13:21
#がナンバーサインなんだが?宿題スレにも書き込んでいるが、
誰と勘違いしているんだろうね、こいつは?w >>996
1000デフォルトの名無しさん:2009/01/10(土) 13:14:48
ググればすぐ分かるものを、検索もしない知ったかってのは迷惑だよな。
質問に答える資格もない。
ttp://ja.wikipedia.org/wiki/%E7%95%AA%E5%8F%B7%E8%A8%98%E5%8F%B7
シャープとも区別されているので、あしからず。ただ、便宜上代用されているケースはあるが。
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。