windowsでもちゅるんできますか?
またちゅるんか!
>>688 これ作ったのアニヲタじゃんw 審査員も普通にわかったりするんかな。
これでakuがsokuコンパイル&実行→sokuがzanコンパイル&実行…で無限ループに
なったらおもしろいな。
725 :
デフォルトの名無しさん:04/04/23 14:25
作ったのは多分日本人だね。
悪・即・斬!
D・V・D!
if ((p = malloc(..)) == NULL)
return;
if ((fp = fopen(..)) == NULL){
free(p);
return;
}
if (fwrite(..)) == -1){
fclose(fp);
free(p);
return;
}
エラー処理が延々と長くなっていくんだけど、なんかカコイイ!記述方法って
ない? オブジェクト指向方面でなんか解法があったと思ったけど、わからん…
if ((p = malloc(..)) == NULL) goto END;
if ((fp = fopen(..)) == NULL) goto END;
if (fwrite(..)) == -1) goto END;
END:
fclose(fp);
free(p);
return;
で、どう?カコイイくは無いと思うが。
C++でならtry...catchがあるけど、ここCスレだし。
>>729を簡略化して
#define try(val, fn) {if ((val = fn) == NULL) goto END;}
と定義してから
try(p, malloc(...))
try(fp, fopen(...))
END:
(後処理)
とか。fwriteをどうするかは聞かんでくれ。
>>728 if ((p = malloc(..)) == NULL) goto MALLOC_ERROR;
if ((fp = fopen(..)) == NULL) goto FOPEN_ERROR;
if (fwrite(..)) == -1) goto FWRITE_ERROR;
goto NULLPO;
FWRITE_ERROR:
fclose(fp);
FOPEN_ERROR:
free(p);
MALLOC_ERROR:
return;
NULLPO:
>>728 おいおい、fwrite()の戻り値を-1と比較しちゃダメじゃん。
733 :
デフォルトの名無しさん:04/04/23 23:02
UNIXのwriteの勘違いしているんだろうな。
fwriteの戻り値の型はsize_t(符号無し整数)だ。
それくらい統一しろよ・・・。
735 :
デフォルトの名無しさん:04/04/23 23:34
PASCALって何につかうんすか?
あとFARも教えて
736 :
デフォルトの名無しさん:04/04/23 23:36
737 :
デフォルトの名無しさん:04/04/23 23:56
今日始めてCを触ったんですが。
int main()
{
double kai;
double pai = 3.14;
kai = 10 * pai;
printf("%f\n");
return 0;
}
これで、31.400000というのがprintされたんですけど、
この0の数ってのはどこから来てるのかよくわかりません。
31.4と表示するにはどうすればいいのでしょうか。
738 :
デフォルトの名無しさん:04/04/24 00:15
パソコンは数字を二進数で扱っているので少数は
どうしても誤差が生じる。
int main()
{
double kai;
double pai = 3.14;
kai = 10 * pai;
printf("%.1f\n",kai); //%の後に.(ドット)ね
return 0;
}
739 :
デフォルトの名無しさん:04/04/24 00:16
>>737 ネタで言ってるだろ
小数点が必要だからって何故にdoubleなんてつかうんだ
最近まで、%E が意味不明だった者ですが、
たぶん %.1f だと思います。
ネタではないです
intやshortを使ったのですが、0.000000となるのでだめぽと思ったんです
%.1fにすると確かに出来ました。
これは小数点以下1桁を表してるんですかね
ありがとうございました
>>737 >printf("%f\n");
>これで、31.400000というのがprintされたんですけど、
嘘をつくな。
このコードでは何が表示されるか解らんはずだ。
C言語以前の問題なんですがお願いします。
LSI-C 試食版 と
C Pad 開発環境 を
ダウンロードしろと言われたのですが
LSI-C 試食版を落としてからどうすればいいのか
分かりません。どうかお願いします。
744 :
デフォルトの名無しさん:04/04/24 00:38
管制塔がどうこうという話で
初期化で疑問に思う事がでてきました。
memset(strtmp,NULL,MAX_PATH);
memset(strtmp,'\0',MAX_PATH);
NULLはゼロと解釈してますが この場合どう違うのでしょう
>>744 値としては0だが、ポインタとしての0番地を表すのに使うためにある名前なので、
NULLをそこにいれるのは単に間違い。
コンパイルは通ってしまうが。
>>744 >memset(strtmp,NULL,MAX_PATH);
NULLは多くの環境で(void*)でキャストした0が使われる。
memset()の第二引数の型はintなので本来の意味的には
>memset(strtmp,'\0',MAX_PATH);
が正しい。
# 文字定数の型はint
>>744 NULLはNullポインタであって、ゼロではないです。
748 :
デフォルトの名無しさん:04/04/24 00:47
>>745 >>746 分かり良い説明ありがとうございます。
まさにコンパイル通っているので うちのシステムにも問題があると
わかりました。流用ソースの殆どがNULLでコード書いてあるのです。
>今日始めてCを触ったんですが。
ここがネタっぽいんだよなぁ。
>>748 まあ、
#define NULL 0
なんて定義があるはずなので実際には変わらないけどね
#define ((void *)0) かもしれない。
今日始めてCを触ったんですが
符号付整数型の負の最大値を-1で割って正しい結果をだしたいのですが
どうしたらいいですか
>>753 >今日始めてCを触ったんですが
嘘だろ?
ごめんなさい
はじめてのCで早くいっちゃいました。
そういや昔「はじめてのC」って本があったな。
電車の中で読むとなぜか周りが引きます。
>>728 fp=NULL;
p=malloc(..);
if(p) fp = fopen(..);
if(fp){
fwrite(..);
fclose(fp);
}
if(p) free(p);
return;
とりあえず
1の補数表現を用いてる環境系でコンパイル
という結論に達しました
761 :
デフォルトの名無しさん:04/04/24 03:50
enumって、#defeineでやるのとちがって、
「まちがって同じ数値を定義しちゃう」ことがないっていう利点がありますよね?
で、ほかに利点ってありますか?
たとえば、その型以外の変数にその値を代入したり比較したらエラーにしてくれるとか、
逆にその型で宣言した変数にそれ以外のものを代入したらエラーにしてくれるとか
そういう機能はないのですか?
あと、たとえば、型ごとに名前空間が別だとか、そういうのがあればいいのに。
>その型以外の変数にその値を代入したり比較したらエラーにしてくれるとか、
コンパイル時に警告出力しないか?
>逆にその型で宣言した変数にそれ以外のものを代入したらエラーにしてくれるとか
コンパイル時に警告出力しないか?
763 :
デフォルトの名無しさん:04/04/24 03:59
> これで、31.400000というのがprintされたんですけど、
円周率は3だろ。
764 :
デフォルトの名無しさん:04/04/24 04:02
> 小数点が必要だからって何故にdoubleなんてつかうんだ
floatつかうやつはぼけ。
昔からのCのユーザーならかならずdouble使う。
765 :
デフォルトの名無しさん:04/04/24 04:04
> NULLはゼロと解釈してますが この場合どう違うのでしょう
ちがいますゼロがNULLなんです。
766 :
デフォルトの名無しさん:04/04/24 04:05
> 値としては0だが、ポインタとしての0番地を表すのに使うためにある名前なので、
これは大うそ
やーい > しったか
767 :
デフォルトの名無しさん:04/04/24 04:06
> NULLはNullポインタであって、ゼロではないです。
でもゼロはナルポインターです
768 :
デフォルトの名無しさん:04/04/24 04:12
>>762 VC++6.0ですが、-W3でも-W4でも出ませんよ > 警告
>>761 >たとえば、その型以外の変数にその値を代入したり比較したらエラーにしてくれるとか、
>逆にその型で宣言した変数にそれ以外のものを代入したらエラーにしてくれるとか
全く理解できない。enum型以外のenumって何だ?
要するにデータ型の問題ですか?
ポインタの0がぬるぽで
char型の配列に入ってるのはchar型の0
>>768 データ型に互換性があると、勝手にキャストするような...
* $FreeBSD: src/sys/sys/_null.h,v 1.5 2003/12/26 06:11:43 obrien Exp $
*/
#ifndef NULL
#ifdef _KERNEL
#define NULL (void *)0
#else
#if defined(__LP64__)
#define NULL 0L
#else
#define NULL 0
#endif
#endif /* _KERNEL */
#endif
winでCygwin使って書いてるんですけど、上手くいきませんのでご助言
お願いします。
状況
バイナリファイルを開こうとするとfopenに失敗する場合がある。
テキストファイルやexeファイルは上手く開けるが、JPGやMP3については
常に失敗してしまう。
なにが間違っているのでしょうか?