- 1 名前:デフォルトの名無しさん [2009/12/15(火) 23:42:55 ]
- C言語の*入門者*向け解説スレッドです。
★前スレ C言語なら俺に聞け(入門編)Part 57 pc12.2ch.net/test/read.cgi/tech/1260020924/ ★過去スレ makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000 ★初心者、初級者の方は他の質問スレのほうが良いかもしれません。 例えば 【初心者歓迎】C/C++室 Ver.70【環境依存OK】 pc12.2ch.net/test/read.cgi/tech/1258873470/ とか ★教えて欲しいのではなく宿題を丸投げしたいだけなら ↓宿題スレ↓へ行ってください。 C/C++の宿題片付けます 133代目 pc12.2ch.net/test/read.cgi/tech/1260532772/ ★C++言語についてはなるべく聞かないでください。C++対応明記スレへどうぞ ★分からない事をなるべく詳しく書いて下さい。 ★ソースコードを晒すと答えやすくなるかもしれません。 # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること # サイズが大きい場合は宿題スレのアップローダ等を利用してください ★開発環境や動作環境も晒すと答えが早いかもしれません。 ★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
- 304 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 21:17:28 ]
- 倍数判定機を作ろうと思ったのですが、エラーが出てうまくコンパイルできません
どこが間違っているのでしょうか #include<stdio.h> void baisuu(int y) { int b; for(b=2;b<=20;b++) { if(y%b) printf("%dの倍数です",b); } int main(void) { int x; printf("整数を入力してください\n小数点以下は切り捨てます\n"); scanf("%d",&x); baisuu(x); return 0; }
- 305 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 21:24:07 ]
- >>304
!
- 306 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 21:30:07 ]
- (無保証な)ヒント:
論理式に単項式だけを書くやり方 そう if( y % 3)とかwhile( !p )とか はかっこいい ように見えて実は 古くダサい し、下らないミスの温床 if( (y % 3) != 0)とか while( p != 0 )とか 書く癖のほうが類似書式のプログラミング言語(Javaとか) も使うようになった時を考えるといい
- 307 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 21:31:00 ]
- >>304
void baisuu(int y)にも}が足らん
- 308 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 21:37:54 ]
- とりあえず>>306 >>307の指摘部分を直したのですが
今度は「左辺値が必要」というエラーが出て うまく倍数判定もできません void baisuu(int y) { int b; for(b=1;b<=20;b++) { if((y%b)=0) printf("%dの倍数です\n",b); } }
- 309 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 21:42:51 ]
- int a,shidt;
ととして ((a-shift)?(a-shift):2) の演算でおかしな挙動するので調べてみたら a-shiftがマイナスでも真と判定されてた (((a-shift)>0)?(a-shift):2) としたらちゃんと動いた 真と偽の動作を勘違いしてました
- 310 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 21:43:31 ]
- >>308
それは代入だろ。 y % b == 0
- 311 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 21:45:36 ]
- >>310
おお、ちゃんと動きました =と==の違いを忘れてました
- 312 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 21:54:24 ]
- 意外と中級車も=と==を間違えるんだよなぁ
さすがに上級者はそんな間違いをする人はいなくなるが。
- 313 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 22:01:51 ]
- 代入演算子 = が悪い。
どうしてこうなったのか。 おかげで等価演算子は == という悲しさ。。
- 314 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 22:07:20 ]
- 比較式より代入式の方がソースコード中の出現確率が多いを思ったから代入を=にして比較を==にしたんだろ
面倒なことはできるだけしない、可能な限りシンプルにしたい、そう考えると納得がいく
- 315 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 22:22:54 ]
- 五目並べの盤面評価関数ってどんなふうに作ったらいいと思う?
- 316 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 22:49:47 ]
- >>314
pascal のように代入を := にし、比較は == にすれば公平でいいかも。
- 317 名前:デフォルトの名無しさん [2009/12/19(土) 23:02:43 ]
- pascal が嫌いな人が作った言語でか
- 318 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 23:08:46 ]
- =と==を間違えるなんて都市伝説だろ?
おれはめっちゃ初心者のときしか間違えてないよ。
- 319 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 23:19:27 ]
- 確かに、ほとんど間違えないんだが、コーディング規則がちゃんとしていないと、いったん間違えると発見困難になることがある。
20年前は、 char *p, *q; ... if (p = q) {...} で、この = は間違ってないというような書き方が普通に行われていた。
- 320 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 23:29:35 ]
- ソースは可能な限り短いほうがいい。
…みたいな考え方のアフォとは一緒に仕事したくないな。
- 321 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 23:33:07 ]
- >>319
それは、今は警告でるし。 >>320 そういうのは状況によるとしかいいようがない。 「冗長に書けば書くほどわかりやすい」とか思ってるやつも勘弁して欲しいし。
- 322 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 23:35:15 ]
- 変数は可能な限り少ない方が良い。
繰返し回数は可能な限り少ない方が良い。
- 323 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 23:40:12 ]
- >>319
30年前の間違いだろ。 20年前は既に警告出すコンパイラが主流だし わかりやすさを優先することが当然になっていたよ。 まあ類は友を呼ぶというから そういう人達の間ではそれが普通だったのかもしれんがね。
- 324 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 23:42:29 ]
- >>320そういうひとって
printfもpfとかに名前をかえて int a; void f(){ pf("asdf"); } こんなことしたがるような人?
- 325 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 23:43:27 ]
- いや、それは論外すぎるだろ…
- 326 名前:デフォルトの名無しさん [2009/12/19(土) 23:48:26 ]
- >>253です。
質問内容はコンパイルの出来ない理由を御聞きしました。 どうやら原因は全角スペースに問題があったみたいです。 回答してくれた方ありがとうございます。
- 327 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 23:49:58 ]
- >>322
そういう考えでできたのが構造体やクラスや配列なんだろうな int Taro_age; int Taro_ID; char* Taro_Name; char* Taro_EmailAddress; int Hanako_age; int Hanako_ID; ・ ・ ・ みたいに一個一個作ってたら大変だし。
- 328 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 00:13:15 ]
- int x;
int* p; p=&x; printf("%d",p); この結果が毎回違うのはなぜ? アドレス固定することはできないの?
- 329 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 00:17:15 ]
- >>328
pに格納しているxのアドレスを表示している
- 330 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 00:20:13 ]
- 変数xが格納されているメモリの位置はOSが管理している
- 331 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 00:21:19 ]
- int x;
int* p; p=&x; printf("%d",p); int x; int* p; p=&x; printf("%d",&x); int x; int* p; p=&x; printf("%d",*p); int x; int* p; p=&x; printf("%d",x);
- 332 名前:319 mailto:sage [2009/12/20(日) 00:28:57 ]
- >>323
少々遅レスで悪いが、30年前だと、K&Rの出版年になっちゃいますね。 20年じゃなくてもう2,3年前かも知らんけど、warningがたくさん出るようになったのは ANSI-C普及と同時期だったような気がする。 前のは例が悪かったけど、少なくとも当時は、 while (!(p = p->next)) { ... } といった書き方はごく普通だったと思うし、悪いともされてなかったと思う。 このスレでもキャストうざい派がいるように、いまだに警告無視する人はいるみたいですよ。
- 333 名前:デフォルトの名無しさん [2009/12/20(日) 00:32:26 ]
- >>318
俺もそう思ってたが 先週 != を ! = と書いて すっげー落ち込んだ
- 334 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 00:34:54 ]
- 警告ってなんなん?問題があるならエラーにしろや
- 335 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 00:35:38 ]
- >>332
確かに、警告を出すのは比較的あたらしいコンパイラって印象がある。 そもそもこの警告って、C言語の文法に違反してるとかじゃなくて よくある間違いだから、って理由だしね
- 336 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 00:37:21 ]
- int main()は値を返すべき
- 337 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 00:40:36 ]
- >>330
プゲラ トーシロは黙ってろよwww
- 338 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 00:41:56 ]
- 仮想メモリ。。
- 339 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 01:30:05 ]
- >309
それは可読性を考えたらこっちがよくないか? (( a > shift) ? (a-shift) : 2)
- 340 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 01:34:36 ]
- >328
そのコードで&xの値が毎回同じになることを期待してはいけない。 自分でメモリ管理するのでなければ、変数やmallocの具体的な 値については、知らなくてイイし、依存するようなコードを書くべきではない。
- 341 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 01:45:17 ]
- 関数外でxを宣言してみたら
- 342 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 01:53:36 ]
- せっかくCをやるんだからメモリのことは熟知したい
- 343 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 02:37:24 ]
- 初心者です。文字列のコピーについてです。
char a[10]; strcpy_s(a, "こんにちわ"); ・・・・・・・ これは正常に動きます。 a = "こんにちわ" ・・・・・・・ これはエラーになります。なぜでしょう。 a は配列の先頭アドレスです。"こんにちわ"も配列の先頭アドレスです。 a = "こんにちわ"は、アドレスをコピーするだけなので正常に動く気がしてしまうのです。 エラーメッセージは、「const char [11]' から 'char [20]' に変換できません。」です。 変換?「=」は代入を行っているわけではないのでしょうか?
- 344 名前:343 mailto:sage [2009/12/20(日) 02:38:14 ]
- char a[10]; は char a[20]; にしてください。
- 345 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 02:45:40 ]
- 配列の場合、変数なのは中身であって、配列を示す a 自体は変えられない。
- 346 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 02:49:45 ]
- "こんにちは"
- 347 名前:343 mailto:sage [2009/12/20(日) 02:58:26 ]
- >>345
ありがとうございます。ですが難しく、頭の中で理解ができていません。 もう少し優しく教えていただけると助かるのですが・・・。
- 348 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 03:04:01 ]
- char *a;
a = "こんにちわ";
- 349 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 03:17:27 ]
- エラーメッセージをよく読みませう
- 350 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 03:19:20 ]
- >>343
これを試してみ char a[11]; a = "こんにちわ"; VBとかJavaに慣れてると、Cの配列や文字列は扱いづらいよね 最初のうちは参考書をちゃんと見た方がいいよ
- 351 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 03:26:34 ]
- a[10]が '\0' ってこと?
- 352 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 03:42:52 ]
- >>347
配列と文字列リテラルは一緒じゃないよ。 文字列リテラル"こんにちは"は、その時点でメモリのどこかに確保されてるわけじゃない。 確保されてない領域のアドレスを代入しても意味が無い。 配列がポインタに成り下がるのは"右辺"のみ。配列の内容はあくまで[20]の部分。 アドレスじゃなくて配列の内容を書き換えたいのだから、単純な代入ではできない。
- 353 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 04:06:47 ]
- char a[20] = "こんにちわ";
と char *p = "こんにちわ"; は全くの別物。
- 354 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 04:12:26 ]
- 将来的に
char a[20]="因習文法"; は禁止される予定 SJISとして char a[20]={ 0["一貫文法"],1["一貫文法"],2["一貫文法"],3["一貫文法"], 4["一貫文法"],5["一貫文法"],}; てな感じしか許されなくなる可能性も示唆
- 355 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 04:13:32 ]
- >>350
バカ?
- 356 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 05:08:58 ]
- >>350は>>355の1.1倍バカだね
- 357 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 06:20:56 ]
- >>343
配列とポインタ、アドレスの理解がごちゃごちゃになってるからそうなる。
- 358 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 06:40:45 ]
- だそうです!
- 359 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 07:41:09 ]
- モンスターが勝手に穴掘って落石連鎖に巻き込まれてる雰囲気
もちろん特点加算無し
- 360 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 07:59:15 ]
- 残機も無し
- 361 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 08:02:19 ]
- あと数十年後
メモリが100GB、CPUの処理速度も今の数百倍とかになったら C言語も変わるかなぁ
- 362 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 08:57:45 ]
- >>350の言うようにしても>>343と同じ結果になるだけ。
>>350は文字列と配列をなんにも分かってない。
- 363 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 09:29:34 ]
- >>361
そりゃスタイルは多少変化するだろうけど コンピュータの仕様が根本的に変わらない限りCに望まれる働きも変わらないはず 新しい環境に合わせたプログラミングモデルを作るのはむしろ派生言語の役目だと思う
- 364 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 09:45:20 ]
- >>363
お前には言ってないからw
- 365 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 09:46:16 ]
- >343
とりあえず、「配列には代入できないから」と思ってください。 正確には、配列は式の中では、「その先頭要素を指すポインタ」 として評価されるが、それは「代入できない左辺値」であるから。 ついでに(初期化付き)宣言と式では文法が別物になっている。 char a[20] = "hello"; はOK char a[20]; a = "hello"; はNG
- 366 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 09:52:41 ]
- >343
疑問の主旨とは変わるけど strcpy_sだったら、そのコードコンパイル通らないんじゃないの? CRT-Cだと思うから、こんなコードじゃね? strcpy_s(a, sizeof(a), "hello");
- 367 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 09:55:14 ]
- 初期化付き宣言でややこしくなってるのだなぁ
と思う
- 368 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 10:02:38 ]
- まあちょっと、誰もが一度は通る道だよな。
そして、だれもが曖昧な理解だけで通り過ぎていく箇所だわな。
- 369 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 10:05:55 ]
- >352
ちょっと説明が怪しいぞ。 Cの文法のイヤらしいところでわかりにくいのだけれどさ。 文字列リテラルの型はconst char[文字列長]で、普通は 書込不能な静的メモリ領域に置かれる。これは>343 でエラーになることとは直接関係ない。 「配列がポインタに成り下がるのは"右辺"のみ。」 はそんな感覚でよいと思うけど、正確には 「配列を評価すると代入できない左辺値となる」 char a[10]; a[0] = 1; は左辺だけど、ポインタとして評価されている。
- 370 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 11:19:19 ]
- メモリ管理は、いっぺん自分でやってみたほうがいい。
最近は大学でさえ教えないからな 俺のときはやったのに
- 371 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 11:29:46 ]
- メモリ管理って?
Z80を使ったアセンブラ演習はした。 テンキーでマシン語入力して実行させるんだよな。 ステップ実行でメモリを観察しながら。
- 372 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 11:31:34 ]
- 言ってみれば、自分でOSを構築するってことだな
メモリ管理に留まらず、スレッディングやマネジメントも含まれる。 聞いたら、そういうの今の大学じゃやってねえっちゅう話じゃねえか なもんで、リバースエンジニアリングすらも満足に出来ないと。 それできないとウィルスのリバースエンジニアリングも出来ない=検知できない だからセキュリティ業界は人材の確保が大変だとよ
- 373 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 11:39:35 ]
- アセンブラのみでBIOSを構築したり、OS作ったり
とにかくありとあらゆる既存のライブラリやミドルウェアなどを使わずに 自分で何もかも構成した。売り物には、かなわないにしろな HDDの制御やファイルシステムなども自分で考えて構成したりした。 普通大学つったらそういうことやるだろ が、今は何かねむたいことを言ってやらないと。
- 374 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 11:53:00 ]
- だから独り言なら他所でやれよ
- 375 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 12:20:43 ]
- やだやだー
- 376 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 12:31:25 ]
- char a[10]; の a の部分はラベルだとでも考えたら良い。
- 377 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 15:50:09 ]
- ツェーの仕様上、アドレスの受け渡しは
明白に誰が何に使っているか分かってないものは渡せません! っていうお約束がある。 「こんにち波」っていうのは、あくまでも「まだどこにも属しておらず、アドレスともデータとも認められていない」 状態である。そのソースを呼んだ感じで言えば。 「文字列は連続したアドレスに入れられるよ」って言うのは人間だから分かっているだけで、 コンピュータ内部では「まだどこにもンなもんあらへんやん」という未知の物体なのである。 それと、アドレスだけでは「どこからどこまでか」が分からないので これも単純にやりとりするわけには行かんのである。 配列は長さが明白に分かってるポインタのようなものだから、 それが分からないポインタには単純に代入できない。
- 378 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 15:52:46 ]
- ___
ξ _ ヽ  ̄ ├-┤ / ̄ ̄ ̄\)〆 | | \ | ‐∩∩―┐ || |・ ・ | |│ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ┗ ^ ┛ | | | < ツェー!!! /777^l | || \ ) ̄ ̄_ノ__| lヽl|  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ,―  ̄ ̄_η_|/V^ | l  ̄ ̄|_Ξ)/ | `‐―┬┘\/ | | | | 〇 | | | |__∧___| | | | ∩ | |__|_ __ ∫ ) | \ ̄ ノ `―┬‐―┬‐┘ ̄ / / / / / / ,〜^⌒\__/
- 379 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 16:47:46 ]
- byte* p=malloc(10000);
free(p); これを行うと何がおこる? mallocで確保した10000個の領域が全部開放されるの?
- 380 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 16:54:26 ]
- 連続したbyte10000個分の領域1つが解放される
- 381 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 16:59:09 ]
- だよね。
じゃあbyte* p=malloc(10000); ってのは悪いやりかた?
- 382 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 17:11:59 ]
- 何でそう思うの?
byteのサイズがいくつになるかわからんから、 sizeof (byte) * 10000 で
- 383 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 17:12:43 ]
- つ「メモリリーク」
一般的なOS上で動く寿命の短いソフトなら起こっても大した問題は起きない デーモンとかサービスみたいな起動しっぱなしのソフトや低レベルなソフトとかだと死亡
- 384 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 17:12:46 ]
- って可変にしたけりゃrealloc使えばいい
- 385 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 17:15:48 ]
- >>379-384
これこそ、なにがしたいのかわからん質問。
- 386 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 17:51:20 ]
- >>371
Z80 にステップ実行させる機能(内部割込み)はない。それはZ80 ではないのでは?
- 387 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 17:57:18 ]
- >>384
過去にmalloc()/realloc() したときに取得したサイズを、現在 get できればいいのですが。 やっぱりどこかに覚えとくしかないか。
- 388 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 17:57:58 ]
- Z80 のエミュレータかもしれない
- 389 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 18:01:12 ]
- 疑問の全てに実用性を求めることの意味を問いたい
- 390 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 18:10:15 ]
- >>389
答えられない質問には、その質問自体が無意味であることを主張した方が 自分の優位性を保てるから
- 391 名前:デフォルトの名無しさん [2009/12/20(日) 18:25:15 ]
- すいません。流れをぶった切って質問します。
今、10日くらいでhelloから始まり今if文とかの入門書に書いてある 関数の基礎を一回ずつコンパイルしました。 それから配列についてちょこっとやってます。 それで今 実行の引数やポインタに進んでいます。 そこで、勉強法としてそのまま先に進めていっていいのでしょうか? それとも変数や配列を極めたほうがいいでしょうか? ちなみに自分はあんまり関係ない機械関係の運用の仕事をしていてすぐに実務に使用するわけではありません。 目的は、プログラミングの勉強をしてゲームプログラムを自分で作れるようになりたいです。
- 392 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 18:27:43 ]
- >>387
内部的には持ってるだろうけど、通常の方法では無いね。 まあ最後のメンバーが可変長の構造体作って管理する手もある。
- 393 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 18:28:19 ]
- >>391
訳分からなくてもとりあえず最後までやる 同じ本を何度かやってりゃ分かるようになる クズ本じゃなければの話だけど
- 394 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 18:29:52 ]
- まあ先に進んでも、いずれどこが理解してないのかが分かってくるんじゃね?
途中の部分を極めるって考えはどうなのかね
- 395 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 18:37:39 ]
- いいんじゃないかな。どうでも
- 396 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 18:38:16 ]
- 一回だけしかコンパイルしないんじゃ、理解しないまま先に進んでないか?
- 397 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 20:09:23 ]
- >>386
ICEとかエミュとか上位互換のカスタムチップとかクロックそのものを止めるとか、 いくらでもステップ実行させる方法はある。 今は学習用だとWin上でエミュが主流だから、テンキー入力するのはちょっと前の世代か ハンダ付けの実習も兼ねてるか。
- 398 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 20:14:16 ]
- じゃあここをこう変えたらどうなるんだ?という疑問が沸く。
↓ ↑ コンパイル&検証orエラー このプロセスを経ずして理解できたなどと、おこがましいとは思わんかね?
- 399 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 20:34:15 ]
- ⊂⌒~⊃。Д。)⊃ ピクピク
- 400 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 20:39:28 ]
- >380
まちがい。なぜわざわざ嘘を教えるの?それともマジ? C++のnew、deleteと勘違いしていないか? >379, >381 >380は間違い。 >379自体は問題ない。 ただし1000がsizeof(byte)の倍数になっていないと、 pを使うときに問題が起こるかも。>382はそのことを言っている。
- 401 名前:デフォルトの名無しさん [2009/12/20(日) 20:43:49 ]
- setupファイルが簡単に作れるC++の統合開発環境を教えてください.net以外で
- 402 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 20:47:26 ]
- 教えてくれるといいですね
- 403 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 21:02:37 ]
- 質問です。コマンドラインで-Dと指定したときに条件付けしようとしています。
次のように書くと動作するのですが while(--argc > 0 && (*++argv)[0] == '-') if((*argv)[1] == 'D') debug = 1; while(--argc > 0 && (*++argv)[0] == '-' && (*argv)[1] == 'D') と書くと動作しません。 2個目の条件(*++argv)[0]でargvが1進み、3個目の条件では+1されたargvが参照されると期待しているのですが、 こうはいかないのでしょうか。 ちなみに、 while(--argc > 0 && (*++argv)[0] == '-' && (*++argv)[1] == 'D') とした場合segmentation errorとなります。 また3番目の条件をargv[0][1]=='D'などと指定してもうまくいきません。 whileの条件中だけで全て条件付けることはできないのでしょうか。
- 404 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 21:05:18 ]
- >>403
目的を達するために getopt を使うとか strcmp で比較するのはどう?
|

|