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


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

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



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

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


教えて欲しいのではなく丸投げしたいならこちらへ
C/C++の宿題を片付けます 91代目
pc11.2ch.net/test/read.cgi/tech/1182607405/

565 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 08:48:21 ]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct list{
char *name;
struct list* next;
};

int main(void){
struct list *head,*ume;
char *str;
head=NULL;
str=(char*)malloc(100*sizeof(char));
printf("名前を入力(endで終了)>");
fgets(str,100,stdin);
while(strcmp(str,"end\n")!=0){
ume=(struct list*)malloc(sizeof(struct list));
ume->name=str;
ume->next=head;
head=ume;
printf("名前を入力(endで終了)>");
fgets(str,100,stdin);
}
printf("%s%p\n",head->name,head);
return 0;
}
リスト構造体のテストやってみたんですが
これ実行して、taro、hanako、endと入力したら
endが表示されるんだけどどこがおかしいんですかね?
endと入力した時点でwhileから抜け出し、head->nameがendになると思えないんですが・・・

566 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 08:54:24 ]
>>565
> head->nameがend
ume->next=head;
head=ume;
↑そりゃなるだろw

567 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 09:05:44 ]
>>565
おかしいっていうのは、期待した動作と違うって事だろうけど
何をしたいのか分からんのに、答えられるわけ無いだろ

568 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 09:16:49 ]
>>565
エスパー回答
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct list{
char *name;
struct list *next;
};
int main(void){
struct list *head, *ume;
char *str;
head = NULL;
str = (char *) malloc(100 * sizeof(char));
for(;;){
printf("名前を入力(endで終了)>");
fgets(str, 100, stdin);
if(strcmp(str, "end\n") == 0) break;
ume = (struct list *) malloc(sizeof(struct list));
ume->name = strdup(str);
ume->next = head;
head = ume;
}
ume=head;
while(ume!=NULL){
printf("%s", ume->name);
ume=ume->next;
}
return 0;
}

569 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 09:21:00 ]
>565
ume->nameは常にstrを指していて、最後にendになってんだから当たり前だろ。

570 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 09:45:41 ]
>>565
まあ大体察しはつくが・・・

「おかしい」って言う以前に、どういう動作を期待しているのかちゃんと書こうな

571 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 09:54:45 ]
どのくらいの変数が必要なのかよくわからないときは
とりあえず多めに変数宣言用意しておいてもいい?
int i,j,k,l;
double a,b,c,d,e;
char f[1000],g[1000],e[1000];

とか・・・
変数○○は使われていませんって警告がでるけど
多くしたら実行速度下がるとかエラーでるとかこまったことがおきるとかありますか?

572 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 09:54:56 ]
struct list{
char *name; < いっ、いいんかい?
struct list *next;
};

573 名前:デフォルトの名無しさん [2007/07/03(火) 09:59:25 ]
571
困ったことが起こるよ
new だといい



574 名前:デフォルトの名無しさん [2007/07/03(火) 10:02:14 ]
571
使ったことないけど
std::vector, std::string
がいいみたいだよ

575 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 10:08:31 ]
C++とSTLの世界へご招待〜

576 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 10:14:18 ]
C言語の入門者向け解説スレです。
・C++言語はスレ違いです。

577 名前:デフォルトの名無しさん [2007/07/03(火) 10:16:25 ]
576
C言語専用の環境使っているやつがいるか?

578 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 10:21:31 ]
そりゃいるでしょ

579 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 10:25:00 ]
>>571
一応ありはありだが
・万一配列のサイズを超えたときにそれをはじくようなチェックを入れておく。
・スタックにあまり大きな配列を取らない(char *f, *g, *eにして領域をmallocする)。
あたりは注意しておいたほうがいい。
速度はメモリ浪費でスワップしない限りさほど落ちない。

580 名前:デフォルトの名無しさん [2007/07/03(火) 10:30:04 ]
今日はじめてSTLググってみたけど、これは使うべきだな
初心者こそ使うべきだな
コーディングが楽になるな

581 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 11:45:36 ]
charの配列の[0]から[3]の4バイトにデータがあります。
これを一つのintの変数に入れたいのですが、どうやればいいですか?

582 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 11:48:29 ]
>>581
過去ログを読む気がないのなら、やりたいことを具体的に書け。
どんなデータをどう入れたいのか判らんことには答えようがない。

583 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 11:48:39 ]
*(int*)配列名



584 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 11:49:50 ]
>>583
バスエラーの可能性ががが

585 名前:デフォルトの名無しさん [2007/07/03(火) 11:55:18 ]
c[0]+(c[1]<<8)+(c[2]<<16)+(c[3]<<24)

586 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 11:56:39 ]
union使うとか

587 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 11:57:53 ]
>584
配列の0から3でもバスエラーって発生するもんなの?

588 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 12:00:28 ]
>>587
char配列がint安全な場所に作られる保証はない。
その点ではunionの方がまし。
しかし、unionには言語仕様的に実装依存の罠が。
そういう意味では>585でいいのだがエンディアンの問題が残る。

まぁ、最近のコンパイラならどれで書いても同じようなコードを吐くしね。

589 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 12:11:23 ]
>>588
そういやこういう場合かもしれんしな。

#include <stdio.h>
#include <stddef.h>

int main() {
struct A {
char a;
char b[4];
};

printf("%ld\n", offsetof(struct A, b));
}

590 名前:581 mailto:sage [2007/07/03(火) 12:30:43 ]
>>583
一番簡潔なのですがかなり難解です。これから考えます。
>>585
一番分かり易いです。

unionの使い方に悩みましたがcharの配列と一つのintのメンバ変数を用意して
charの配列にデータを入れてintのメンバ変数でアクセスすればいいのですね。面白い。

591 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 12:36:02 ]
GCC で試した所、
-O (最適化レベル1か、それ以上)
-funroll-loops (ループ展開最適化)
フラグを立てると >>585 みたいなコードを吐いてくれるみたいだ。

int toInt(const char* ch) {
union {
char ch[sizeof (int)];
int i;
} endian;

int i;
int shift, dshift;
int n = 0;

endian.i = 0;
shift = *endian.ch ? 0 : (sizeof (int) - 1) * CHAR_BIT;
dshift = *endian.ch ? CHAR_BIT : -CHAR_BIT;
for(i = 0; i < sizeof (int); i++) {
n |= ch[i] << shift;
shift += dshift;
}
return n;
}

592 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 14:59:59 ]
最近、関数のメモリの場所をポインタで取得できることを知ったのですが、
これを利用してデリゲートまがいなことってできませんかね?

593 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 15:00:37 ]
qsort() とか使ったことない?



594 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 15:41:43 ]
int a, b;
があって両者の絶対値の大きさを比較したいとき
自乗した値を比較するのとabs()を使うのではどちらが速いのでしょう?
自乗してもintの範囲を超えないことは保証されているという前提で。

またこういったベンチマークテストはどうやって行うのでしょう?

595 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 16:02:53 ]
数百万回〜数億回くらい実行して、速度を比較する。

596 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 16:15:19 ]
>>594
こんなコードを書いてみる。
#include <stdio.h>
#include <stdlib.h>

int main()
{
volatile int a;
volatile int b;
for (int ic = 0; ic < 100 * 1000 * 1000; ++ic) {
#if 1
volatile int c = abs(a) > abs(b);
#else
volatile int c = a * a > b * b;
#endif
}
return 0;
}
こいつをこんな感じで実行してみる。
$ gcc foo.c -std=c99 -O3 ; time ./a
foo.c: In function `main':
foo.c:11: warning: unused variable `c'

real 0m0.734s
user 0m0.687s
sys 0m0.047s
意外にも、abs()の方が遅かった。

597 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 16:18:21 ]
abs は条件判定が必要だからな。

598 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 16:34:10 ]
あー、volatile宣言のお蔭で、参照回数の影響も出ちゃった。
よって一部訂正。
#if 0
int aa = a; int bb = b;
volatile int c = abs(aa) > abs(bb);
#else
int aa = a; int bb = b;
volatile int c = aa * aa > bb * bb;
#endif
今回は大勢に影響はなかったけど。
で、ついでに-Sでアセンブリ出力を眺める。二乗版はこんだけ。
movl -4(%ebp), %eax
movl -8(%ebp), %edx
imull %eax, %eax
imull %edx, %edx
cmpl %edx, %eax
setg %dl
movb %dl, -9(%ebp)
abs()版はどうしても条件分岐しないためにビット操作であれこれ捻り過ぎ。
movl -8(%ebp), %edx
movl -12(%ebp), %eax
movl %edx, %ecx
sarl $31, %ecx
xorl %ecx, %edx
subl %ecx, %edx
movl %eax, %ecx
sarl $31, %ecx
xorl %ecx, %eax
subl %ecx, %eax
cmpl %eax, %edx
setg %dl
movb %dl, -13(%ebp)

599 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 16:50:59 ]
バイナリーサーチというものをやる場合
データが小さい順もしくは大きい順に並んでなかったらできない?
つまりめちゃくちゃなデーターがあったら一旦それをバブルソートなどで整列させないとダメってことですか?

600 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 16:51:52 ]
そう。

601 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 16:52:21 ]
わざわざバブルソートを選択する理由も無いけどな

602 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 16:52:46 ]
>>599
その通りです
バブルソートである必要はありませんが…

603 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 17:00:04 ]
バブルソート突っ込まれ過ぎワロタ



604 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 17:19:51 ]
>>599
揃っているからこそのバイナリサーチじゃないか。
って、仕組み見たら一目瞭然だと思うが・・・・・

で、バブルソートである意味はない。

でも、ふと思ったのは、必要なものをすべて見つける必要はなくて
一つ見つければいいというのであれば、動的に必要な部分だけ
ソートしながら利用するっていう使い方もあるのかな、と思った。

レイトバインディングのように、対象要素が大きくて
ソートの初期化コストが大きかったり頻繁に要素が追加されるという状況で使えないかな?
それともそういう場合はB-Treeとかを使っておくべき?(追加のコストによるのかな?)

605 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 19:08:21 ]
#include いろいろ
struct list{
int data;
struct list *next;
};
void showlist();
int main(void){
int indata,i,j;
struct list *head,*test;
head=NULL;
while(1){
printf("数を入力(終了は0)>");scanf("%d",&indata);
if(indata==0)
break;
test=(struct list*)malloc(sizeof(struct list));
test->data=indata;
test->next=head;
head=test;
}
showlist();
return 0;
}
void showlist(){
struct list *now;
while (now!=NULL){
printf("%d ",now->data);
now=now->next;
}
};

構造ポインタで次々入力しshowlistで表示するというのを作ったんだけど
これ実行したら、mainのreturn 0の上のshowlistがプロトタイプ宣言が無いと警告でるんですがどうしたらいいですか?

606 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 19:25:05 ]
void showlist(void);
         ↑型を入れる

607 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 20:14:24 ]
#include <stdio.h>

void inputdata(int data[],int n);

int main(void){
int x[10];
inputdata(x,10);
return 0;
}

void inputdata(int data[],int n){//inputdata関数
int i;
for(i=0;i<n;i++){
printf("Input data>");
scanf("%d",&data[i]);
}
for(i=0;i<n;i++){
printf("data[%d]=%d",i,*data[i]);
}
}

C言語について質問です
配列x[0]〜x[9]のそれぞれに値を入れて表示するというinputdata関数を作ってみたいんですが
これ動きません。どのように関数を直せばよいのでしょうか?

608 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 20:19:42 ]
int *data[]

609 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 20:34:33 ]
printf("data[%d]=%d",i,*data[i]);

printf("data[%d]=%d",i,data[i]);

610 名前:デフォルトの名無しさん [2007/07/03(火) 20:55:02 ]
2^8は65,536でしょうか?

611 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 20:58:26 ]
それくらいぐぐれよ
www.google.co.jp/search?q=2%5E8

612 名前:デフォルトの名無しさん [2007/07/03(火) 21:09:46 ]
さんkyさう

613 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 21:15:15 ]
つーかプログラミング勉強してる奴が電卓の使い方も(その存在も?)和歌ランとは・・・



614 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 21:19:11 ]
小学生なんだろ。

615 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 21:47:58 ]
2^8 = 16^2 = 0xFF

616 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 21:52:29 ]
二次元配列で構造体を使って
その中身の計算に
違う二次元配列の中身を用いないといけないんだけど
すげーキレそう

617 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 21:57:59 ]
ゆとりは相変わらずキレやすいな。

618 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 22:03:50 ]
トイレに行くと血が・・・ orz

619 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 22:04:52 ]
>>618
今日あの日だろ

620 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 22:14:14 ]
>>618
肛門様を大事に

621 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 23:25:36 ]
cdっていう配列があったとして
&cd[0]

cd
は全く同じ意味ですか?

622 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 23:27:05 ]
ほぼ同じ意味

623 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 23:27:28 ]
>>621
「2*2」と「1*4」は同じですか?
という質問と同じです。

値も型も同じですが、意図が違います



624 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 23:27:32 ]
cdとブルーレイくらいしか変わらない

625 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 23:28:25 ]
sizeofの引数にしてみそ

626 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 23:47:34 ]
void型の関数でwhileやifの途中で関数を終わらせるにはどうしたらいいでしょうか?
int型とかなら
if(x==1)
return 0;
とかやれば関数から抜け出せるけど
void型はどうやるんですか?

627 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 23:48:33 ]
return;

628 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 00:02:09 ]
だが、ループの途中からリターンするのはあんまり気持ちのいいもんじゃないよ。

629 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 00:05:51 ]
そして、じゃあbreakはどうなんだ?というような宗教論争に

630 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 00:12:35 ]
ネストされたループとか考えるとループ中のreturnはやむを得ない気がする。

631 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 01:03:33 ]
10GBぐらいある巨大なテキストデータの中のある1行を
書き換えたいんだけどどうやればできますか。
普通にやると,また10GB書き出さないと出来ないような。

632 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 01:10:57 ]

双方向リストに関する質問です。

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

双方向リストの先頭と末尾へ要素を追加する関数と、
先頭と末尾の要素を削除する関数を書いてみたのですが、
末尾要素を削除する関数 DelTail() が思うように動いてくれません。

free()する対象が悪いのではないかと推測していますが、
検討もつかないというのが実際のところです。

他の関数についてもツッコミいただければと思います。


633 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 01:11:06 ]
>>621
int cd[10]; として、

&cd[0] の型は int* で、
cd の型は int [10] だな。

全く同じではない。



634 名前:デフォルトの名無しさん [2007/07/04(水) 01:18:05 ]
632

www.geocities.jp/ky_webid/cpp/library/003.html

●C++編(標準ライブラリ) 第3章 list
listは双方向リストを構築したテンプレートクラスです。


635 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 01:18:07 ]
>>631
ファイルでもメモリーでもどっちでもいいが、書き換えサイズが同じなら、読んで書いて閉じればそれで終わり。
挿入や削除ならそこでちょん切ってリスト構造で繋ぎ直す。


636 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 01:43:20 ]
>>634
そのページのC編のほうのも参考にしてみたのですが、
できればグローバル変数を使わずに、
かつ、リスト操作関数の引数も、リストへのポインタだけにしたいのです。

逆に、関数内で作業用の変数が増えるのはあまりこだわりません。
もちろん、良識のある範囲で少ないほうがいいのですが。


637 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 01:44:58 ]
Add系の関数の引数はデータもあるので、
増やす方は2コ(リストと要素)、減らす方は1コ、というのが正しいですね。


638 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 01:45:03 ]
>>631
ファイルをリスト構造にする。
ところどころにダミーデータをいれておいて、そこをバッファに使う。
書き換えたい所を含んだクラスタを別のクラスタに繋ぎなおす。
別のファイルにパッチ情報として〜行目はこの内容に置き換わりました、のような情報を入れてセットで扱う。
直した所から後ろをそっくり書き直す


639 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 02:11:46 ]
fgets(hoge, 64, stdin);
みたいにしたとき、入力が64文字以上あるとどうなりますか?
63文字目までがhogeに入って後は無視されるんでしょうか?

640 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 02:14:48 ]
63文字だけ stdin から読み込む、だけ。
後は次の読み込みがあれば、その時に読み込まれる。

641 名前:639 mailto:sage [2007/07/04(水) 03:07:44 ]
では、64文字目以降の改行までを無視することはできますか?
fflush(stdin);
してしまうと、リダイレクトされてきた時に
改行以降も全て捨てられてしまうのでは?

642 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 03:16:35 ]
hoge[62] = 0;
hoge[63] = 1;
fgets(hoge, 64, stdin);
if(hoge[63] == 0 && hoge[62] != '\n') {
scanf("%*[^\n]s");
getchar();
}

643 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 08:40:22 ]
int *p,a;
p=&a;
ってやったら
*pはaと同じ(*p=a)になるんでしょ
でも@=&aとやらず*p=aはなんでダメなの?




644 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 08:43:50 ]
*p==a
p==&a

645 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 08:48:28 ]
int *p,a;
p=&a;
*p = 10;
printf("%d\n",a);
a = 20;
printf("%d\n",*p);

646 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 08:50:31 ]
pが未初期化だとどこさしてるかわからんのに
その先に値を書き込もうとするか

647 名前:デフォルトの名無しさん [2007/07/04(水) 12:10:01 ]
STL勉強してるんだけど

vector<string>とかできるの?

648 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 12:10:52 ]
スレタイ読めないの?

649 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 12:42:43 ]
試せば分かることをわざわざ聞きにくるやつに
スレタイを正しく読むのは難しいだろ

650 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 13:05:10 ]
試して出来ないから聞いてんじゃないの? 
少しは予測しろよw

651 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 13:16:20 ]
それは有り得ない話だ。

652 名前:デフォルトの名無しさん [2007/07/04(水) 13:20:44 ]
STL勉強してるんだけど

vector<vector>とかできるの?
vector<vector<int>>とか
vector<vector<vector>>
とかできるの?

653 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 13:25:34 ]
これはひどい



654 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 13:31:33 ]
スレタイくらい読め

655 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 13:58:39 ]
STLはC言語では使えん

vector<vector<int> >
vector<vector<vector<int> > >
で試せ

656 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 14:34:52 ]
つ[名前空間]
まあスレタイも読めないおばかさんは一生悩んでろ。

657 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 17:09:49 ]
switch( uMsg )

case WM_CREATE:
test1=1;
test2=2;
break;

case WM_CREATE:
{
test1=1;
test2=2;
}
break;

case WM_CREATE:
{
test1=1;
test2=2;
}
return;

case WM_CREATE:
{
test1=1;
test2=2;
return;
}


どれ使ってもOK?

658 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 17:11:06 ]
OK

659 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 17:11:26 ]
{}で囲むのは途中で変数宣言したいとき。
breakとreturnは意味が違う。

660 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 17:16:09 ]
別に変数宣言しなくても囲ってもいい

661 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 18:09:43 ]
switch、caseに関わらず、別にスコープは好きなところで使って構わない。


662 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 18:14:36 ]
関数内ならね。

663 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 18:16:27 ]
>>641
fflushは入力バッファに対してどう作用するか定められていない
(出力バッファを吐き出すことだけが規定されている)ので、
このスレとしては知らないという答えになる。



664 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 18:50:24 ]
{ }は見やすくするためにつけたけど、どこでも使ってOKなのね。
breakとreturnはよく考えるとぜんぜん意味が違う事に気づいた
なぜreturnが入ってたんだろうw

665 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 19:07:30 ]
関数と定義するとき、プロトタイプ宣言が必要って言われてますよね?
プロトタイプ宣言って必要なんですか?
なくても動くと思うのですが・・・






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

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

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