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


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

C言語なら俺に聞け(入門篇) Part 10



1 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 16:45:25 ]
C言語の入門者向け解説スレです。
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
C言語なら俺に聞け(入門篇) Part 9
pc11.2ch.net/test/read.cgi/tech/1173284217/

過去スレ
Part 1 pc8.2ch.net/test/read.cgi/tech/1146700389/
Part 2 pc8.2ch.net/test/read.cgi/tech/1153818463/
Part 3 pc8.2ch.net/test/read.cgi/tech/1160682950/
Part 4 pc8.2ch.net/test/read.cgi/tech/1162999861/
Part 5 pc8.2ch.net/test/read.cgi/tech/1165022193/
Part 6 pc10.2ch.net/test/read.cgi/tech/1167325490/
Part 7 pc10.2ch.net/test/read.cgi/tech/1170064980/
Part 8 pc11.2ch.net/test/read.cgi/tech/1171946674/

関連スレ
C/C++の宿題を片付けます 84代目
pc11.2ch.net/test/read.cgi/tech/1172981618/
くだすれC言語(初心者用) Part.2
pc11.2ch.net/test/read.cgi/tech/1172099763/
【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 131
pc11.2ch.net/test/read.cgi/tech/1170338926/
【初心者歓迎】C/C++室 Ver.35【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1171888583/

【C 関数検索 man on WWW】 www.linux.or.jp/JM/index.html

52 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 23:14:00 ]
C99以前の規格で質問です
変数の宣言はブロックの最初でなければならないとのことですが、

void hoge(void) {
int i;

//なんだかの処理

for(i = 0; i < 10; i++) {
int value;//←ここで変数宣言
//なんだかの処理
}
}

上記のvalueの変数宣言はOKでしょうか?

関数の最初に変数が宣言できることは覚えているのですが、ブロックの中でもfor文などの中の先頭で宣言できるのか忘れて島しました
手元にあるコンパイラだと、独自拡張されているのか、処理中の変数宣言もOKになってしまいます。
よろしくお願いいたします。


53 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 23:16:01 ]
ブロック先頭での変数宣言はOKです

54 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 23:24:28 ]
for文の{}もブロックっていうんじゃないのか?

55 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 23:26:01 ]
途中に { } 入れて宣言してたこともあったなあ

56 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 23:30:46 ]
まだ初心者だった頃caseの後でなぜ宣言できないのが不思議だった。

57 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 23:59:41 ]
特定のcaseだけでしか使わないローカル変数を定義したくて
case xxx: {
}
なんてすることもあるかもしれない。

とりあえず52はブロックという言葉の意味を正しく知るべき。


58 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 07:53:00 ]
レガシーCでは通るがC++では通らない(かも知れない)コード。
switch (0) {
int i;
case 0:
printf("foo\n");
case 1:
for (i = 0; i < 10; ++i) {
printf("%d\n", i);
}
}

59 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 16:56:55 ]
/************************************************************************/
/*                        ぬるぽ                       */
/************************************************************************/

↑こういうコメントをVisualStudio2003を使って楽に入力する方法ってありませんか?
/*********************************************************************/
って部分はIMEに登録(60文字超えるんで前半部分と後半部分に分けて)したりしてるんですが、
二行目の/*の自動挿入とか文字列の中央ぞろえとか終端の*/の入力の仕方がわかりません

60 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 17:05:14 ]
文字列の中央揃えや終端の*/の位置調節などといった
無駄なことはやめた方がいい



61 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 17:10:23 ]
確かに
考えるだけ時間の無駄

62 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 17:20:56 ]
エディタをvimを使うようにしてmapで登録すればいいIDEのエディタは総じてくそ

63 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 17:22:12 ]
Sakura等のマクロ使えば一発なのに・・・

64 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 17:25:16 ]
IDEのエディタは総じてくそ

65 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 17:32:22 ]
vimのcindentのオプション使ってると、勝手にコメントの * を揃えてくれるから

 /*****************************
.  * コメント
.  *****************************/
. ↑ここを揃えてくれる

こんな書き方してるけど、これって一般的な書き方なのかな?
コメントの書き方で定番みたいなものはあるんかな…

66 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 17:32:45 ]
>>59
GreatCode でディレクトリ内のソースコードを一括変換すると楽
表記の揺らぎもなくなるし

67 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 18:04:04 ]
>>65
次のようなコメントを見かける。
#等幅に見せるために2バイト文字に変換済み。
/*******/
/*□ぷげら□*/
/*□もげら□*/
/*******/
/*******
□*□ぷげら□*
□*□もげら□*
□*******/
/*******\
*□□ぷげら□□*
*□□もげら□□*
\*******/
/*******
□*□ぷげら
□*□もげら
□*******/
/*******
□*□ぷげら
□*□もげら
□*******
□*/
/*
□*******
□*□ぷげら
□*□もげら
□*******
□*/

68 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 18:33:45 ]
先ほどCを始めたのですが,いきなり行き詰ってしまいました.
逆斜線ってどうやるのでしょうか?
\で代用すればいいのでしょうか?
お願いします

69 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 18:36:03 ]
いいです。半角でな

70 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 18:37:52 ]
>>69
ありがとうございます!!



71 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 18:57:17 ]
>>65
定番のコメント記法をただ探すんじゃなくて、
定番のドキュメント生成ツールを探して
それが要求するコメント記述方式に従うのがいいと思う。

勝手に*を揃えてくれるのだって、
ドキュメント生成ツールを意識した動作だろうし。

72 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 20:20:22 ]
>>65
そういうコメントは、ファイルの先頭で使うくらいだな。
いっぱい使ってると、かなり素人くさい。

73 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 21:38:30 ]
玄人好みのコメントplz

74 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 21:40:54 ]
/* You are not expected to understand this */


75 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 21:44:06 ]
コメントに罫線やら装飾の多いヤツは素人。

76 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 21:45:05 ]
>>74
訳するとこんな感じ?
/* あなたがこれを理解できるなんて期待してないです */
/* これ見ても分からないっしょ? */
/* 分かるかな〜? 分かんね〜だろ〜な〜 */

77 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 21:56:24 ]
VC++ って VBA マクロ使えなかったっけ?

78 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 22:04:57 ]
*/の位置を気にして半角スペースを駆使するような奴は負け
端的に言えば>>59なわけだが

79 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 22:08:29 ]
40カラム〜80カラムは問答無用でコメント、という規約のプロジェクトがあった。

80 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 23:25:36 ]
カラムなんて言葉を聞くと
FORTRAN を思い出して嫌になる



81 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 23:58:35 ]
>>79
某大手が未だにそんな規約を持っている。
極悪なのは、関数内の最初のインデントと二段目のインデントの量が違うと言う……

82 名前:デフォルトの名無しさん mailto:sage [2007/03/23(金) 00:16:15 ]
つ c-set-offset

83 名前:デフォルトの名無しさん mailto:sage [2007/03/23(金) 01:23:11 ]
/*******************************
* 俺はよくこれを目にするんだが
* たぶんずれるからポップうp 
*    >>83
*/

84 名前:デフォルトの名無しさん mailto:sage [2007/03/23(金) 01:27:09 ]
>>83
&nbsp; を使え。

85 名前:デフォルトの名無しさん mailto:sage [2007/03/23(金) 13:01:51 ]
俺も>83形式だなー
但し一行目の * の数は5個固定で、その右にコメントの頭を入れるんだが。

86 名前:65 mailto:sage [2007/03/23(金) 20:15:44 ]
コメントにも色々あるんもんですね

>定番のドキュメント生成ツール
これってDoxygenみたいなやつですか?

87 名前:デフォルトの名無しさん mailto:sage [2007/03/23(金) 20:32:55 ]
doxygenは /** で始まり */ で終わるコメントにも対応しているな。
俺は大抵/*! 〜 */を使うが。

88 名前:デフォルトの名無しさん mailto:sage [2007/03/23(金) 20:41:15 ]
javadoc形式に対応してるんだっけか

89 名前:デフォルトの名無しさん mailto:sage [2007/03/24(土) 00:38:26 ]
どうして構造体はmain外のグローバルなところに書くのが多いのでしょうか

90 名前:デフォルトの名無しさん mailto:sage [2007/03/24(土) 00:39:14 ]
main の外で使うから



91 名前:・∀・)っ-○◎● mailto:sage [2007/03/24(土) 00:40:34 ]
関数内で定義したら関数内でしか使えないから

92 名前:デフォルトの名無しさん mailto:sage [2007/03/24(土) 01:35:21 ]
doxygenは///や//!にも対応しているからC99なら///で書ける。

93 名前:デフォルトの名無しさん mailto:sage [2007/03/24(土) 12:08:14 ]
xmlコメントにも対応してるんでしょうか?>doxygen

94 名前:デフォルトの名無しさん mailto:sage [2007/03/24(土) 13:17:26 ]
//コメントを/*コメントに変換するツールないかなぁ。
// printf("///");
// return 0; /* ぬるぽ */
こんな行のこと考えると結構面倒だ。

95 名前:・∀・)っ-○◎● mailto:sage [2007/03/24(土) 13:30:53 ]
つPerl

96 名前:デフォルトの名無しさん mailto:sage [2007/03/24(土) 13:35:01 ]
>>95
Perlで書いても面倒だと思うんだけど。

そもそも今時規格に乗っ取ってないという理由で//コメントを禁止する某芝の某氏が阿呆だと思うのだが。
つーか、人には禁止しておいて自分では使ってるしおまけにprintf()で"%lf"なんか使うし……

97 名前:・∀・)っ-○◎● mailto:sage [2007/03/24(土) 13:37:51 ]
そこでJIS-X 3010:2003ですよ

98 名前:デフォルトの名無しさん mailto:sage [2007/03/24(土) 13:39:17 ]
エディッタなりIDEなりの機能使ってマクロ組めばいいよ
エンター押した瞬間にその行の文字列評価して置き換えるようにすりゃ手軽

99 名前:・∀・)っ-○◎● mailto:sage [2007/03/24(土) 13:41:26 ]
他人の書いたコードの整形を自分好みに直すためだけにxyzzy使ってる

100 名前:デフォルトの名無しさん mailto:sage [2007/03/24(土) 13:48:54 ]
取り敢えず、//→/*と$→*/を変換して>94に挙げたような怪しげな行をリポートするスクリプトをawkで作った。
リポート行を(コンパイラのエラーと同じように)xyzzyで取り込んでタグジャンプすれば後は手作業で何とか、かな。

>>97
kwsk

>>98
30ファイル30000行もあるとやってられない。

>>99
私も普段使っているのがWin2kなのでWinSCPのエディタをxyzzycliにしてLinuxのファイルも整形して読んでる。
#編集はvimですることが多いけど。



101 名前:デフォルトの名無しさん mailto:sage [2007/03/24(土) 13:52:50 ]
//コメント禁止って酷いよね・・・

102 名前:デフォルトの名無しさん mailto:sage [2007/03/24(土) 14:01:15 ]
/* */ 使われてるから、全体的に広くコメントアウトしたい場合、#if 0 〜 #endif を使うが
そんな環境に限って VC6.0 だったりするから色が変わってくれない

103 名前:デフォルトの名無しさん mailto:sage [2007/03/24(土) 14:11:53 ]
そういうスクリプトや小物ツールを自前でサッと組めるようになりたい・・・

104 名前:デフォルトの名無しさん mailto:sage [2007/03/24(土) 15:04:29 ]
>>103
生の//を変換するだけで、/* // */ とか "//" を考慮しなくていいならawkでこれだけ。
一応、/* *//* */は大丈夫。
awk '/[^*]\/\// || /^\/\// {sub("// *", "/* "); sub(" *$", " */");} {print;}'
実際には他にも、3個以上の/の連続ををどうするとか、//で終わる行をどうするとか、
行頭//が複数行続いたらどうするとか、考え始めると切りがない罠。

105 名前:デフォルトの名無しさん mailto:sage [2007/03/24(土) 15:26:10 ]
/**********************************/
はまだいいとして、
右側をそろえて */ するのって意味あるんかいな?
本当に重要な内容を書きにくくするだけなんだが。
100歩譲っても
 /**********************************
  * ほげほげ
  **********************************/
あるいは
 ///////////////////////////////////
 // ほげほげ
 ///////////////////////////////////
って社内で言ったら「右をそろえたほうが見やすい」といわれた。

106 名前:デフォルトの名無しさん mailto:sage [2007/03/24(土) 15:29:47 ]
社内にはプロポーショナルフォントで組んでる変態とかいるから、
行頭のインデント以外は桁をそろえるようなことはしないなあ。

107 名前:デフォルトの名無しさん mailto:sage [2007/03/24(土) 15:41:32 ]
右端を揃える奴はキモイ
どれぐらいキモイかっていうと
GNUのコーディング規約の中括弧の1000分の1くらい

108 名前:デフォルトの名無しさん mailto:sage [2007/03/24(土) 15:47:44 ]
入門編にいる僕にはわかりません><

109 名前:デフォルトの名無しさん mailto:sage [2007/03/24(土) 16:04:10 ]
最近のエディタならコメント部分の色が変わるのが普通なんだからわざわざ
/**********************************
* ほげほげ
**********************************/
とかやってコメントを目立たせる必要はないんじゃまいか。
/*
* ほげほげ
*/
で充分ですよ。解ってくださいよ。

110 名前:デフォルトの名無しさん mailto:sage [2007/03/24(土) 16:06:19 ]
>>105
漏れのところでは、「右側を揃えたいなら揃えてもいいから、間違ったコメントを書くな」という方針にした。
で、実際に不適切なコメントをリリース版に残した香具師には右側揃え禁止措置を取った。
……そして誰も右側を揃えなく(揃えられなく)なった。




111 名前:・∀・)っ-○◎● mailto:sage [2007/03/24(土) 16:17:29 ]
>>100
ISO C 1999のJIS版

//コメントは仕様に入ってるし%lfも全力でおk

112 名前:デフォルトの名無しさん mailto:sage [2007/03/24(土) 22:36:53 ]
>>109
色がついてなくても、下ので十分だよ。
行頭になんか印がついてれば、すぐわかるだろ。

113 名前:デフォルトの名無しさん mailto:sage [2007/03/24(土) 22:38:19 ]
/*
  これでもいいかゐ?
*/

114 名前:デフォルトの名無しさん mailto:sage [2007/03/24(土) 22:40:30 ]
それで十分

115 名前:デフォルトの名無しさん mailto:sage [2007/03/24(土) 22:42:56 ]
>>113
それはだめ。

116 名前:デフォルトの名無しさん mailto:sage [2007/03/24(土) 22:45:32 ]
なんで?(^ω^;)

117 名前:デフォルトの名無しさん mailto:sage [2007/03/24(土) 22:49:15 ]
/*
* じゃあこれからコメントの標準はこれで。
*/

118 名前:デフォルトの名無しさん mailto:sage [2007/03/25(日) 03:33:32 ]
>>116
grep で引っかかったときにコメントかどうかが判らないから。
とはいえ、1行でも全部みれば判るけどね。

119 名前:デフォルトの名無しさん mailto:sage [2007/03/25(日) 04:25:36 ]
おまえら楽しそうだなw
おれも楽しいけどw


120 名前:デフォルトの名無しさん mailto:sage [2007/03/25(日) 05:17:34 ]
#ifdef _DEBUG

#define DEBUG_ONLY

#else

#define Paste(a, b) a##b
#define DEBUG_ONLY(fn) Paste(/, *) fn Paste(*, /)

#endif

こんなマクロを作ったんだが、これって邪道?



121 名前:デフォルトの名無しさん mailto:sage [2007/03/25(日) 05:26:30 ]
>>120
自己レスだがどう考えてもこっちの方がいいです。
本当にありがとうございました。

#ifdef _DEBUG
#define DEBUG_ONLY
#else
#define DEBUG_ONLY(fn)
#endif

122 名前:デフォルトの名無しさん mailto:sage [2007/03/25(日) 07:55:21 ]
漏れはこんなの作ってみた。
#ifdef DEBUG
#define IF_DEBUG 1 && /**< 常に有効 */
#else
#define IF_DEBUG 0 && /**< 常に無効(このマクロの右辺は生成されない) */
#endif
警告は出ちゃうけどね。

123 名前:デフォルトの名無しさん mailto:sage [2007/03/25(日) 12:59:08 ]
俺はいつもこれ使ってる。
release 時は最適化で消えるはず。

#ifdef NDEBUG
#define DEBUG if(1); else
#else
#define DEBUG if(0); else
#endif

124 名前:デフォルトの名無しさん mailto:sage [2007/03/25(日) 13:00:58 ]
俺は C で書く時は // は使わんな。
-ansi -pedantic -Wall で警告すら出ないように
ガチガチに書くようにしてるから、
// 使うとエラーになる。

125 名前:デフォルトの名無しさん mailto:sage [2007/03/25(日) 13:12:05 ]
そこで-std=c99ですよ

126 名前:デフォルトの名無しさん mailto:sage [2007/03/25(日) 13:48:50 ]
わざわざCで書く理由ってのは移植性やpoorな環境の問題、レガシーコードの
保守などがメインだと思うんだが……

C99なんて使う機会あるか?
C99使えるぐらいならC++が使えないか?

127 名前:デフォルトの名無しさん mailto:sage [2007/03/25(日) 13:57:34 ]
int (*f(int argc, char* argv[]))(int argc, char* argv[]), (main);

こういう変態な書き方ってどうやったら読めるんすか?
っていうか何やってるんすかこれ?

128 名前:デフォルトの名無しさん mailto:sage [2007/03/25(日) 16:49:49 ]
>>127
mainの再宣言のようだけど


129 名前:デフォルトの名無しさん mailto:sage [2007/03/25(日) 21:23:21 ]
Filename_ni_comment_wo_kakeba_iijyo.c

130 名前:デフォルトの名無しさん mailto:sage [2007/03/25(日) 21:48:45 ]
/*
読み込んだ実数値と0.1との和・差・積・商を表示
*/
#include<stdio.h>

int main(void)
{
double num;
printf("実数を入力してください:");
scanf("%1f",&num);
printf("0.1を加えると%fです。\n",num+0.1);
printf("0.1を減じると%fです。\n",num-0.1);
printf("0.1を乗じると%fです。\n",num*0.1);
printf("0.1を除すと%fです。\n",num/0.1);
return(0);
}

なぜかどんな実数を入力しても0を入力された扱いになってしまいます。
どこが悪いのでしょうか?



131 名前:デフォルトの名無しさん mailto:sage [2007/03/25(日) 21:49:58 ]
>>130
www.linux.or.jp/JM/html/LDP_man-pages/man3/scanf.3.html

%lf

132 名前:デフォルトの名無しさん mailto:sage [2007/03/25(日) 21:50:07 ]
%1f
%lf

133 名前:デフォルトの名無しさん mailto:sage [2007/03/25(日) 21:50:17 ]
%1f

134 名前:デフォルトの名無しさん mailto:sage [2007/03/25(日) 21:52:01 ]
>>131-133
ありがとうございます!!!
ってか0とOを間違えるくらい恥ずかしい…orz

135 名前:デフォルトの名無しさん mailto:sage [2007/03/25(日) 23:28:41 ]
なんだ、floatで精度指定してんのかと思ったらdoubleだったんだ。

136 名前:デフォルトの名無しさん mailto:sage [2007/03/27(火) 13:22:37 ]
C言語ゲームを作成中です。他スレから移動です。
6つのファイル公開中しています(読みやすくしたつもりです。>_<;)
ここならCの意見を・・・記述スタイル、変数名など・・・
一通り完成しましたが、大幅に改修している初期の段階の内容です。

現段階は自機が動いて弾を撃つまでです。その他の内容はReadme.txtより
コンソールシューティングゲーム
gamdev.org/up/img/9215.lzh

137 名前:デフォルトの名無しさん mailto:sage [2007/03/27(火) 13:28:35 ]
>6つのファイル公開中しています(読みやすくしたつもりです。>_<;)
先ず、日本語の勉強をすべきかと。

138 名前:デフォルトの名無しさん mailto:sage [2007/03/27(火) 14:19:18 ]
C++ じゃん・・・と思ったら、中身はほとんど C だな。

グローバル変数使い過ぎというのが先ず目につく。クラス化汁。
Console みたいに内部変数にすると不便だというなら、
Singleton パターンを使えば、そのクラスのインスタンスを1つに保証できる。
関数でデータ処理させる際のオーバーヘッドが気になるなら inline 関数にすればいい。
(って、C のスレの回答じゃないな、これじゃ)

名前のローマ字はまあいいとして、player のメンバ名が気になる。
px, py, pspd の p は player の、
ptx, pty, ptflg の pt は player の tama の略だと思うけど、
プレイヤーの情報と弾の情報が同じレベルで混在してるのはどうなのかと思う。
struct tama {
 float x, y;
 char fHassha;
};
struct player {
 float x, y, spd;
 struct tama tama;
};
という風に切り分けた方がいいんじゃないかな。
x, y も、座標構造体やらクラスやらにした方がいいと思う。

GetRandom は、もうちょい double でキャストしないと、オーバーフローが怖い。

(eny + ei)->ex は eny[ei].ex じゃダメなのか?
まあ、このあたりは趣味も関わってくる話かもしれんが。

SYori は Syori だよね?
0, 1 のフラグは、char じゃなくて bool にしようぜ(って、これも C じゃないな)。
InitFunc の中身は全部機能別に関数化した方が読みやすいかもと思った。
まあ、関数化してない部分は短いから、別にいいかもしれんが。

139 名前:デフォルトの名無しさん mailto:sage [2007/03/27(火) 14:31:39 ]
ゲームの場合、綺麗に書く必要はそれほど無いので、
とにかくゲームとして仕上げることが大事。
一本完成すると自信になる

140 名前:デフォルトの名無しさん mailto:sage [2007/03/27(火) 15:24:54 ]
>>136
ヘッダファイルの読み込み順を意識しないといけないのは嫌いだ



141 名前:デフォルトの名無しさん mailto:sage [2007/03/27(火) 15:56:31 ]
レス有り難うございます^^
>>137 すまそ >_<;
>>138
C言語は一定のレベルになると、まったくわかっていない!調べます。
構造体、double、(eny + ei)->ex は eny[ei].ex とか・・・あと変数名も検討する
自機と自機弾は分けようかとしたが・・・現在は暫定ような感じです。t は弾の略です^^

PlayerSYoriですよね!直しました。気づかんかった…
機能別関数化は大きくなった時など考えていきます。
クラス、インスタンス、Singleton パターンinline 関数この辺は
Cの後に挑戦したいと思っています!

>>139
確かに…結構挫折が多かったのでよくわかりますorz 一つ完成させるのが大事!
一応一通り形はできたのですが・・・(そのほうが質問しやすいと思ったから)
しかし、理解せずに進んだため信じられんほど、時間が
かかり過ぎた >_<;毎日泣きそだった。ぐぐりまくってもわからんし…

>>140 見直してみます><
まずは、グローバル、構造体、ヘッダーをみてみます。

142 名前:デフォルトの名無しさん mailto:sage [2007/03/27(火) 17:06:35 ]
>>136
向こうのスレを見ている者だが、最初に比べると随分上達したな。
個人的にはローマ字命名はちょっと…だが。

143 名前:デフォルトの名無しさん mailto:sage [2007/03/27(火) 17:44:57 ]
>>141
どのスレから来たんだい?

144 名前:デフォルトの名無しさん [2007/03/28(水) 18:50:32 ]
ある人が書いたソース見ていたら、ヘッダファイルに以下のような部分を
見つけました。

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#ifdef _MSC_VER
#include "resource.h"
#endif

私の疑問は、 "resource.h" というファイルを探したのですが、
見当たらなかったのですが、エラーなくコンパイルできます。
その理由がわかりません。教えて下さい。

145 名前:デフォルトの名無しさん mailto:sage [2007/03/28(水) 18:58:55 ]
必要とされてないからでしょう

146 名前:デフォルトの名無しさん mailto:sage [2007/03/28(水) 19:50:41 ]
>>144
#ifdef _MSC_VER
#include "resource.h"
#endif

もし _MSC_VER が定義されていたら
resource.h をインクルードする
_MSC_VER が定義されていないならインクルードしない
君の環境では_MSC_VER が定義されていないので resource.h がなくても問題ない

147 名前:デフォルトの名無しさん mailto:sage [2007/03/28(水) 20:08:08 ]
K&RのP270に
「宣言中の最初の添え字は配列が消費するメモリ量を決めるのには役立つが、
添え字の計算には関係しないということである。」
という文があるのですが
int array[2][4][6];
と宣言した場合の2,4,6はそれぞれ配列の要素数を決めているだけで
*(array[2][4]+6)のシンタックスシュガーな訳ではないってことですか?

148 名前:デフォルトの名無しさん mailto:sage [2007/03/28(水) 20:14:08 ]
「最初の添え字」つまり、その例では2のこと。4,6は関係する。

149 名前:デフォルトの名無しさん mailto:sage [2007/03/28(水) 20:35:08 ]
arrayの各要素のメモリ内での位置を計算するのに2は必要ないというだけの意味。

150 名前:147 mailto:sage [2007/03/28(水) 20:36:24 ]
>>148
添え字の計算には関係しない、の意味がよくわからないんですが
array[1][2][3]は*(array[1][2]+3)に読み替えられて、array[1][2]は配列だから
(array[0]+1)[2]になるんですよね?



151 名前:147 mailto:sage [2007/03/28(水) 20:39:32 ]
すいません更新してませんでした
>>149
どういう風に必要ないのかいまいちよく分からないです…

152 名前:デフォルトの名無しさん mailto:sage [2007/03/28(水) 20:41:33 ]
たとえばarray[1][3][5]のアドレスはarrayの先頭要素から、
(1)*4*6+(3)*6+(5)要素サイズ分だけ離れていると計算できるから、
最初の添え字のサイズである2は計算に必要とされない。
array全体のサイズを決めるためには2も必要。






[ 続きを読む ] / [ 携帯版 ]

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

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