C言語なら俺に聞け! Part 63

このエントリーをはてなブックマークに追加
1v(^o^i)d
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。

コンパイラを探しているなら >>2-13 を。
C machineはCに非ず
上記を逸した場合の結果は激しく未定義だYO!

C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/

C言語なら俺に聞け! Part 62
http://pc2.2ch.net/test/read.cgi/tech/1058754682/
2デフォルトの名無しさん:03/08/05 21:19
【コンパイラ】
gcc
http://gcc.gnu.org/

【Win32用の開発環境のみ。】
gcc-cygwin
http://www.redhat.com/software/tools/cygwin/
gcc-mingw
http://www.mingw.org
Digital Mars C++
http://www.digitalmars.com/
Open Watcom
http://www.openwatcom.com/
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/

【ライセンスや機能などに問題あり】
Microsot C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html
>>1
お疲れ様でつ。
>>1
お疲れ〜
JISの規格書

> http://pc3.2ch.net/tech/kako/1027/10271/1027160374.html
> 漏れも規格は有料だと思ってたけど、 JISは無料で閲覧できるように
> なってるみたい。
>
> http://www.jisc.go.jp/
> ここからデータベース→JISとたどっていって規格番号を指定すれば、
> PDFで見ることができる。ちなみにC言語はJIS X3010だ。
今はJIS検索というボタンみたい。
プログラミング言語 C の新機能(C99)
http://seclan.dll.jp/c99d/c99d00.htm
宿題丸投げはこちらへ
http://pc2.2ch.net/test/read.cgi/tech/1058283913/
環境依存でもOKなスレッド
http://pc2.2ch.net/test/read.cgi/tech/1059041347/
>1
もつカレ□
11ビル・ジョブス:03/08/06 02:18
>965
char c, t;
c = (t = rand()) % 25 + (t & 1 ? 'A': 'a');
じゃダメかな?
ひどいな
これはひどい
>>11
問い1 算術+のオペランドの評価順序を述べよ。
問い2 代入式の副作用完了点を示せ。
(sin(a))^2 + (cos(a))^2 の計算をさせたいんだが
浮動小数点の不正な使用と言われてコンパイルできない
なんで?
#include<math.h>はやってるし、double a もしてるのに(´・ω・`)ショボーン
(sin(a))^2 + (cos(a))^2 の代わりに 1.0 と書くといいよ
1715:03/08/06 09:08
(sin(a))*(sin(a)) + (cos(a))*(cos(a)) にしたらできますた
^ って使えないんか?
18デフォルトの名無しさん:03/08/06 09:12
>>17
使えるまで諦めるな!
使えない奴だな
20デフォルトの名無しさん:03/08/06 09:20
>>17
それはシフト演算になっちゃうから無理なんじゃ?
うそ教えちゃいかんよ
2220:03/08/06 09:32
>>21
^ってシフト演算じゃなかったっけ?
  &    ビットごとの AND
  |     ビットごとの OR
  ^    ビットごとの XOR
  ~    ビットごとの反転(1 の補数)
  <<   左シフト
  >>   右シフト
2415:03/08/06 09:41
レスがいっぱい!みんな叱咤激励ありがとう

^= a^=b; aとbの排他的論理和をaに代入する a=a^b
^ a=b^c; bとcの各ビット毎の排他的論理和をとり、その結果をaに代入する

ということらしいですな よーわからんがw
TeX感覚でついやってしまいますた

>>11
問い3 アルファベットの文字数を答えよ。
>>15
pow(sin(a),2)+pow(cos(a),2);
これではダメぽですか??
>>11
問い4 (t = rand()) % 25 の値域を示せ。
ギリシャ語は24文字
>11
問い5 c=='b'となる確率は幾らか。
>>29
まさかとは思うが、
0
という答えを期待しているわけじゃないよね?
ああ、アルファベットだから、%26に自動補正してたよ。%25か。
>>15
どうでもいいけど、常に1.0になるの関数呼ぶのか?
このようなやり方でaをbに
コピーしようとしてるんだけどデキマヘン。
どうしたらよかですか・・?

#include<stdio.h>

void cpy(char *x,char *y); /* プロトタイプ */

int main(void)
{
char *a,b[30];
a="aiueo";
cpy(a,b); /* cpy関数呼び出し */
printf(b);
return 0;
}

void cpy(char *x,char *y)
{
while(*x++ = *y++); /* ポインタを使ってaをbにコピー */
}
釣り?
cpy(b,a)
35デフォルトの名無しさん:03/08/06 13:08
釣り?
while(*y++ = *x++);
36デフォルトの名無しさん:03/08/06 13:11
printfの第一引数は定数にするのが鉄則だよん。。。
37_:03/08/06 13:14
>>35
このように変化いたしました。

while((*x = *y)!='\0'{
x++;
y++;
}
    ↓
while((*x++ = *y++)!='\0');
    ↓
while(*x++ = *y++);
3938:03/08/06 13:32
一番上のかっこが抜けました。

while((*x = *y)!='0'){
x++;
y++;
}
40デフォルトの名無しさん:03/08/06 13:33
>>38-39
コピーする方向が違うっていってんだよ
4138:03/08/06 13:35
あ、ほんとだ・・。。
失敬いたしますたああああぁぁ、消。
4238:03/08/06 13:36
うを!出来た・・。
ありがとんございましたm_m
38がどう直したかわからないが、
ほぼ同じことをする関数
char *strcpy(char *destination, const char *source);
と、引数の順序をあわせておいたほうがいいよ。
4438:03/08/06 14:20
>>43
>>33の下から2行目の
while(*x++ = *y++); を
while(*y++ = *x++); という風にしただけでごんす。

&情報ありがとんです。
45デフォルトの名無しさん:03/08/06 14:28
/* Practice3.c */
#include <stdio.h>

int main(void)
{
int a;

a = 90;

printf("%dmin = %dh%dm\n", a, (a\60), (a%60));

return 0;
}

90min = 1h30mって表示したいんですができません
どうしたらいいか教えてください
46_:03/08/06 14:31
47デフォルトの名無しさん:03/08/06 14:32
>>45
> (a\60)

なによこれ
48デフォルトの名無しさん:03/08/06 14:34
>>47 (a\60)本に書いてありました。
   (a\60)←なんなんですか?
a/60=1
>>48
一部のbasicの整数除算記号と勘違いしているのでは?

この場合は単純に a / 60 でOK。
キーボードで、スラッシュとバックスラッシュを打ち間違えたと見た。(・A・)
52デフォルトの名無しさん:03/08/06 14:40
>>50 のやりかたでできた! 協力してくれたしと
ありがとう!
                                               /|_
     ┏━━━━━━━━━━━━━━━━━━━━━━━━━┓ / __/
     ┃    ∧ ∧___    今 日 は                   ┃( ( ̄
     ┃   /(*゚ー゚)♪/\                          ┃/)
 ∧ ∧  ∫ /| ̄∪∪ ̄|\/  こ こ ま で 学習し ま し た  C<ニン
 (.  *゚)━*  .|        |./                           ┃  ∧∧   ∧∧
 /   ! ┃    ̄ ̄ ̄ ̄                    2ちゃんねる ┃ (,,゚ー゚)  (゚ー゚*)
,,(_,,ノ ┗━━━━━━━━━━━━━━━━━━━━━━━━━┛〜(_,,ノ  .(_,,)〜
54C初心者:03/08/06 17:40
system("dir");
等で画面に表示された文字をファイルに書きこんだりchar型配列にコピーするには如何すれば良いんでしょうか?
>>54
環境によっては
popen()/pclose()、_popen()/_pclose()
が使えるかもしれない。
それ以上はスレ違いなので自分で調べられたし。
system("dir > filename.txt");としてから
filename.txtを開く
57デフォルトの名無しさん:03/08/06 18:28
                                              /|_
     ┏━━━━━━━━━━━━━━━━━━━━━━━━━┓ / __/
     ┃    ∧ ∧___    今 日 は                   ┃( ( ̄
     ┃   /(*゚ー゚)♪/\                          ┃/)
 ∧ ∧  ∫ /| ̄∪∪ ̄|\/  こ こ ま で 学習し ま し た  C<ニン
 (.  *゚)━*  .|        |./                           ┃  ∧∧   ∧∧
 /   ! ┃    ̄ ̄ ̄ ̄                    2ちゃんねる ┃ (,,゚ー゚)  (゚ー゚*)
,,(_,,ノ ┗━━━━━━━━━━━━━━━━━━━━━━━━━┛〜(_,,ノ  .(_,,)〜
5815:03/08/06 18:38
遅れてスマソ レスありがと
徹夜でやってたから寝ちまった...

>>26
(σ´∀`)σソレダ!!
関数で累乗の計算するんだね

>>32
昔書いたbasicのソースを移植させて勉強してる状況なんで
試しにやってるんです

ここの住人は優しいジェントルマンばかりですね
59デフォルトの名無しさん:03/08/06 22:57
ボタンをクリックすると名前解決を行うプログラムで
最初だけ名前解決に失敗して2回目からはちゃんと
成功するのですが なじぇ?(゚▽゚;

struct hostent *hoste = gethostbyname("w3.monar.net");

if(hoste == NULL){
Memo1->Lines->Add("ほすと名の解決失敗(゚▽゚;");
}
60デフォルトの名無しさん:03/08/06 23:00
>>59
ここで聞くのはなじぇ?(゚▽゚;
61デフォルトの名無しさん:03/08/06 23:05
>>60
ここはどこ?(゚▽゚;

そしてどこへ行けばいい?(゚▽゚;
62デフォルトの名無しさん:03/08/06 23:07
前スレ埋め立て完了。1000ゲット
>>63
(・∀・)イイ!!戦いだった・・次は勝つ
MinGWスレでも質問しているのですが
はやっていなさそうなのでここにも質問させてください。

MinGW-2.0.0-3の全ソースをダウンロードしたいのですが、
どこにありますか?
66 :03/08/07 10:25
>>63
おめでとう
>>64
健闘を祈る
>>65
開発元へメール
6765:03/08/07 10:46
誰かまじめに答えてください。
http://www.mingw.org/download.shtml
にきまってるだろ。
69デフォルトの名無しさん:03/08/07 12:56
strcpy(a,"%d",i);
みたいなことをやりたいんですけど
どうしたらいいですか?
70デフォルトの名無しさん:03/08/07 13:01
sprintf
71デフォルトの名無しさん:03/08/07 13:07
>>70
できました
ありがとうございました
7265:03/08/07 15:08
>>68
すいませんがどのファイルでしょうか?
73デフォルトの名無しさん:03/08/07 15:22
42bitのデータ(4兆くらい)を
扱いたいのですが
sizeof(long)が4でした
どうしたらいいでしょうか?
・2つセットでつかう。
・sizeofが8を返す型をみつける
アセンブラを使わないC++による多倍長計算 嫁。

もしくは、多倍長で検索してみれ。

>72
Currentでsrcとあるもの全部。
7765:03/08/07 16:33
>>76
その中にあるgccはWindows用ですか?
>>77
いい加減にスレ違いな粘着はやめろ。
7965:03/08/07 16:58
>>78
ほんとにまじめなんです。

CurrentにあるgccのsrcがあるのですがWindows用のコンパイルでも通りますか?
これが最後の質問ですから誰か答えてください。
Windows2000におけるgcc-3.2.3のコンパイル方法
http://homepage1.nifty.com/kuuku/gcc-sjis/howtobuild.html
> 898 :デフォルトの名無しさん :03/08/04 20:50
> MinGWのソースってダウンロードできるの?
double型でわからないところがあります。

double d1;
d1 = 5 / 2;
printf ("d1 = %f", d1)

これを実行するとd1が2.500000ではなく2.000000となるのは、
5にも2にも小数点とゼロが付いていないからそのまま処理された
ということでよいのでしょうか?
>>82
いいけど、整数同士で計算するからと理解した方がよい。
8482:03/08/07 18:58
>>83
わかりました。
ありがとうございます。
以下はレコードの削除をするコードなんですが、
どうしても理解出来ないため、どなたかご教授願います。
(某Cの参考書に載っているものです)

fseek(fp, RECSIZE * (delNo + 1), SEEK_SET);

while (fread(&rec, RECSIZE, 1, fp) == 1) {
   fseek(fp, -2 * RECSIZE, SEEK_CUR);
   fwrite(&rec, RECSIZE, 1, fp);
}

RECSIZEは読み書きする構造体のバイト数で、
recは構造体。delNoは、削除するレコードの数え番号です。
これで正しく該当レコードを削除出来ますか?
(削除レコードから後を1つ前の位置にずらして書き込んでいく方法だそうです)
ex)delNo==1
fseek(delNo+1)  1)AB[C]DE
while(fread(1))   2)ABC[D]E rec==C
fseek(-2)      3)A[B]CDE
fwrite(1)      4)AC[C]DE
while(fread(1))   5)ACC[D]E rec==C
fseek(-2)      6)A[C]CDE
fwrite(1)      →4へ戻る
>>86
おお、ありがとうございます!
矢張り”一応”該当箇所の削除は出来るものの、挙動がおかしいですね…。

正誤表も無く、困っていました。
重ね重ねありがとうございました。
88デフォルトの名無しさん:03/08/08 00:20
>>87
> 削除レコードから後を1つ前の位置にずらして書き込んでいく

ということはひとつのレコードを消した場合はファイルサイズはRECSIZE分小さくなると考えていいのか?
>>88
すいません。よく分かりません…。
ただ、本当に正しい挙動をする「レコードを削除するコード」であれば、
ファイルサイズはRECSIZE分小さくならなければおかしいですよね。

↑のコードだと、仮にループに陥らなかったとしても、
ファイルサイズはRECSIZE分小さくならないと思います。
それは、一番最後のレコードを読み込むだけで放置することになるからだと思うんですが…。
(的外れなことを書いていたらすみません…)

ちなみに、この某Cの参考書というのは、
「C言語 文字列操作+ファイル入出力 完全制覇」です。(一応)
>>89
うん。なるはずない。
必要なものだけ読みとって改めて"w"でfopenしたファイルに書き込むか、>>85のあとになんらかの方法で切り詰め(例えばUNIXならtruncate)ないとね。
9185 = 87 = 89:03/08/08 01:07
>>90
なるほど!とても参考になります。
ありがとうございました。
92デフォルトの名無しさん:03/08/08 07:30
プログラムの勉強を始めようと思っているのですが
CとC++どっちから始めようか悩んでまつ・・・。
どっちから始めたほうがよいですかね?
先ずは日本語の勉強をしろ。
94デフォルトの名無しさん:03/08/08 08:43
悪質な業者にご注意下さい!!
9673:03/08/08 10:25
>>74
2つセットで使った後
表示を10進数にするための方法がわかりません
>>75
多倍長で検索してみました
出てきたものは大体入力の時点でBCD等に変換して
数値を扱ってます
すでにあるデータは42bitで
表示のみ10進にしたいのですがどうすればよいでしょうか?
97デフォルトの名無しさん:03/08/08 10:38
42bit以上の型くらいありそうだけど。
C99に準拠していればlong long intが使えるし。
98デフォルトの名無しさん:03/08/08 10:49
>>97
double型は8バイトありましたが
double da=1;
da=da<<1;
とかやると
エラー E2060 test.c 6: 浮動小数点の不正な使用(関数 main )
long long int ia;
とかやると
エラー E2176 test.c 5: 宣言に型が多すぎる(関数 main )
ってでますBCC5.51です
65536*(上位桁)+(下位16bit)
>>98
double は整数ではないからシフト演算子は使えない。
long long int は必ずしも使えるとは限らない。
long int 2つを使って42bit整数を表すには、
下位32と上位10などビットで分ける方法のほかに、
10^8などで割った商と余りに分ける方法もある。
シフト演算などのビット演算をしたいなら前者の方が楽だが、
表示するのは後者の方がずっと楽。

私の同僚が実装した他倍長クラスは、両方のタイプを
交換して使えるようになっていたがそこまでは必要ないだろう。
101デフォルトの名無しさん:03/08/08 11:25
>>100
上位10bitのそれぞれに10^8で分けたlongを持っておいて
(あらかじめ計算済みのlong配列を20持っておいて)
bitがたつごとに足し合わせて表示するってことでしょうか?
>>98
具体的に何がしたいんだ?
>>73を見る限りでは double 使えばいいように感じるが
103デフォルトの名無しさん:03/08/08 11:33
>>102
すでにある42bit(連続でない)のデータを10進表示したいのです
その、既にある42ビットのデータとやらはどうやって保持してるんだ?
もしかしたら、printf("%15f", doubleValue);ってだけの話か?
>>103
全然具体的になってないんだが…
107デフォルトの名無しさん:03/08/08 12:15
>>104
33+9です
なんでとかは聞かないでください
僕が決めたんじゃないんで
多倍長 でぐぐったら一発でこんなの出てきたんだけどさ・・・
http://www5.airnet.ne.jp/tomy/cpro/longint.htm

少しはググ(ry
109デフォルトの名無しさん:03/08/08 17:26
リンク先のプログラムを提出したら先生に
2分木を作成後に,任意の節(idを指定)のデータを木を根から
辿りながら見つけて出力できるようにしなさいって言われた。
どこをどうしたらいい?
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=131
>>109
スレ違い。宿題スレへどうぞ。
111109:03/08/08 17:39
すみません。
マズワ日本語ノ勉強ヲシレクラサイ
デカクルトキワワシュレズニ
   ∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (* ゚Д゚)< #include <hosh.h>
〜( UUノ  \__________
114デフォルトの名無しさん:03/08/09 13:29
__cdeclを関数の前につけると、C の名前付け規約が適用されるということでよろしいですか?
よろしくありません
>>114
>__cdeclを関数の前につけると、C の名前
何か勘違いしてると思われ。
関数呼び出し規約はC本来のやり方でやれと明示することになるけども、
名前付け規約はちっとも関係ないよね

C型呼び出し規約
・パラメータは後ろ(右のもの)から順番にスタックに積まれる
・パラメータの後片付けは呼び出し側が行う

Cなんだからこんなの明示する必要ねえじゃんて思うかもしらんが、
たとえばwindowsのAPIはいわゆるPascal型の呼び出し規約だからね。
明示できたほうがよいのだ。

Pascal型呼び出し規約
・パラメータは前(左のもの)から順番にスタックに積まれる
・パラメータの後片付けは呼ばれた側が行う

x86は関数からのリターン(スタックに積まれたアドレスへジャンプ)と
スタックポインタ(SPレジスタ)の調整(パラメータの後片付け)が
一命令でできるからPascal型の呼び出し規約のほうが少し速かったりする。
windows APIがPascal型規約なのはこのあたりで少しでも性能を稼ごうとした
からじゃないかなと考えてる。

その代わり呼ばれた側がパラメータの数などについて完全に把握できなければならないので、
たとえばprintfなどのパラメータが不定な関数が実現できなくなる。
118デフォルトの名無しさん:03/08/09 16:45
>>117
>たとえばwindowsのAPIはいわゆるPascal型の呼び出し規約だからね。
今更Win16の話されてもこまるんだけどな・・・。
119デフォルトの名無しさん:03/08/09 16:47
>>117
>たとえばprintfなどのパラメータが不定な関数が実現できなくなる。

wsprintf (windows.h)
http://www.microsoft.com/JAPAN/developer/library/jpuipf/_win32_wsprintf.htm
120デフォルトの名無しさん:03/08/09 16:47
小・中学生の盗撮画像やマンコがいっぱい!!グチョグチョだよ♪
詳しくはこちら→http://e-rebirth.com/af/in.cgi?id=30
>>118
ああ、すまなかった__cdeclの存在価値を示すために古いの出しちまったw
122デフォルトの名無しさん:03/08/09 16:55
threchigai
123デフォルトの名無しさん:03/08/09 17:06
関数へのポインタは
int (*func)()
ポインタを返す関数は
int *func()
と表すけど、
ポインタを返す関数へのポインタはどうやって書くのでしょうか?
124デフォルトの名無しさん:03/08/09 17:07
int *(*p)(double,char *);
その二つを合成すれば得られるだろ
126デフォルトの名無しさん:03/08/09 17:08
>>125
名回答
全角と半角を区別したいんですけど分かりません
教えてください
>>127
Vecterってどうですか?
http://pc2.2ch.net/test/read.cgi/software/1026283187

このスレに詳しい奴がいるぞ。
ttp://www.catnet.ne.jp/kouno/c_faq/c13.html#16
上記に
 rand() % N
よりも
 (int)((double)rand() / ((double)RAND_MAX + 1) * N)
の方がよりよい方法とあるが間違いではないのか?
以上終了。
そうですね。
 rand() % N
には致命的な欠陥があるが、終了しているようなので書くのは控えよう。
RAND_MAX>>N のときは致命的でもなくは無くない?
>>131
Nが0だとまずいとか?
>>132
そのほうが致命的。

とにかく、>>129のURL先を読もうよ。答が書いてあるよ。
「致命的」とは大げさな。
そんなことは自分で検定して用途に応じて判断すればいい
136デフォルトの名無しさん:03/08/10 09:44
全然致命的じゃねぇよ。

rand()%Nで十分。
rand()%Nの乱数性に不満があるような奴がrand()使ってるとも思えん。
137_:03/08/10 09:51
rand() % N
の方が有利な面もあるのに、一律ダメだと言う表現がいかんのではと。
 ・速度
 ・(rand() % N) == N/2  ←この判定方法は簡単で便利
10で割った余りが5かどうかって
0かどうかでも確率的には同じだな
>139
違いますよ。
141140:03/08/10 11:13
>139
ごめん10の場合は同じか・・・ RAMD_MAXによるけど。
>135
つまり、randは下位bitがあまりランダムではない、ということ?
そんなの実装依存の話だろ。(VCは32bitの線形合同法で手に入れた
値を>>16して返している)
129は当然読んだ。提示されたURLを受けて、なお「致命的」と
言い張るからには、てっきり別の話だと思ったんだが。
たとえば、randの返す範囲が(0,1,2)のとき、%2とすると、
出現確率が、0:66%、1:33%になる、とか。
>143
(int)((double)rand() / ((double)RAND_MAX + 1) * N)
でも同じこと。
実装依存に変わりないがNが大きけりゃ乱数の周期がもろにでてきて、rand()自体が役に立たないと思う。
処理速度重視の字句解析プログラムを作成したいのですが、
regexとflex、どちらの方が良いのでしょうか?
C言語を今から始めようと思う初心者なんだがまず何すればいい?
GCCとかいうのDLしてみたんだが解凍中にエラーが出る。

いきなり挫折の予感。
全角英数をやめる
>>147
既に挫折している予感。
150147:03/08/10 13:03
あの拡張子はなんなんだ人をおちょくってるとしか思えん拡張子の分際で
なにがtar.gzだおめでてーな。

+Lhacaに放り込んだら解凍処理じゃなくて圧縮処理が始まったよ(´A`)
>>150
Lhaplas使おうぜ。綴り間違えてるかな?
落としたGCCはソースで、鶏と卵の関係に悩む予感。
つかcygwinとかも入れてるんだろうな?
>>152
gccはアセンブラとlexでどうにかなるんじゃなかったっけか?
155147:03/08/10 13:42
ラプラスで解凍は出来た。順調だな。
cygwinは説明読んでみたがわけわからん。
ウィンドウズで使えるようにする為の物らしいが、
UNIXとかAPIとか書かれてもわけわからんな。

つーか解凍したフォルダの何処見てもexeファイルが無いんだが
どれクリックすりゃ動くんだ糞がどこか分かり難い所に隠されてるのか。
cygwinってのを使わないと使えないのか。どうなんだ。そうなのか。
ザコイ
>>156
最近の中学校ではそんな言葉が流行ってんのか。
(゚Д゚)ハァ?
>>158
うん?もしかして高校生だったか?そらすまんかった。
変なおやじ。
ざこいなんて初めて聞いた
ザコい

〔ざこ(雑魚)の形容詞化〕
(形)
主に若者語で,弱い。弱々しい。取るに足らない。ざこいとも。「―・いヤツだ」
やるな。goo。
>>163
IMIDASの男子高生用語コーナーじゃん。
そういうコーナー読むのって、やっぱおやじ?
なるほど
ってゆーかもう10年以上前から使ってるぞ
>>167
暴走族かなんかで?

つぅか10年も使うなよ・・・。
>>168
いや、小学校とかで、普通に
>>169
16〜22歳か。
いい具合にスレ違いだな
いい具合に濡れてるな
173厨房:03/08/10 15:17
linux,gccで自作プログラムをコンパイル→実行したら、
停止してしまいます。
ctrl + alt + delete で、システム自体の停止はできるんですが、
プログラムだけを停止する方法がわかりません。

どうしたらいいか教えて下さい?
C言語って、何故Cなんでしょうか?
Algol...>B..>Cって事なんでしょうか?
一つヨロシコ。
175デフォルトの名無しさん:03/08/10 15:18
>>173
実行したら停止するんでしょ?
>>174
B>BCPL>C>Delphi

だったと思われ。
177デフォルトの名無しさん:03/08/10 15:20
>>176
BCPL>B>C>Delphiだろ
>>173
キーボードのCtrl-Z を押す
179147:03/08/10 15:23
俺のC言語ライフはここまでなのか?
180厨房:03/08/10 15:24
>>175
実行すると、プログラムが停止します。
ctrl + deleteで、シェルに戻るとか
そういうの無いんでしょうか?
181厨房:03/08/10 15:25
>>178
ありがとうございます。
>>180
その前に無限ループつぶせ。
>>176,177
レスサンクス。
BCPLって初耳、検索して期末。
ってCの次はDelphiすか
当然、D言語来るだろって思ってた。
混じれすするとC++・・・
gccって総合開発環境なの?コンパイラだけ?
Borlandの方が楽なのかな。
>>150
拡張子とは何か勉強してきた方がいいな
187デフォルトの名無しさん:03/08/10 15:45
これくしょん
188_:03/08/10 15:47
>>186
unixでは拡張子なんて飾りですよ。
>>189
偉い人にはそれがわからんのです
部分的にはC++ですが許してください。
//URLデコーディング
string CQuery::decode(const string &s)
{
string t;
for(string::const_iterator p = s.begin(); p != s.end(); ++p){
if (*p == '%') {
if(++p == s.end()) break;
int d = *p;
if(++p == s.end()) break;
int e = *p;
d = (d >= 'A') ? (d & 0xdf) - 'A' + 10 : d - '0';
e = (e >= 'A') ? (e & 0xdf) - 'A' + 10 : e - '0';
if (0 <= d && d < 16 && 0 <= e && e < 16)
t += char(16 * d + e);
} else if(*p == '+'){
t += ' ';
} else{
t += *p;
}
}

return t;
}

というコードがありますが、
d = (d >= 'A') ? (d & 0xdf) - 'A' + 10 : d - '0';
の中の
(d & 0xdf) - 'A' + 10
が何をやっているのかわかりません。どういうことなんでしょうか。
>>191
dって言う変数と11011111のAND取って・・・何がしたいんだろう?
16進文字を整数に直してるんでしょ。
0xDFと&を取れば小文字を大文字に出来る。
>>193
へぇ、アイデアマンですな。
195191:03/08/10 16:08
>>193
なるほど。そういうことだったんですか。
これは文字コードに無関係なんですか?
>>195
もちろんASCIIコードオンリーかと。
>>195
ASCII限定。
このコードはURLだから無問題。
>>193
アルファベットの大文字小文字の間に記号がマッピングされてるのは、
この演算を想定しての事なんですか?


疑問が氷解しました。
>>198
その通りです。
200191:03/08/10 16:21
>>195
なるほど。
プログラムが動作しているOSがWindowsかUnixかで処理を分けたいんですが、何かいい方法はありますでしょうか
扱う文字セットがASCII限定なら、
'%'、'A'、'0'も0x25、0x41、0x30にしておかないといけないのでは?
204201:03/08/10 17:14
>>203
レスがつかなくなるので変なところと結び付けないでほすぃ
ふつうは、#ifdefとか使うけど。
206201:03/08/10 17:20
>>205
#ifdefをどのように使うんでしょうか。もう少し具体的に教えてもらえると嬉しい
>>201
死ねクソマルチ。
同じバイナリで、WINDOWS,UNIX両方で動かしたい、という奇天烈な質問ではなかろう。
Win32のexeを作れるコンパイラは、WINDOWSとか、WIN32とかがdefineされているといえる。
#ifdef WINDOWS
LockFileEx(...);
#else /*面倒だから、Win以外はUNIXと仮定する。本気になったら、autoconfとか使う(w*/
flock(...);
#endif
と処理を分ければよろしい。
>>208
cygwin使えば出来ないことも。
210201:03/08/10 17:38
やっぱりマルチっていわれたλ........
>>208
WINDOWSかWIN32で判定すればいいんですね。っていうかファイルのロック処理じゃなくてディレクトリの処理なんですが・・・まぁ、なんというか。

>>209
cygwinでコンパイルすればってことですか?cygwin使ったことがないのでよくわかりませんが。
>っていうかファイルのロック処理じゃなくてディレクトリの処理なんですが
ならはじめからそう書けよ。
212201:03/08/10 17:55
>>211
あわわ、ごめんなさい。

今ふと思いつきましたが208さんは「マルチかよ。まぁしかたないから答えてやるか」とか思ってたんでしょうか。なんて心の広い方だ。ありがとうございます。
>>208
> Win32のexeを作れるコンパイラは、WINDOWSとか、WIN32とかがdefineされているといえる。
_WIN32ってのが多い。
214デフォルトの名無しさん:03/08/10 22:17
関数のプロトタイプ宣言は例えば
int foo(int, int, double); (関数名は例です)
のように書けと参考書に(明解 C言語入門, 柴田望洋)書いてあるのですが、
/usr/include/*.hなどを除くと
int foo(int mode, int level, double score);
のように引数の変数名も書いてあります.でgcc 3.2ではどちらも通ります.
どちらがよりよい書き方だとされているのでしょうか?
どっちでもいい。
うまい引数名を使えばそれだけ分かりやすくはなるから、
外部に公開するようなものなら付けた方がいいと思うけど。
216214:03/08/10 22:38
>>215 ありがとう!
とりあえず付ける流儀で行きたいと思います.
少し調べてみたらOSのinclude/の下の.hはほとんど引数名が
書いてあった.tcp wrapperは引数の型名だけだった.
両方使われているようです.
原則として、引数の名前も書いておく方がわかりやすくていいのだが、
ごくまれに困ることがある。

たとえば
#define score 20
と定義したあとで、
int foo(int mode, int level, double score);
が書かれたファイルをincludeするとコンパイルエラーになる。
218C初心者:03/08/10 22:46
基本的な使い方が解ったあとは何をすれば良いのでしょうか?
>>218
なんでも自分の好きなもの作りなさい
作りたいものが無いならプログラムやめなさい
220214:03/08/10 23:01
>>217 なるほど... 引数名をつけるにしてもかぶらない
名前を付けるようにせよ、ということですね.
ところでこれもヘッダファイルの書き方の"流儀"の問題
なのですが、stdio.hを2回defineしないようにする時などの
#ifndef FOO
#include <stdio.h>
#define FOO
#endif /* FOO */
でFOOの命名規則に何かデファクトスタンダードはあるので
しょうか.例えばstdio.h -> _STDIO_H (大文字にして.を_に、
先頭に_をつける)とか.
221デフォルトの名無しさん:03/08/10 23:15
>>220
1 グローバル スコープを持ち、_で始まる名前
2 _で始まり、その次が大文字の名前
3 __で始まる名前(C), __を含む名前(C++)
は処理系のために予約されてる。
222214, 210:03/08/10 23:35
>>221 なるほど、こんな規則あったのか. ありがとう.
INCLUDED_STDIOとか色々やってるみたいですね.
_を付けるって言うのは真似しちゃいけないということですね.
適当に命名規則を付けることにします.GNUとかで推奨
規則ないのなかなあ.
223デフォルトの名無しさん:03/08/10 23:40
>>222
「先頭に」だぞ?
224214, 210, 222:03/08/10 23:53
>>223 分かってます.書き忘れました.
_を先頭に付けるって言うのは規則上真似しちゃいけないということ
ですね.その他の部分では「きっとGCCとか書いている人はCの超上級
者」->「その人たちのCの書き方を真似る」ということでOKですよね?
>>224
コーディングスタイルで調べてみれ。
gccの書き方が最良って訳でもない。
>>224
インクルードファイルのリエントラント防止が目的なら、
インクルードファイルの名前を利用するのがよい。

たとえば、foo.hならこんな感じ。
#ifndef FOO_H
#define FOO_H
/* 諸々の宣言 */
#endif

>>217
一般的に、そういう名前をdefineするのがよくない、というのが妥当な回答。
定数は大文字にすることで、一般的な引き数とは被らなくなる。
>>226
妥当というか問題を先送りしただけのような気もする。
整定数はenumにしようぜ。
ところで
> インクルードファイルのリエントラント
これ普通に使う言い方?
enum { mon, tue, wed, thu, fri, sat, sun };
昔これがコンパイルエラーになる環境があったな。
>>228
この#ifndefの使い方は、インクルードガードなどと呼ばれてる。
>>228
インクルードファイルの再入可能性

違和感ないけど。
232デフォルトの名無しさん:03/08/11 11:41
関数の作り方について質問したいんですけど
いろんなサイト回ったり本みたりしてるんですが
わからないんで、ちょっとお願いします。
構文的にはこうじゃないですか

戻り値 関数の名前(引数)

ここのところの戻り値ってどうやって決めるんですか?
int,void,charなどなどたくさんありますけど、どんな基準で決めるんですか?
引数のところは大体わかってきたんですけど・・・戻り値が・・

それとたまに関数作って最後の return のところで
return -1; や、以前に定義してあったとして return y;
などありますがどうしてこうなるかがわからなくて・・・
自分的には正常に終了するときの return 0; しかわからないので
なにかとCの初心者なのでお願いします。
整数nに1足して返す関数なら戻り値も整数だろ
int add1(int n){return n+1;}
返り値が-1の場合
int abc(int a){
if (a==1) return 0;
return -1;}

aが1なら返り値は0、それ以外は-1を返り値とするとき
!abc(2) は0 !abc(1)は非0になるのでif文に通すのに利用できる

void 型というのは返り値がないのでいいと思う(不勉強ですみません)
こんな使い方もできる(と思う)。if,whileループで本当に通過したかのチェックに

void omoemana(int i){/*今回 int iは無関係*/
printf("ここを通過しますた\n");}
とか、元々関数の返り値は1つの値なのでポインタなど計算に対して
正常に処理されたかどうでもイイ場合もvoidとすることも可能(おすすめはしない)。

もし、おかしなところがあればツッコミ希望
>>232
標準ライブラリの関数がどのようになっているか
見ていってみたら?
>>234
> !abc(2) は0 !abc(1)は非0になるのでif文に通すのに利用できる
!0の結果は1
>>236
!0 = 0xFF

とか言ってみる。
>>237
なんでよ。
>>237
右辺値への代入は出来ません。
C 言語でスペースを含んだ文字列の扱いで、便利な関数ってありますか?
ファイルから
word1 word2before\ word2after word3
みたいな行を読み込んで、
"word1" と "word2before\ word2after" と "word3" の
3つに分けたいのです。

読み込むファイルのほうでは、スペースを含む単語は \ を使って書いてあります。
また、行ごとに単語数が変わります。
fscanf で %s で読み込んで、strlen と strcmp 使って、最後が \ だったら、
strcat で次の単語とつなげるって方法と、
fgetc で一文字ずつ読み込んで \ と スペース で判定する方法は思い浮かんだのですが、
どちらも効率が悪いような気がして。
なにか便利な関数があったら教えてください。
241デフォルトの名無しさん:03/08/11 17:43
>>240
strtok
242240:03/08/11 17:46
>>241
レスありがとうございました。
調べて使ってみます。
243あぼーん:あぼーん
あぼーん
>>241
確か状態を保持するから再入不可能じゃなかったっけ?その関数。
>>244
そだよ。
スレッドで使うときは注意。
246232:03/08/11 19:13
>>233>>239
の人レスありがとうございます。
今から試してみます
247デフォルトの名無しさん:03/08/11 19:57
先生

コンテキストって何ですか?
248デフォルトの名無しさん:03/08/11 19:59
>>247
文脈
249220, 222, 224:03/08/11 20:02
Thanks >>225, >>226, >>230
INCLUDED_とかつけるのは面倒なので、
"ヘッダファイル名を大文字にして.を_にする"でいこうと思います。
http://www.02.246.ne.jp/~torutk/cxx/file/includeguard.html
この辺を見ました。
他にも世の中にはINCLUDED_大文字, 大文字_INCLUDED, INC_大文字, USE_大文字
とかいろいろあるみたいです。
250デフォルトの名無しさん:03/08/11 21:57
1000/4
「俺が処理系だ」と十回唱えれば先頭に_を使ってもよい
gccとcygwinのDLとインストールはしたのですが、
ここから何をすれば良いのでしょうか?
メモ帳とかでソース書いて.cにしてコンパイルして.exeにする(?)と書いてあったのですが、
コンパイルってどうやるんですか?
cygwinを起動して出てくるウィンドウで何かを入力するのでしょうか?

以前はHSPを使っていたので、あの使いやすさに慣れたせいか
C言語を前に早くも苦戦中です。
どなたか詳しく教えてください。おねがいします。
移植性を考えなくてよいなら、識別子をアンダースコアで初めてもよい。
コンパイラのバージョンが上がってコンパイルできなくなっても泣かない。
>252
gcc ファイル名
>252
初心者なら MinGW の方がいいかもね。
インクルードガードのdefineはランダムな文字列を含ませるのが鉄則、でもない
>>232 戻り値 hoge(int x){x=x+100; return x;} って関数があったとする。

実際に関数を使うときには、hoge(a) とか書く。
a=1 だとして hoge(a) だと、a+100=1+100=101 だから、
hoge(a) って文字は、101 って文字に置き換えられる。

int b; b=hoge(a)+100; ってあったら、b=101+100; になる。
この場合 hoge(a) は 整数として扱うべき値だから、
int hoge(int x){x=x+100; return x;} って宣言しておく。

もし hoge が char hoge(...){.....} で宣言されてたら、
b=hoge(a)+100; は、 b= ひゃくいち + 100; みたいになって計算できない。

逆に、fprintf(stdout,"%c\n",hoge(a)); って使おうとしてるとする。
ここでは、hoge(a) は %c で指定してあるから、文字じゃないとだめ。
hoge(...){....}が char じゃなくて int で宣言してあったりすると、おかしくなる。

そんな感じで、その関数を使う場所に応じた戻り値の型で宣言する。
よく int main(){ ..... retunr 0;} ってなってるのは、
アプリが、正常に終了したら 0 、異常終了したら 1 やそれ以外の値(エラーコード)を返せみたいな
OS(?) のルールとかがあるから、実行した結果が 0 になるように return 0; ってなってることが多い。
                  まちがってたら、突っ込みよろしく。
>>257
> hoge(a) って文字は、101 って文字に置き換えられる。
釣?
>>258
インライン関数のことを言いたいんじゃないかな(なわけねえ)
>>258
Yeah.
>>252
コマンドとかがわからないなら、
cygwin のアイコンで起動して、出てきたウィンドウ(bash) で
mkdir C
cd C
start .
って入力。たぶん、エクスプローラーかなにかが C ってフォルダー開いてくれるから、
そこに、 hogehoge.c ってのをメモ帳とかそのほかのエディターで作る。
つくったら、cygwin の bash で、gcc hogehoge.c ってやる。
bash で ./a.exe で実行。
exit で cygwin の bash を終了。
次回からは、同じフォルダーに hoge2.c とか作って、
bash 起動して、 cd C やったあとで、 gcc hoge2.c とかやる。

とりあえず、mkdir と cd くらいの基本的なコマンドの意味を知りましょう。
で、それから gcc -o hoge.exe hoge.c とか gcc の使いかたも調べましょう。
>>261
UNIXの部屋と言うページにコマンド(?)の一覧が載っていて、
そこを見て大体のコマンドの意味は分かりました。

しかし、言われた通りにcd CとやってみたらPC名などの横に/Cと出てきたのですが、
次にmkdir Cと入れるとcannot create directory `C':File exists
次にstart .と入れても「command not found」
といわれてしまい何もおきません。

何かやり方が間違っているのでしょうか?
使っているPCはXPでgcc-3.3.1です。
gccの-c-g-O-oなどは、cygwinを起動して出てくるウィンドウで入力すれば良いんでしょうか?
その際にgccの置かれているフォルダの設定などは必要ですか?
hogehoge.cと同じフォルダに置いておくのかな。

C言語の講座ページはいくつか読みましたが、
一番の基礎から解説してくれてるページはなかなか無いですね。
基本的な構造や役割からしていまいち分かってない感じです・・
使って見たら理解できると思うのですが。
早く夏休み終わらないかなあ。
265232:03/08/12 11:02
>>257
ありがとうございました。よくわかりました!
intとかの戻り値の選択のしかたはわかりました。でも、
返り値のいらない void は引数のところは何でもいいんですか?

またまた質問ですみません。
>>262
>何かやり方が間違っているのでしょうか?
ここで訊く事が間違っている、という事に
一刻も早く気付くべし。
ここってC言語の質問スレじゃないんですか?
268デフォルトの名無しさん:03/08/12 12:06
     ///////
    ///////____________
    ///////  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| ̄ ̄
   ///////              (~) チリンチリン
   ///////              ノ,,
  ///////     ∧_∧         / ̄ ̄ ̄ ̄ ̄ ̄
  ///////     ( ´∀`)( 厨 ) )) <  夏だなあ〜
 ///////      (つ へへ つ      \______
///////   //△ ヽλ  ) ) 旦
//////  l ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄l
/////    ̄| .| ̄ ̄ ̄ ̄ ̄ ̄ ̄| .| ̄
////     ^^^          ^^^

         2chの夏。厨房の夏。
>大体のコマンドの意味は分かりました。
わかってねーし(藁
cygwinの画面でpwdと打つとパスが出てくると思う。
そのパスはcygwin.batがあるパスの中にあると思う。
("****\cygwin\home\***"こんな感じ)
そのパスに ”***.c” を置いて gcc ***.c を実行。
そのあとは >261 を見れ。
尚、これ以上質問があれば下記等へ移動せよ。
ttp://pc2.2ch.net/test/read.cgi/tech/1059041347/
ttp://pc2.2ch.net/test/read.cgi/tech/1054980706/
2ch内リンクでもhを抜いている馬鹿
>271
一応 > と >> の効果の違いぐらいはありますが・・・
>>272
???
ああ、リンクは2chに高負荷をかけるとでも思っているのか。
c言語やりたいだけなら
わざわざcygwin入れる必要ないべ?
>>275
gccなら要るだろうけど、cygwin要らないコンパイラは色々あるね。
>>274
そんな事すら指摘されないと分からんとは、禿だな
>276
1にこうあるから順番にやってみたんじゃないかな?
 【Win32用の開発環境のみ。】
 gcc-cygwin
 gcc-mingw
順番入れ替えたほうが良くねぇかな。

>277
そう思えば > 使ってる香具師全員に指摘して回るんだな。
279277:03/08/12 13:03
俺は274にレスしてるんだが、何が言いたい?
>279
おっと流れを勘違いしたようね。これは失礼。
「2chに高負荷をかける」ってのが笑えるな
お前らも連呼してみろよ
3回目で吹き出すぞ
データはちょっとだけ小さくなるぞ。
たぶん>>270じゃ>>232には移動できないだろうけどな。
顔真っ赤です
「ミニロトを1500個、ダブりなしで選択する」っての
自分の頭じゃいちいち照合するか、ソートしてから照合するかしか
思いつかないんですが、もっとスマートな方法ってありますか?

ちなみに void main(void){ } しか使ったことありません。
↑あ、ミニロトのルールは
・1-31の数字を5つ
・数字のダブりはなし
です。
>>285
Cの話じゃない。

ちなみに void main(void){ } は使ったことありません。
#ifdef
を使うときに
#ifdef A || B || C
としてもOKでしょうか。
>>288
そんなときのためにdefined()があるわけですよ。
>>289
なるほど
#ifdef A || B || C
の書式は文法的に間違いってことですね。大人しく #if defined(A) || defined(B) にするのがイイのか
サイズを小さくするか。ならメール欄も空にしろよな。
292ビル・ジョブス:03/08/12 20:58
>>290
ちと話は違うけどプリプロセッサ出力を見ると楽しいよ。(そんなオレは変?)
ちとC言語の勉強になったりもする。
もう15年くらい昔だけどC言語の勉強してた頃「え!こんな書き方許されるのか!」って
よく驚かされたよ。
どっかの人大杉サーバならともかく、過疎板で負荷など気にする必要はない。
こういう奴ってprofとか使わずに闇雲に変な最適化をして
全然可読性のない糞ソースをひねりだすんだろうな。
>>293
>変な最適化
最適じゃねぇじゃん。
>>293
うーん…、釣り?
そんなレスしてる漏前様も「こういう奴」に入ると思われ。
何時までもネチネチ粘着してるのは何だろうね
変だね、キモイね、エンガチョだね
どなたか教えていただきたい事があります。
特に変わった事はせずに、ふつうにmallocして、reallocしてという感じ
で書いたプログラム(いくつかポインタがあってすべてreallocしたりする
わけではない)を書いて、free関数で解放するのですが、なぜかmalloc
オアreallocで確保するメモリが多いか少ないときにFreeを使う所で
エラーが出てるみたいなんです。(いつもでるわけではない)これは
なぜでしょうか?メモリ関係で何か注意しないといけない事を忘れてる
とかでしょうか?ご教授ください。
 あと、やっぱりプログラムが終わればメモリは勝手に解放されるわけ
ではないんですよね?さっきからそのせいでパソコンが落ちまくる(泣)。
>>297
まともなOSであれば勝手に解放するぞ
>>298
Meなんですけど、解放しないようなんですよね〜
メモリのお掃除屋さんのグラフがどんどん減ってくんですよ。
(そのアプリを起動、終了を繰り返すと)
free()でエラーが出るのは、どっかでミスって二重に開放しようとしてるのでは?
>>300
そう思うんですけど、出る時と出ない時があるのが謎なんですよ。
いつも出るってんならまだ探しようもあるんですが・・・・
Strcpyはアドレス関係ないですよね?
302デフォルトの名無しさん:03/08/13 22:52
>>297
ageろよ。

そのコードを貼ってみて。
303デフォルトの名無しさん:03/08/13 23:22
>>306
邪魔だし、うまく書き込めないので、これを見てください。
http://www12.ocn.ne.jp/~mygrid/souse.txt
>>301
アフォ。
「未定義」とは何か、
3600000000000nsほど考えてこい。
コマンドライン引数を与えていないだけだったりして
sizeof(char)って・・・
307デフォルトの名無しさん:03/08/13 23:29
>>304
どういう意味でしょうか?「未定義」ってのググッってみた方がよいのでしょうか?

308デフォルトの名無しさん:03/08/13 23:30
>>306
ま、まずいんですか?(汗)
>>303
この問題とは関係ないだろうが、mallocに失敗してもstrcpyしているがいいのか?
規格に従ういかなる処理系においても sizeof(char)==1
>>308
sizeof(char)==1
>>303
sprintfには%lfなんかない。doubleは%f
sizeof(アチャー)
314デフォルトの名無しさん:03/08/13 23:36
>>311
なるほど、使う意味がないと。こりゃ勉強になりました。一応
やっといた方がいいかなと思ってつけといたんですけど。
いらないんですね。
>いらないんですね。
そうでもない
VBスレでみかけたあれなのかなぁ。スペルミスとかmemmoveを使えばよさそうなところとか似ている。
VC++.NETはsizeof(char)==2だがな
>>317
まじで!?
319316:03/08/13 23:43
こういうこと

if(str1[0] == '-'&&str1[1]=='-'){
for(x=2;x<=strlen(str1);x++){
str1[x-2] = str1[x];
}
}
if(str2[0] == '-'&&str2[1]=='-'){
for(x=2;x<=strlen(str2);x++){
str2[x-2] = str2[x];
}
}


if(str1[0] == '-'&&str1[1]=='-'){
memmove(str1,str1+2,strlen(str1+2)+1);
}
if(str2[0] == '-'&&str2[1]=='-'){
memmove(str2,str2+2,strlen(str2+2)+1);
}
>VC++.NETはsizeof(char)==2だがな
その時点で、スレ違いだな
char
char キーワードを使用して、次の表に示された範囲の Unicode 文字を宣言します。Unicode 文字は、世界中の文字言語のほとんどを 16 ビット文字で表します。

とりあえず。プログラムに直接の問題は無さそうですか?あと、今思いついた
んですけど、中で呼び出しているdoublemultiplyって関数の戻り値を解放
してないってのはなんか関係ありますかね。そっちの関数もreturn文で
動的に領域を確保したポインタ(言葉の使い方がおかしいかも)を返して
るんですけど。
>>322
freeで落ちるらしいが、具体的にどのfreeで落ちるの?mainの中のfree?
>>322
それはOK
標準じゃないけどstrdupなんてまさにそういう関数だし。
>>323
いや、関数の中で落ちちゃってるっぽいです。で、freeを全部取り除いてみたら
一応エラーは起こらなくなったみたいなんですけど、それもどうかと思い
freeに渡す値がちゃんとmallocで得た値なのか、
途中で書き換えていないか、二回freeに渡していないかを確認しとけ。
>>326
後者は何度も調べました。前者はつまり動的に確保したのではないアドレスを解放していないか?という事でしょうか?
328デフォルトの名無しさん:03/08/13 23:55
if(str2==NULL||str2==NULL){

↑これ記述ミスだろ
329デフォルトの名無しさん:03/08/13 23:56
>>327
そういうこと。
たとえp=malloc(4);とやっていてもfreeするまえにp="string";とかやったらダメ。
>>328
そうみたいですね。すいません。
>>329
strcpy(p,"はなもげらー");
とか
strcpy(p,str1);
とかは大丈夫ですよね?
332309:03/08/14 00:00
スルーされとる・・・

↓これのことなんだけど。scanfしているのもよくわからない。
str1=(char *)malloc((strlen(strone)+5)*sizeof(char));
str2=(char *)malloc((strlen(strtwo)+5)*sizeof(char));
if(str2==NULL||str2==NULL){
printf("メモリが足りません");
scanf("%d",&work);
}
strcpy(str1,strone);
strcpy(str2,strtwo);
>>331

バッファからはみ出んようにな。
334デフォルトの名無しさん:03/08/14 00:01
>>327
一応確認するけど、関数内でmallocで得た値を入れるために、ポインタ変数を引数に渡してないか?
その場合、「ポインタのポインタ」を使うのは知ってるよね?
>>334
申し訳ありません。どういう意味でしょうか?

インデントがめちゃくちゃでブロックの範囲がわからん。
>>332
すいません見逃していました。確保失敗したらプログラムに止まっててもらおうと
Scanfは入れときました。
あと、strcpyは確保されなかった場合は、ストップするので、大丈夫かなと
>>337
なんと!
そういうときはNULLを返して関数を抜けるのがいいよ。
>>338
そうなんですけど、一応まだテスト段階なので、とりあえず、メモリ確保の所で止まってる
か調べるためにScanfを使ってみました。
ちゃんとできたらそうしてみます。
VC使ってるならここ読んどけ
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vsdebug/html/_core_solving_buffer_overwrites_and_memory_leaks.asp

それからstr1の確保に成功してstr2の確保に失敗した場合はstr1を開放しとけ
以前、mallocで確保する量を間違えてバッファあふれを起こしたけど、
freeでおちたために原因を突き止めるのに時間がかかったことがある。
>>341
原因は、確保する量が多すぎたって事だったんですか?
>>342
違う。少なかったの。
345デフォルトの名無しさん:03/08/14 00:23
>>335
こんな書き方をしてたら間違いってことなんだが。

void kakuho(char *s){
 s = (char *)malloc(256);
}

int main(){
 char *a;
 kakuho(a);
 /* a をつかう*/
 free(a);
}
>>345
これは大丈夫だと思います
>>346
よく意味が分らないよ。
その間違いは、していないって意味?
それとも、345は間違っていないって意味?

因みに345は間違いだよ。
>>347
346じゃないが>>345のようなミスはなかった。
349デフォルトの名無しさん:03/08/14 10:07
>>129-145
rand()の結果に周期性があるとしても、乱数なんだから構わないんじゃない?って思うのは素人考え?
N=100ぐらいで各数値の出現頻度が1%ずつになるようなrand()って、むしろランダムじゃないように思えてしまう。
350303:03/08/14 10:32
あの、ここでお世話になった者なんですが、VCでのDLLの作り方がよく
わからず、困っております。どなたかわかりやすく教えてください。
それか、ソースを晒すのでDLLにしてください。おねがいします。
>>350
>>1
> GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
あの、私は一応VB使いなんですけど、計算を行う部分がVBでは遅過ぎる
ので、C言語で書いたプログラムをDLL代わりに呼び出して、結果をファイルを
介して取り込むという手法のプログラムを書いています。
で、呼んでは、消え、呼んでは、消えをものすごい勢いで繰り返してるんですが
そうすると、どんどんメモリを食っちゃってるみたいなんです。また、動作が不安定
になって行っているようなんです。
やはり、こういう手法は避けた方が良いのでしょうか?
>>353
何が消えるんだかさっぱりです。
>>353
C言語側かVBとの通信部分にメモリリークがあるんでしょうな。
&より<<の方が優先順位が高いとφ(..)カキカキ
>>354
コマンドライン引数を与えてshellを使いDOSプロンプトの中でCのプログラム
を走らせて、そして、それは計算結果をファイルに書き込み終了します。
その後、VB側のアプリはファイルの内容を監視してて変更されると読み込んで、
という風にDLLもどきとして利用しています。分かりにくかったのなら申し訳あり
ませんでした。
>>355
通信と言っても、コマンドライン引数を渡す所ぐらいしか実質通信はして
ないんですが・・・どこが原因なんでしょう?
>>358
ちょっと頭使えばいいと思うがC言語側。
360厨房:03/08/14 20:27
みなさん、厨房ですよ。
361デフォルトの名無しさん:03/08/14 20:55
>>359
どう言う事ですか?何か工夫すればメモリリークは避けられるの
でしょうか?

>>361
本当にDLLにすりゃ済むだろ
>>362
KOB
だからスレ違いだって。
365C初心者:03/08/14 21:23
Cで書かれたソースコードが置いてある日本語サイトを知りませんか?
366デフォルトの名無しさん:03/08/14 21:26
サーバが日本なだけで言語は英語だな(鬱
http://www.apache.jp/
368デフォルトの名無しさん:03/08/14 22:03
このスレは、ものすご〜〜〜い初心者っていうか
昨日からCの勉強を始めたような人間が質問してもいいスレですか?
2ちゃんねらーなどの間で、人気のある寺院が有ります。
これらの寺院にて諸願成就を祈願しましょう。(爆)

(1-4件目)  http://www.z-shoten.or.jp/
http://www.tctv.ne.jp/matuti/
http://www5b.biglobe.ne.jp/~ryumyoin/
http://www1.ocn.ne.jp/~tatsueji/
(5件目)
寺院名    吉祥山唐泉寺
通称     江戸川不動尊
所属宗派  真言宗泉涌寺派
住所     〒133−0051
        東京都江戸川区北小岩七丁目10−10
        京成電鉄の小岩駅から徒歩約15分
        (JR線の小岩駅は、
        京成電鉄の小岩駅とはもの凄く離れているので不可。)
電話番号  03−3658−4192
住職     高田正圓
        (女住職で、先代住職(高田真快)の奥さんであった模様。) 
本尊     不動明王
祈祷日及び祈祷時刻
        通常は毎日午前6時より(150分前後かかる模様)
        行われるが、毎月28日には(不動明王縁日として)
        午前11時にも(2時間ほどかかる模様)行われる。
祈祷料
(普通護摩)   3000円 5000円 10000円
(特別護摩)   30000円(21日間) 100000円(108日間)
          300000円(365日間)
370デフォルトの名無しさん:03/08/14 22:05
>>368
>>1を守れば
>>362
トライはしたんですけど、文字を渡して、文字を返してもらう
ってのが異様に難しくて、あきらめてしまった次第なんです。
(数値は結構簡単に行けるのに・・・・・)
ちなみにVCで
>>371
その前にC側のクソコードでバッグしる!
>>372
コードが原因なんでしょうか?アプリを起動すると、それを次に起動
する時のためにメモリに残して置くとか聞いた事があるんですけど、
そういう関係なのでは?と個人的には考えてるんです。
>>373
次回起動される保証がどこにもない。
もしそうだとしても、起動の度にその謎の領域を蓄積させる理由がない。
375257:03/08/14 22:35
>>265
返り値のない関数でも、引数が必要なことはある。必要ないこともある。
なんでもいいわけではない。それはどんな関数にするか次第。
返り値の有無にかかわらず、その関数が、どんなものを利用するかとかでかわってきます。

引数がどんなものなのかちゃんと調べたほうがいいです。
スコープとかリンケージとかいった言葉も調べた方がいいのかもしれない。

それと、実際にプログラム書いてコンパイルしてみるのも必要。
3回くらい足し算するだけとかの単純なプログラムでも、
返り値のある関数でつくったり、返り値のない関数でつくったり
なんとおりか作ってみると、
どんな関数をつくって、どんな引数が必要かとかわかる。

 前回書き込んでいろいろつっこみがはいったように、
 私は、ちゃんとわかってると言えるレベルではないし、
 このスレにいつもきてるわけじゃないのであてになりません。(笑)
>>374
じゃあ、やっぱりFREEし忘れとかですかね?でも、アプリが終われば
FREEしてなくても解放されるものと聞きましたが、
うーん、他に思い当たらないしな〜
>>376
どこが悪いのかの切り分けテストしろよ。いいかげん。
int main(){return 0;}
だけのプログラム作って動かすとかさ。
378C初心者:03/08/15 00:02
日本語のサイトは無いんですか?
>>378
本屋いくなり図書館いくなりすれば?
380C初心者:03/08/15 00:16
図書館にはその手の本が無いんです。
本も買いたいのですが金銭面からなかなか厳しくて。
何処かありませんか?
ブックオフ
メチャメチャ安い
>>375
>>257はネタじゃなかったのか?
よくわかってないなら、てけとーなこと書くのを止めれ。
384デフォルトの名無しさん:03/08/15 01:37
今がチャンス!「誰も知らない」スーパービジネス

HPを宣伝するだけの誰でもできる簡単なお仕事です。
間接収入もあるので安定した収入が望めます。

2chを見てようがゲームしてようが、ほったらかしで次から次へと入金される
その喜びを是非味わってください。
通帳見るたびにほっぺたを落とさないよう注意!!

詳しくはコチラ
http://www.mahou.tv/muchey/partner.htm
>>384
マルチじゃんコレ
>>377
やはり、ソース側の問題ではないようです。おっしゃっているプログラムの
int main(){return 0;} を
0.5秒ごとに動かしてみましたが、やはり、メモリはどんどん減っていってしま
っています。また、mallocで確保した領域を開放しないという内容にしたところ、
減るペースは増えています。やはり、プログラムが終わっても解放されないで
はないでしょうか?
ついでに質問ですが、DLLが終了する時は、プログラムが終わってメモリが
解放されるのと同じようにFREEしなくても解放されるという事になっている
のでしょうか?それとも、関数扱いだから、解放されないのでしょうか?
いい加減、スレ違いってことに気づかない限り問題は解決しないと思われ。
たしかに、すでにVBの問題だな。
>>386は放置で
390デフォルトの名無しさん:03/08/15 02:49
VB厨逝ってよしでFA?
391デフォルトの名無しさん:03/08/15 10:10
WindowsXPでGCCって動くんですか?
>>391
ええ。
393デフォルトの名無しさん:03/08/15 10:13
394デフォルトの名無しさん:03/08/15 10:14
うぁぁぁぁぁぁぁあぁああ
もうどこをどうクリックすればGCC手に入るんだよ
誰か教えてください
>>394
http://www.cygwin.com/setup.exe
開発ツールも含めてセットアップ
>>383
じゃあ よくわかってるおまえがちゃんとした答え書いてやれ。
答えられるなら。(笑)
アホな答えとそれを書き込んだ奴にたいする罵倒しかレスつかないなら、
このスレ無意味だろ。(笑)
>>396
そうですよ、基本位てめぇで勉強しろと。
教えてほしいなら煽らずに素直にそう書けばいいのに。(笑)>>375=>>396
>>275はマジなの?
> b=hoge(a)+100; は、 b= ひゃくいち + 100; みたいになって計算できない。
この辺なんて釣りにしか思えないから、みんな放置してると思ってた。
400399:03/08/15 10:34
違った。
>>257だった
>>399
>>275は正しい。
>>399
VBとかなら・・・でも、charだしなぁ・・・。
char *hoge(...){.....} と書きたかったんだろうか。
それでも警告は出る(intにポインタを代入)けど一応コンパイルは通る。
>>403
まぁ、結局のところint相当だからなぁ。
どうやっても「ひゃくいち」にはならんけれど。
>>232
今更だけど、文字列を加工する関数で特に戻り値を必要とせず、一切エラーも起きない場合は加工後の文字列の先頭アドレスを返すようにしている。
別にvoidにしてもいいんだけど、標準関数にならってね(strcpyとかstrcatとか)。
>>396
> アホな答えとそれを書き込んだ奴にたいする罵倒しかレスつかないなら、
> このスレ無意味だろ。(笑)

そうだよ。
だからアホな答えは書くなよ。
あの〜、ファイルからfscanf(fp1,"%s",str);
というように文字列を読む時に、書き込まれている文字が”0”だけの時は
文字列として認識されないのでしょうか?改行コードがどうのとかいう関係?
そんなはずないけど・・・
空白なら影響があるけど。

ところで、文字列を読み込むならfgetsを使った方がいいよ。
409408:03/08/15 11:54
>>407へのレス
410407:03/08/15 11:59
>>408
サンキューです。今試してみた所、0でもちゃんと読み込めていま
した。プログラムのどっかにバグがあるみたいですね。
fgets使ってみます。(σ・ω・)σ Fゲッツ!!
大体質問しておいてちゃんと回答があっても、
まともに感謝もできない香具師ばかりだと回答する気にもならないよね。
ゲッツなんて言われてもどう対応したらいいのかわからんよな。
>>411
おまけに煽りはやたら多いしな
ここをどこだと思っているんだ。
ましてや夏休みだぞ。
>>412
> 回答する気にもならないよね。
じゃあするなよ。スルーしろ。
416山崎 渉:03/08/15 15:15
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
>>415
同意。恩着せがましいったらありゃしない。
418デフォルトの名無しさん:03/08/15 16:21
質問スレがこんなに下にいちゃいかんだろ。
419デフォルトの名無しさん:03/08/15 18:43
次の質問どぞー
420408:03/08/15 18:55
>>415
俺は>>411-412じゃないぞ。
恩着せがましいのもuzeeが
無礼者も同じくらいuzee

どっちも氏ね
422232:03/08/15 23:08
>257
>405
レスありがとうございます。とりあえず色々な関数作ってみて
試してみます。
レスがないからもうあきらめかけていたが
ちゃんと見てくれる人もいるんだ・゚・(ノД`)・゚・
まだ俺はC初心者だから誰が釣りとかわからないけどな・・・
まあ、レスありがとうございます
「ポインタのポインタ」があるんなら、「ポインタのポインタのポインタ」、更には
「ポインタのポインタのポインタのポインタ」とかもあるんかいな。
もしあるのなら、「ポインタのポインタ」が、「実体の参照まで2段階ある」という
言葉を使うとするなら、一体何段階までのポインタがあるんかいな。
>>423
もちろんあります。

ヒープがあふれるか再帰的に参照しているならスタックがあふれるかまでは行けるんじゃないの?
>>424
その前にコンパイルするときの文の文字数制限にひっかかってしまうかも。
VC6 だと 1023 文字くらいだった気がする。
426デフォルトの名無しさん:03/08/16 11:53
こそこそとやってんじゃねーよ。
age!
>>423
無限
428デフォルトの名無しさん:03/08/16 12:03
なわけない。
脳内なら或いは
>>423
無限 ( ただし, 有限 )
>>430
同意。無限とか言ってる奴はチューリングマシンもってこいと。
432デフォルトの名無しさん:03/08/16 12:21
Theoretically unlimited.
Limited by implementation.
infiniteの方が好き
四重以上はやめてね。ループも。
>>434
謎の規約を持ち出して・・・。
>>434
もしリストを先頭からたどる羽目になったときは
必然ですね。
437436:03/08/16 12:40
「何処まで続くか判らないポインタのリンクが必然ですね」、だ。
>>436
それはn重とはいわんだろ・・・
>>438
たどるのに内部で再帰してたりとかじゃないの?
必然性があれば何重でも
>>440
今まであった?
四重以上のポインタやループが。
「四」重ってどっから出てくんの?ワラ
char c;
char* p = &c;
char** pp = &p;
char*** ppp = &pp;
char**** pppp = &pppp;
char***** ppppp = &ppppp;

*****pppp = 'a';

ループいらないぞ。
*の数があってねえぞ。

むしろpの数が
というか誰がループを必要としていると言った。
448デフォルトの名無しさん:03/08/16 13:47
ヌル型のポインタってどういうときに使うんですか?
449デフォルトの名無しさん:03/08/16 13:48
>>448
char *s="abcdef";
if(strstr(s,"haxa")==NULL)
printf("みつからなかったよ\n");
450449:03/08/16 13:56
ヌル「型」じゃないぞ。
ぬる「ぽ」だぞ
  ( ・∀・)   | | ガ「ッ」
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/ ←>>451
 (_フ彡        /
453変な質問者:03/08/16 14:30
Cして7日目な人(7日前にPC初めて触れた)なんだけど、>>232の質問に対する答えって、
どれも検討違いじゃないかな?って思ってしまった。
returnについては、後の人のでいいと思う。

戻り値をどうやって決めるかってのは、関数を実行して、その結果どんな値が欲しいのか。
できまるんちゃうかな?
double型の数値が帰ってくるなら、double 関数名(引数) て形にすればいいだけ。
別になんも返さないですよ〜。ソース見やすくするために関数化しただけですし〜
ってなら、戻り値は何も返さないって示すために、void って書く。

これって合ってる?理解を深めるために何人かの人レスお願いしますm(__)m
/* レスに対して発言はしません。 */
>>453
死ね。
>>453
死ね嘘つき
>>453
痛いな・・・
457変な質問者:03/08/16 14:34
return void;
>>453
なぁ、そのプロシージャ(void hoge())でエラーが発生したときってどうする?
〜日目とか強調するやつよくいるよな。
7日目で2ch(;´Д`)
>>453
糞して氏ね
462変な質問者:03/08/16 14:41
7日で釣りが大成功
僕って才能あるかも^^;
おまいらまて








>>453は釣りじゃないか?
みんなレスしすぎだろ(藁
釣りかどうかなんてどうでもいいんだよ。
>>453
糞して氏ね
>>462-463
(・∀・)
466デフォルトの名無しさん:03/08/16 14:47
大勢で水をまいて東京の気温を下げようなんて、2ちゃんねらーみたいなことするなよ(;´Д`)
467デフォルトの名無しさん:03/08/16 14:47
誤爆(;´Д`)
>>458
exitします
void uppercase(char *str)
{
for (; *str; str++) {
if (*str >= 'a' && *str <= 'z') {
*str += 32;
}
}
}

main(void)
{
char *str = "rock is dead.";

printf("%s¥n", str);
uppercase(str);
printf("%s¥n", str);
}

2回目のprintf()でBus errorって怒られます。
ヨロシコお願いします。
文字列リテラルを書き換えないように。
471デフォルトの名無しさん:03/08/16 15:57
char str[] = "rock is dead.";
472469:03/08/16 16:02
>>470, 471
レス有り難う御座います。

>char str[] = "rock is dead.";
で上手くいきました。

で、ワタクシ間違っておりました。
>*str += 32;
では無く
*str -= 32;
ですた。

文字列定数変更した時の動作はANSI規格では未定義
勉強になりました。
>>470
文字列リテラルの使い方を間違わないように。
474デフォルトの名無しさん:03/08/16 16:47
シーク関数の動作が理解できない。
何でこのプログラムで位置が進むんだろう?

char c;
for( int i=0; i<4; i++ ) {
if( 0==fread( &c, 1, 1, fp ) ) return EOF;
fseek( fp, SEEK_SET, 1 );
cout << c << " ";
}
>>474
ファイルポインタはファイルの「ここまで読んだ」情報を保持するための物です。
476474:03/08/16 16:55
そうなんですか。
5年くらい勘違いしてました。

でも、fseekは何のために存在するんだろう?
477デフォルトの名無しさん:03/08/16 16:57
fseek(fp, 1, SEEK_SET); だろ
>>476
そのコードの中では無意味だね
479474:03/08/16 17:05
> fseek(fp, 1, SEEK_SET); だろ
しまった!!!!
気が付かなかった・・・
ようやく光が見えました、ありがとうございます。
SEEK_SET は 0 。
1 は SEEK_CUR 。
だから、fseek( fp, SEEK_SET, 1 ); は
fseek( fp, 0, SEEK_CUR ); と同じで、
ファイルポインタを移動しない。
ネタでは真似できない、この天然… 見習わなければ。
プロトタイプ宣言しても型チェックしかできないからねぇ
483デフォルトの名無しさん:03/08/16 22:05

コーポレイトソフトウェアていうサポセンの馬鹿が
PGに喧嘩売ってます。

http://money.2ch.net/test/read.cgi/haken/1057486349/287

腹立ちました。
みんなでやっつけにいこう。
( ・_ゝ・)ツマンネ
485デフォルトの名無しさん:03/08/17 03:59
>>474
進むどころか
ボクのCコンパイラでは、エラーになりました。
>>485
システムによってはSEEK_SETが0で、SEEK_CURが1とは限らないから
エラーになってもおかしくはない。
>>487
> cout << c << " ";
> C言語なら俺に聞け! Part 63
489デフォルトの名無しさん:03/08/17 13:55
ミキティーが放尿するフラッシュを作りたいのですがどうしたらよいのでしょうか。
笑ってしまった
>>489
サブリミナル効果で尿意を催すフラッシュを作って見せる。
ションベンちびるほど恐いのでも可。
492ぽ ◆ebXLcmI5po :03/08/17 16:47
おい 教えろ

漏れのマシンはw2kでcygwin が入っている。
さっきcygwinは最新にアップしたのだが、gccが入っていないんだよ。

どっからかっさらってくればいいんだ?
直リンキボンヌ
http://www.cygwin.com/setup.exe
でgccクリックすりゃいいだろ
494ぽ ◆ebXLcmI5po :03/08/17 17:21
それがわからんのだよ とホホ
package selectのall/devel/gcc
496_:03/08/17 17:24
  ∧_∧   
 ( ・∀・)/< こんなノみつけたっち♪ 
(1-4件目)  http://www.z-shoten.or.jp/
http://www.tctv.ne.jp/matuti/
http://www5b.biglobe.ne.jp/~ryumyoin/
http://www1.ocn.ne.jp/~tatsueji/
(5件目)
寺院名    吉祥山唐泉寺
通称     江戸川不動尊
所属宗派  真言宗泉涌寺派
住所     〒133−0051
        東京都江戸川区北小岩七丁目10−10
        京成電鉄の小岩駅から徒歩約15分
        (JR線の小岩駅は、
        京成電鉄の小岩駅とはもの凄く離れているので不可。)
電話番号  03−3658−4192
住職     高田正圓
        (女住職で、先代住職(高田真快)の奥さんであった模様。) 
本尊     不動明王
祈祷日及び祈祷時刻
        通常は毎日午前6時より(150分前後かかる模様)
        行われるが、毎月28日には(不動明王縁日として)
        午前11時にも(2時間ほどかかる模様)行われる。
祈祷料
(普通護摩)   3000円 5000円 10000円
(特別護摩)   30000円(21日間) 100000円(108日間)
          300000円(365日間)
>>494
develって書いてあるとこ
498デフォルトの名無しさん:03/08/17 20:42
>495
やっと判ったよ。ありがと。
デベール! (プださっ
500デフォルトの名無しさん:03/08/17 21:59
I'll be back!!
でんでんデベロン デベロンパ
502初心者:03/08/17 22:39
C言語とはいえませんが、
Print文を使用して、標準出力に”自身を出力したいときはどの様に指定
すればよいでしょうか。
Print ”””や”¥””など色々試しているのですがうまくいきません。
503デフォルトの名無しさん:03/08/17 22:41
>>502
”はそのままでOKです。
"は\"とします。
>>502
C言語の質問をしてください。
Print文って何?
505初心者:03/08/17 22:43
>>504
Print文ではなくPrint文です。
あなたの目は節穴ですか?
>>505
さぁ、死のうか。
>>502に【無礼者】の烙印

#define Print printf
#define begin {
のようなデムパコードが将来にわたって自分のところに
回って来る率を低減するめ、コイツは以後100%無視
508デフォルトの名無しさん:03/08/18 00:18
やっとGccが入ったよ。

それでだ、重大な決断をしなくてはいけないわけなんだよ

cygwinのgccを使うとして

windowsのアプリとするか cygwin上でXfreeで動作するアプリとするか

損得を教えてくれよ
509デフォルトの名無しさん:03/08/18 00:32
多少判った。
MINとかいうのを使うんだな?でSDLとかいうのを使うのだな?
それがベストなのか?

なんか落とし穴はあるのか?
510デフォルトの名無しさん:03/08/18 00:33
自分で作った関数名の付け方について質問です。
本によって、
CreateDensityArray()
のように、単語の頭を大文字にするやり方と、
create_density_array()
のように、_で区切るやり方があるようですが、
どちらが良いとか、悪いとか、由来とか、
みなさんはどちらにしているか、など教えて下さい。
>>510
ライブラリにあわせる。
512デフォルトの名無しさん:03/08/18 00:53
歴史的な要素もあるよ
パスカル系の香具師は単語の頭を大文字にしてたからね。
歴史的なfortran屋になるとその大文字ダケ+数字で常に6文字になる(W

そーゆー過去の習慣を引きずっていない香具師は単語をアンダースコアで繋ぐわけだよ。
K&R ってもう古典だし、そのまままねるのは危険な気が。
FAQネタで議論するなと言っている。別スレ池。
クラス名・変数名に迷ったら書き込むスレ。Part2
http://pc2.2ch.net/test/read.cgi/tech/1058213523/
517デフォルトの名無しさん:03/08/18 03:05
K&R初犯のころのCは良かったよな。何でもアリでさ。
処理系も小さかったし。
518デフォルトの名無しさん:03/08/18 03:06
懐古厨うざい
自分は以下の感じで書くのですが、
スペース、改行、{}等で一般的な書き方を教えてください。
,*i,n → , *i , n にするみたいな。

#include <stdio.h>

void Sub(int*i,int n)
{
  if((*i==n||*i==100)&&(*i!=n||n==30))
    printf("(^^)\n%d %d\n",*i,n);
}

int main(void)
{
  int i=10,n=20;
  printf("%d %d\n",i,n);
  Sub(&i,n);
  return 0;
}
520デフォルトの名無しさん:03/08/18 04:09
美意識の問題だから好きにやれ
2つほどお聞きしたいのですが
void main(void)
はいけないと入門書に書いてあったんですが何故なんでしょうか?
詳しい理由みたいなのがあれば是非教えてください。
それから、重ねての質問で申し訳ないのですが、gets()はセキュリティー面で弱いとも書いてあったんです。
これについても深い理由を知っている方、いましたらよろしくお願いします。
>>521
main関数は、intとchar *の2つの引数をとり、intを返すことになっているから。
int main(int argc, char *argv[])
とすべし
523デフォルトの名無しさん:03/08/18 05:03
int main(void)でもいいんですが。
>>521
getsは、入力された文字を入れるための領域を用意してそのた領域へのポインタを渡すが、
用意した領域よりも長い文字列が入力された場合、プログラムが誤動作するため。
また、これを防ぐ方法がない。
意図的に長い文字列を入力させて(バッファをあふれさせて)
任意のコードを実行させるクラッキングに利用される可能性もある。
>>524
未定義なだけでプログラムが誤動作するとはかぎらない。

と言われてしまうぜにぃちゃんよぉ。
526521:03/08/18 05:13
>>522-524
丁寧な解答ありがとうございます。謎が解けました。
>>524
具体的な対策として、どうすれば良いでしょうか。
fgets()なら問題ないですか…?
皆さんはgets()を使わずにどのように処理しているか参考までに聞かせて頂けると…
>void main(void)
>はいけないと入門書に書いてあったんですが何故なんでしょうか?

2chで馬鹿にされるから
528デフォルトの名無しさん:03/08/18 05:23
>>526
> fgets()なら
わかっているじゃん

>>527
ワラタ
52943:03/08/18 05:48
>>523
鼻毛以外のモノを鼻から出したくない人は、そんなことしません。
>>529
板違いです。
こちらへどうぞ
http://etc.2ch.net/denpa/
>>510
gtk+ でプログラム書いてみようと思ったときに、_ をつかった関数が gtk+ でたくさん用意されてて、
自分で _ をつかって関数定義したらなんかエラーメッセージか警告がでたような気がする。
だいぶ昔の記憶なので、今はどうかわかりません。

 私は Create_Density_Array() みたいに _ と 大文字 を両方使う。
 関連した小さな関数は _ と 小文字 だけで。
 似たような名前の関数が他になければ、
 CreateDensityArray() みたいに _ を使わないこともたまにある。

>>519
Linux とかだと、indent ってコマンドがある。cygwin にも入ってたと思う。
indent hoge.c とかやると、改行いれたりスペースの数変えたりしてくれる。
ttp://www.linux.or.jp/JM/html/GNU_indent/man1/indent.1.html

indent コマンドの出力はあんまり好きじゃないし、オプションは使ったことがない。
Emacs つかってるので、cc-mode で TAB キー押すだけで勝手に行頭そろえてくれるし。

 (()&&()) ってなるときは (() && ()) みたいにスペース入れる。
 if 文だと、if って書いた行の最後に { を付ける。} は if の i とそろえる。
 一行だけで { } なくてもいい時も { } は付ける。

 そのソースだと、int main の中の、int i= の次の行と、Sub の次の行に、
 空の行を入れるかもしれない。
532519:03/08/18 07:54
>>531
お答えありがとうございました。参考にさせてもらいます。
狙ったように宗教戦争ネタが続くのはネタなんだろうな・・・
534デフォルトの名無しさん:03/08/18 15:01
かつて fortran2 fortran77 c ANSI C c++ pascal modula2 oberon
と変化のあった時代と比べれば、動きがないからね。

宗教ネタ以外な URL示されてお終いだし。
535デフォルトの名無しさん:03/08/18 17:38
複文かつ値を返してくれるマクロってどういう風に書くの?
{}を使う。
>>536
値を返せないんじゃ…
式だけでいいなら、

#define nullpo(x) (x += 1, gatu(x))

とかでいいんだろうけど、文となるとどーすんだろね。
わからんのです…
#define hoge(x) 1;((x)+1)
a=hoge(x)+5;

完璧
マクロは置き換えだから値は返せないでしょ。
関数定義の中身だけマクロで置き換えるとかすれば擬似的には可能じゃないかと。
インライン関数で書く
inlineなんてマクロの足元にも及ばないね。
>>543
なにゆえ?
>>544
型に関して多相的、演算子を引数に取れる、その他一般に悪用ができる。
なるほど、納得。
>>535
マクロというより、Cの構文として破綻してないか?
マクロって、単なる置き換えだろ。置き換える前の文を書いてコンパイルしてみなよ。
それが無理なら、マクロも書けるはずがないと思う。
書けるなら、それをマクロにできると思う。
何かの変数に代入するようなマクロにしてマクロ内部で代入するか、
大人しく関数にすれ。
549デフォルトの名無しさん:03/08/18 20:08
fgetc関数でファイルを読んでるんですが、
if(c == EOF)でEOFを取得できません(涙)
98では同じソースで動いたんですがXPだと落ちます。何が原因でしょうか?
>>549
char で受けてないか?
fgetc の戻り値の型は int だ。
551デフォルトの名無しさん:03/08/18 20:15
>>550
charで受けてます。。。
しかし読み出した文字を返すんじゃないんですか?

あと98ではcharで受けてうまく動いたのはなぜでしょうか?
>551
読み込んだ文字またはEOFを返す。

>あと98ではcharで受けてうまく動いたのはなぜでしょうか?
多分 char が符号付だったから。
>読み込んだ文字またはEOFを返す。
もう少し正確に言うと 0 から 255 または -1 を返す。

これを符号付きの char にしまうと -128 から 127 の値に変換される。
符号なしの char にしまうと 0 から 255 の値に変換される。


>>551
読み出した文字か EOF を返す。
読み出した文字は char の範囲の全ての可能性があって、
それプラス EOF だから char におさまるわけが無い。
>>553
特定の環境に依存した情報だぁな。
1 バイトが 9 ビットの環境とかもあるし、
EOF が -1 かどうかはコンパイラ依存だし、
-127 から 127 しか表現できないマシンもあるのじゃ。
556549:03/08/18 20:38
ありがとうございます。
納得しました。
まぁ、どっちみちintで受けろと。
558553:03/08/18 20:42
>555
おっしゃるとおりです。
C言語の細かい仕様をちょっと確認させて。
char:8ビット
short:8ビットより大きい
int:short以上、long以下
long:short以上
で間違ってないよね?

floatとdoubleの定義は覚えていないけど
char:1バイト
1バイト:実装依存
>>560
マジで?サンクス
shortって16ビット以上じゃなかった?
>>560
8ビット以上も加えないと
long double も加えてほしい.
565デフォルトの名無しさん:03/08/19 00:31
long≧intだじょ
>>565
559の定義を満たせばそれは自動的に満たされる、と論理学的に答えるテスト
なんでunsigned intのintを略さないのよ!?
long intやshort intのintは略すくせに。

ひとりごとスマソ
じゃーどーして unsigned は書くのに signed は書かないの?
と釣られてみた。
569デフォルトの名無しさん:03/08/19 00:48
short>=int>=long でないの?
>>569
単語の意味を辞書で(ry
>>569
わろた
572デフォルトの名無しさん:03/08/19 01:01
short ⇔ int
long ⇔ int
が正解のはずだ!!
>>559
>1 バイトが 9 ビットの環境とかもあるし

ビットが 8 つ集まったモノをバイトって言うんだろ?
574デフォルトの名無しさん:03/08/19 01:09
ちうか今時、1バイト=8ビットでない環境なんであるの?
ビットが 8 つ集まったモノをオクテットと言うのです。
よく文法の説明ででてくる「式」って何よ?
if(式) ...
switch(式)....
>574
俺も知りたい。
PDP-10 のような 36ビットマシンでバイトが9ビットだったのは知ってるけど、
今でも現役のマシンで1バイトが8ビットじゃないのがあるのかなぁ。

Lispマシンとかかなあ。
578デフォルトの名無しさん:03/08/19 01:14
真偽が定まるもの?
文は定まらないもの。文なんてイラネ
1バイトが8bitでない具体例を挙げられる奴いるのか?URLつきで
580579:03/08/19 01:15
すまん自分で見つけた
Love Bite
仮に親不知が無いとして32 / 2 = 16です。
>580
教えてくれ。
>>580
ソースキボヌ
584デフォルトの名無しさん:03/08/19 01:20
>>580
教えなさい
>>576
計算や代入や関数呼び出しなどなど。
586579:03/08/19 01:23
>>576
a = 1 ←代入式
a ==1 ←比較式
a = 1; ←代入文
if(条件式)
>586
現役マシンはどれ?
死滅マシンしか見当たらない。
>>589
そろそろスレ違い
>>586
にあった某URLの


■問21■次のうち正しいのはどれ
 ○ 1バイト=6ビット
 ○ 1バイト=7ビット
 ○ 1バイト=8ビット
 ○ 1バイト=9ビット


と言う問題は答えが一つしか選べないのだが(ry
CやC++では;によって式を文に変換するそうです。
593デフォルトの名無しさん:03/08/19 01:36
CHAR_BITって標準の定数じゃないの?
C FAQ(だったと思う)にはそれがあれば・・・と書かれているんだけど。
標準に準拠していない処理系のことも考慮しているとか?
>>591
あの程度の問題でパソコンの神になれるのなら、
世の中、パソコンの神ばかりだな。(w
>>592
へぇ〜
596デフォルトの名無しさん:03/08/19 01:42
>>579
スレ違いだが、
sizeof(bool)はだめでつか?
597デフォルトの名無しさん:03/08/19 01:47
文なんてものがある言語はダメ、らしいな
598デフォルトの名無しさん:03/08/19 01:50
ステートメントは文?式?
599デフォルトの名無しさん:03/08/19 01:52
文でしょ
文 : Statement
式 : Expression
601デフォルトの名無しさん:03/08/19 01:53
>>599 >>600
さんくす。
そうか式はExpressionか。そういえばよくexpと書かれているね。
602デフォルトの名無しさん:03/08/19 01:54
じゃなくてexprだ・・
603デフォルトの名無しさん:03/08/19 01:55
argumentとparameterはどう違うんですか?
>>603
辞書退け
605デフォルトの名無しさん:03/08/19 01:58
>>592
>CやC++では;によって式を文に変換するそうです。
ということはC言語のプログラム要素としては
  Expression⊆Statement
という考えでいいのでしょうか?
606デフォルトの名無しさん:03/08/19 01:59
↓このtypedefについて、なにか問題はありませんか?
typedef int function(int);
struct X
{
 function* convert;
};
int X_convert(struct X* p, int n)
{
 return (*p->convert)(n);
}

↓ならよく見るのですが、こっち(↑)はあまり見ないのでちょっと心配です。
typdef int (*function_pointer)(int);
argument はフォーマルな用語としての引数。
actual argument, dummy argument は、実引数、仮引数。

仮引数のことをparameterと呼ぶこともある。
>604
議論と媒介変数?
>>607
イミフメ。何が問題なのか?
>>606
ノープロブレム。
611デフォルトの名無しさん:03/08/19 02:01
>>606
コンパイルしてみぃ
>>607ではなく>>606でした
>>607
なるほど、ありがとうございます
614606:03/08/19 02:08
コンパイルできることは確認しました。
経験値が足りないだけなのかもしれませんが、
関数型をtypedefしてる他の人のソースを見たことが無かったのです。
なので、関数ポインタをtypedefするほうに一般的な利点がある
(または、または関数型をtypdefするほうに一般的な欠点がある)かと、心配になったのでした。

コンパイルも通るし、見た目も好みだし、問題ないって言ってもらえたし、
心配がだいぶ収まりました、ありがとうございました。
615610:03/08/19 02:12
>614
教科書、参考書、入門書のたぐいにはあまり書いてないので
こう書けるのを知らない奴が多いと思う。

規格に則っているので心配する必要はないが、
無知な奴に指摘されるのがうざいので、
最近は一般的な書き方に迎合するようにしている。
確かに見た目も好みだとはおもう。
でも漏れだけの偏見では“関数ポインタ”を typedef してもらうほうが
違和感がなくていいなと。

いや、どちらでも問題ないんだけどね…
こんな夜中にC言語スレ大繁盛ですね
Ciscoのハブは、1byte=11bitじゃなかったのか...
>618 ほほー。しかも奇数か。
VC++.NET 2003のintは5バイト
621620:03/08/19 04:33
あっキー押し間違えてる。本当は4バイト(32ビット)
622デフォルトの名無しさん:03/08/19 06:45
質問です。
プログラムの実行中に、関数を動的に書き換えたいと考えています。
そこで、オリジナルの関数を宣言した時、
その関数のポインタを得ることは出来ますが
関数の終端を得るにはどうすればよいでしょうか?
(この「終端」はアセンブラ命令でいうretの位置だと捉えてください)
Vector gResult = google("関数ポインタ");
あ、そっかそっか...

単純に先頭のポインタがわかれば

pf=関数ポインタの先頭;
while((pf++)!=retに該当するコード);

じゃだめなの?
・・・すまん、いろいろ問題だらけだった。>>622 脳内で修正よろしく
自己書き換えコード?
やめとけ
いややっぱりやれ。作ったら見せてね
8086以前の遺物だけどな。C言語を併用できる開発環境があるのか知らんが
>>622
昔トリッキースレッドで話題になっていた記憶があるが、
たとえば関数が「JMP xxxxx;RET」となっていて実体が別の場所にある場合に
いったいどのようにするんだ?という問題がある。
またコンパイラは関数ポインタを使う場合に上記の出力をよくやるんだな。

ちなみに、本気でやろうと思った場合は、MAPファイルを出力させてどうこうする必要が出る。
何のためにするのかはわからないけれど、俺ならば外部アセンブリファイルで処理を書き、
それをリソースとしてもちながら、実行時にメモリに動的ロードして実行権限を付加する方法を取る。
>>622
何のために?
>>629
たいていは、くだらない理由、
あるいはもっと単純な解決方法があるにもかかわらず、これしかないと思い込んでしまう初心者。

そもそも動的書き換えの意味がわからんのだが。
関数ポインタじゃなくって?
リアルタイムコンパイル(=インタプリタ)を目指してる・・・わけないよな。
>>622
本当はもっと実用的な方法を知っているが
あくまでここのスレタイに沿って回答する。

Cは命令書き換えを抽象化していない。
例:
void sine(void (*arasi)(void))
{
*arasi = 0xC3; /* error */
}

Cは関数のメモリレイアウトを定義していない。
例:
void osaan(void (*kimowota)(void))
{
sizeof *kimowota; /* error */
kimowota++; /* error */
}

よって質問で述べられている処理を実現するためには
これらをサポートする何らかの言語(例えばアセンブラ)を
使用する必要がある。
632デフォルトの名無しさん:03/08/19 11:45
オブジェクトファイル形式が分っていれば、
別にCの枠内でも、動的なコード生成のプログラムぐらい
書けるんじゃないの?アセンブラでなければならないっていう
理由が分らない。
633デフォルトの名無しさん:03/08/19 13:09
setjump マンセー
setjmpだったような・・
>>632
Cでアセンブラを実装してしまった場合とか考えると
はたしてアセンブラを使ったのか使っていないのか悩める

>>630
動的書き換えが必要な場合つーのはたいていアンチクラッカーなんだけど
636デフォルトの名無しさん:03/08/19 14:28
C言語じゃないんですが、教えてください。
やさしいフォートラン講座に、
C**********消費税の計算***********
WRITE(*,*) '商品の値段?’ 
   READ(*,*) PRICE
以下省略
 とありまして、「ではプログラムを実行して、ためしに商品の値段を50円
として、”50”を入力して、Enterキーを押してください。」とありますが、
お笑いください。プログラムの実行の仕方が分かりません。これは、書籍ではあり
ません。インターネット上の講座で、その出だしのところです。だれか教えて
下さい。
わはははははははははははは

コンパイラ(かインタプリタ)は用意してあるのかい?
639デフォルトの名無しさん:03/08/19 14:33
(*,*)
640デフォルトの名無しさん:03/08/19 14:44
>638 ど、ど、どーもありがとうございます。SafordFTN77 Personal Edition
Compilerを先ほどダウンロードしました。よく読み直したらDOSプロンプト
を起動して、コンパイルのコマンドを入力する − とありました。
コンパイルのコマンドを教えてください。
>636にとってスレタイは、
// 言語なら俺に聞け! Part 63
という形に見えてしまったに違いない(w
>>640
del /s /q *.*
643デフォルトの名無しさん:03/08/19 14:49
cygwinでのgccでつくったa.exeをcygwinやってないW32で動かすにはどうすればいいんだ?
>>640
さすがに個々の事は分からんなあ
マニュアルに書いてあるんじゃないか
>>643
出来ないんじゃない?win32のgccを使えばいいと思われ
(´-`).。oO(なんでここの人たちはこんなに優しいのだろう?)
647デフォルトの名無しさん:03/08/19 14:56
>646
ヒマだから。
648デフォルトの名無しさん:03/08/19 14:57
>646
自作自演だから。
スレ違いが来なくなったのは>>642を実行したためではないかと疑ってみるテスト
650デフォルトの名無しさん:03/08/19 14:58
642タイーホ!!!!!!!
>>643
gcc じゃなくて mingwin かなんかでコンパイルすればいいと。
Cygwin にあったと思う。

Cygwin gcc で作った exe は、cygwin1.dll をいっしょにもってけば動くと思う。
他にもなんか必要だったかもしれないけど。
>>650
なんでタイーホ?
653デフォルトの名無しさん:03/08/19 15:15
>>651
便乗してお尋ねしますが、cygwin1.dll なしで動作する exe を
作るときはどうしたらいいんでしょ?
(多分FAQだと思うけど…)
スレ違いスマソ。
器物損壊
-mno-cygwinオプションで
cygwin.dllにリンクしないの作れるんじゃないの?
cygwinでwin32アプリケーション作るつもりなら、
http://www.sixnine.net/cygwin/cygwin-doc/
これぐらいは読まないとだめだろな。
逮捕かよ、手厳しいな
>>653
Cygwin 入れてるんなら、
MinGW 入れて、>>655 で OK 。
>>656
ありがとうです。FAQに答えが載ってましたよ。
>>653
そうやって人の優しさに甘えるのが
君の悪い癖だ。
>>660
いやー。そのとおり。
すまんかった。
>タイーホ
まあここの住人で引っかかる香具師いたら超絶恥ずかしいわけだが
それだけにマジ切れのおそれが・・・w
-無能-cygwin
>まあここの住人で引っかかる香具師いたら超絶恥ずかしいわけだが

犯人が必死に言い訳している
なんかネクラなレスだな。
犯人? どの事件の??
667デフォルトの名無しさん:03/08/20 01:58
Main関数開始時刻と関数呼び出し時刻を関数で出力したいのですが、

#include <time.h>
#include <stdio.h>

void print_called_time(char *s_start){
time_t t_end = time(NULL);
struct tm *tp_end = localtime(&t_end);
char *s_end = asctime(tp_end);

printf("ローカル時間(Main関数開始時刻): %s\n", s_start);
printf("ローカル時間(関数呼出時刻): %s\n", s_end);
}
668667:03/08/20 02:00
でMain関数は
int main(void)
{
time_t t_start = time(NULL);
struct tm *tp_start = localtime(&t_start);
char *s_start = asctime(tp_start);

int loop = 0;
int loop_max = 100000000;
int dummy_value = 0;

for(loop = 0; loop < loop_max; loop++){
dummy_value++;
}
printf("dummy loop execution completed.\n\n");

print_called_time(s_start);

return(0);
}
669667:03/08/20 02:01
で結果が、
dummy loop execution completed.
ローカル時間(Main関数開始時刻): Wed Aug 20 02:00:59 2003
ローカル時間(関数呼出時刻): Wed Aug 20 02:00:59 2003
でいつも(ループ回数を多くしても)同じになってしまいます.
何が悪いんでしょうか...
>>669
多分asctimeのせい。
あれは静的なバッファに文字列を格納し、改めて呼び出すと新しい文字列で上書きされるから。
あらかじめ元のデータをstrcpyで配列にコピーしておこう。
char *s_start = asctime(tp_start);
これを
char s_start[1024];
strcpy(s_start,asctime(tp_start));
こうするってこと。
672667:03/08/20 02:18
出来た! ありがとう >>671 でも、うーん、そういう物なのか...
$ diff time-test2-old.c time-test2.c
5a6
> #include <string.h>
20c21,22
< char *s_start = asctime(tp_start);
---
> char s_start[1024];
> strcpy(s_start, asctime(tp_start));
>>672
配列にコピーはせず、mainの最初で開始時刻を出力してもいいけどね。
674667:03/08/20 02:24
>>673 さん、そうなんですが、実は関数の中で出力ファイルを開いて、
そこに「このプログラムの開始時刻: XXでした、終了時刻: XX」
とか他の実行logを色々と書いて後で読みたいのでこんなことを
したのでした. Thanks!
s_startを渡すより、t_startを渡す方がsmartだと思うのだけど。
scanf等で入力した数値分の配列を確保したいのですが、
「;がtypeのまえに必要です」というエラーがでます。どうしたらいいでしょうか?
sageているし、ネタかなぁ?
ネタでない場合、どうしたらいいですか?
>>676
calloc() 使え。





と釣られてみる。
680676:03/08/20 11:52
いや、別にネタじゃないんですけど・・・。
>>679
callocってメモリ確保のやつですよね。使ったことないけどやってみます。
681デフォルトの名無しさん:03/08/20 11:53
あのー、エラトステネスのふるいで素数列挙をするプログラムを組んでる
んですけど、まぁだいたい想像つく通り、ある程度までやるとメモリが足りなく
なってしまいます。そこで、こういった場合どうやって、その先をやれば
いいのでしょうか?自分ではファイルに保存して(すでに見つかった部分を)
、使う時に配列に代入して・・ぐらいの方法しか思いつかないんですが、なん
かものすごく遅そう、
682デフォルトの名無しさん:03/08/20 11:54
上の続き、
で、どなたかご教授ねがいます。
http://www.zexv.com/sosuu/
ここにある素数を列挙するプログラムはなんでこんなに速いんだろう。
>>683
全然速くない
>>681
あらかじめ2と3の倍数は除いて配列を作るとか。
それでだいたい全体の1/3くらいになったと思う。
686デフォルトの名無しさん:03/08/20 12:08
>>685
えーと、もうそんな感じではなくて、とりあえず際限なく探せるって
感じにしたいんですよね。3倍とかではちょっと
内部記憶も外部記憶も有限だから「際限なく」は無理
688デフォルトの名無しさん:03/08/20 12:25
>>687
まぁまぁ、そういった野暮な突っ込みはナシで、
ある程度際限なしってことでお願いします。
>>681
いいかげんスレ違い<素数列挙

素数関係のスレを探してみたか?
エラトステネスのふるいなんぞ使わずにひとつひとつ調べる。これ最強。
どの程度だよ(プ
>>692
DJBってこんな古いスタイルで書いていたっけ?
694デフォルトの名無しさん:03/08/20 12:34
↓コレで勘弁してよ!!
http://www.geocities.jp/ishigaki1998/allking1998.htm
695デフォルトの名無しさん:03/08/20 12:42
>まぁまぁ、そういった野暮な突っ込みはナシで、
>ある程度際限なしってことでお願いします。

何個だにょ?
そにれよってやり方かわるじゃん
696_:03/08/20 12:45
宣伝にひっかかった(鬱
698デフォルトの名無しさん:03/08/20 13:01
>>695
1兆とかそのレベルまではいきたいかなと、
>>689
モチぽん全部読破しました。一応(難しくて20%ぐらいかわかんなかったけど)
でも、最近は全然更新されていないし、単純にプログラムの技術の事なので
こちらで質問させていただきました。
> 単純にプログラムの技術の事なので

スレ違いじゃねーか w
一兆ケタって事?それとも、12ケタってこと?
701デフォルトの名無しさん:03/08/20 13:05
>>700
12ケタってことですね。とりあえず
djbのやつが15桁できる、って書いてあるやん。
703デフォルトの名無しさん:03/08/20 13:09
>>702
それがどうかしましたか?
私は自分で書きたいのです。
704デフォルトの名無しさん:03/08/20 13:09
>>702
djb?
705デフォルトの名無しさん:03/08/20 13:13
>>703
こらニセモノ!!、まぁ、言いいたいことは間違ってない
んだけど、もうちょっと丁寧にね
706703:03/08/20 13:14
>>705
まじかよ・・・
ソースを公開しているんだから(というかソースでしか配布していない)、参考にしなよ。
自分でやりたいなら、人に聞いてないで自分だけで解決しなー
708デフォルトの名無しさん:03/08/20 13:51
まともな処理系でクリ使えよ
709デフォルトの名無しさん:03/08/20 14:06
で、おまえは今何桁まで求められるの?
暗算で三桁
711デフォルトの名無しさん:03/08/20 14:31
>>709
エラトステネスで1億ちょいぐらいなら、あと、ビットフィールドとかで
1ビットずつ使えば、8倍の8億前後ぐらいかな(試したけど遅いから
採用はしてない)
712711:03/08/20 14:46
http://www.pureweb.jp/~aoyagi/integer/prime.html#section3
おかげさまでこんなサイトを見つけることができました。
でも、このプログラムが何をしているのかいまいちつかめない
んですが、どなたかちょっと教えてください。
トムに可愛い娘のジェーンが生まれました。
714667:03/08/20 14:48
>>675 レスありがと. しかしそれだとうまく行きませんでした?
time_tへのポインタを使ってアドレス渡ししてやると、
出力結果は、
dummy loop execution completed.
ローカル時間(Main関数開始時刻)(time_tポインタ渡し): Wed Aug 20 14:47:24 2003
ローカル時間(関数呼出時刻): Wed Aug 20 14:47:24 2003
のようになってしまいます.
使ったプログラムは下記に
715667:03/08/20 14:49
#include <time.h>
#include <stdio.h>
#include <string.h>

void print_called_time(time_t *ptr_t_start){
struct tm *tp_start = localtime(ptr_t_start);
char *s_start = asctime(tp_start);

time_t t_end = time(NULL);
struct tm *tp_end = localtime(&t_end);
char *s_end = asctime(tp_end);

printf("ローカル時間(Main関数開始時刻)(time_tポインタ渡し): %s", s_start);
printf("ローカル時間(関数呼出時刻): %s", s_end);
}
716667:03/08/20 14:49
int main(void)
{
time_t t_start = time(NULL);
time_t *ptr_t_start = &t_start;

int loop = 0;
int loop_max = 100000000;
int dummy_value = 0;

for(loop = 0; loop < loop_max; loop++){
dummy_value++;}
printf("dummy loop execution completed.\n");

print_called_time(ptr_t_start);
return(0);
}
717_:03/08/20 14:49
718711:03/08/20 14:50
>>713
んなアホな
MAX_ARRAY分ごとの整数区間をふるいにかける
720667:03/08/20 14:56
>>715 + >>716 がプログラムです.また関数へtime_tのアドレス渡しで
なく、time_tを値渡しにしてやっても結果は同じです.
まあ >>670 >>671 >>672 の方法で出来たので良しとしてもよいのですが
time, localtime, asctimeの動作はまだよく理解できないところが
あるので気持ち悪いです.これらの関数は勝手にグローバル変数
を作ってしまうようなものなのかなあ...?
 
'\n'を一つ標準出力に出力するときどれが一番イケてますか?

fputc('\n', stdout);
fputs("\n", stdout);
printf("\n");
putc('\n', stdout);
putchar('\n');
puts("");
722デフォルトの名無しさん:03/08/20 14:59
素数の方程式はもう見つかっているはずなので
算数板にいきなよ。
ビットが足りなかったら文字列として扱えよ
100桁でも200桁でもいけるし
なぜfprintfがないのだろう。
724667:03/08/20 15:01
あ、分かった. >>670 を良く読んでみたらasctimeを
関数中で呼び出す順番を1つ目の開始時刻のprintfの後に変えて
やればよさそうだと思いつき、>>715 を下記のように変えました.
#include <time.h>
#include <stdio.h>
#include <string.h>

void print_called_time(time_t *ptr_t_start){
struct tm *tp_start = localtime(ptr_t_start);
char *s_start = asctime(tp_start);

printf("ローカル時間(Main関数開始時刻)(time_tポインタ渡し): %s", s_start);

time_t t_end = time(NULL);
struct tm *tp_end = localtime(&t_end);
char *s_end = asctime(tp_end);

printf("ローカル時間(関数呼出時刻): %s", s_end);
}
725デフォルトの名無しさん:03/08/20 15:03
ctime
726667:03/08/20 15:04
すると、
dummy loop execution completed.
ローカル時間(Main関数開始時刻)(time_tポインタ渡し): Wed Aug 20 15:03:12 2003
ローカル時間(関数呼出時刻): Wed Aug 20 15:03:18 2003
でOK!もちろんtime_tへのポインタを渡さないで、time_tを渡してもい
けます. Thanks >>670 >>675 !!
727675:03/08/20 15:09
>726
そういうこと。
まぁ、私ならstrftime()を使うけどね。

それから、>724でいくのならs_startとs_endは同じ領域を指すので
使いまわし可能なんで念のため。
728667:03/08/20 15:29
>>725 localtime, asctimeを使わないでもctimeで出来るようですね.
使ってみましたが、asctimeと同じように使い方に癖がありますね.
#include <time.h>
#include <stdio.h>
#include <string.h>

void print_called_time(char *s_start){
printf("ローカル時間(Main関数開始時刻)(charポインタ渡し): %s", s_start);

time_t t_end = time(NULL);
char *s_end = ctime(&t_end);

printf("ローカル時間(関数呼出時刻): %s", s_end);
}
続く
729667:03/08/20 15:31
int main(void)
{
time_t t_start = time(NULL);
char *s_start = ctime(&t_start);

int loop = 0;
int loop_max = 100000000;
int dummy_value = 0;

for(loop = 0; loop < loop_max; loop++){
dummy_value++;}
printf("dummy loop execution completed.\n");

print_called_time(s_start);

return(0);
}
730667:03/08/20 15:36
>>728でいった癖というのは、
"print_called_time関数(>>728)の中で1つめのprintfを関数中の
ctimeの後に持ってくるとやはり開始時刻が終了時刻に上書きされて
しまうと"いう意味です.
(プログラムを全部貼ってるとなんか2chサーバー上の領域を無駄に
しているような気がするなあ...diff結果を書いても読む人が面倒
だろうし.programをUpしてリンクを貼るとそのUpしたサーバーを
自分で管理しなければならないし.どうすべきなのかなあ.)
>>728-730
あんたのやり方に癖があるだけでは?
732デフォルトの名無しさん:03/08/20 15:38
どうしてもいやならコピーすれば?
>>730
誰も読んでないから貼らなくていいよ
mainではt_startしか持たない。
void print_called_time(time_t t_start){
printf("ローカル時間(Main関数開始時刻)(charポインタ渡し): %s", ctime(&t_start));

time_t t_end = time(NULL);

printf("ローカル時間(関数呼出時刻): %s", ctime(&t_end));
}
>>734
void print_called_time(time_t t_start)
{
  time_t t_end = time(NULL);

  printf("ローカル時間(Main関数開始時刻): %s", ctime(&t_start));
  printf("ローカル時間(関数呼出時刻): %s", ctime(&t_end));
}

じゃないの?
736667:03/08/20 15:44
>>727 = >>675 ありがと.
つまりどうせ同じ領域を指していて上書きされるのだから、
s_startを終了時刻にも使えばs_end分(ポインタ一個分)だけ
関数が消費するメモリが節約できる、ということですね.

strffimeは...なんだこりゃ、引数が沢山ある.
ちょっと後で調べてみます.cftimeとかもあるし.なんで時間を
扱う似たような働きをする関数が沢山あるんだ!統一してよ.
737デフォルトの名無しさん:03/08/20 15:47
TPOに合わせて使う。
738711:03/08/20 15:59
>>722
どういう意味でしょうか?
739667:03/08/20 16:10
>>734 そうですね.このほうがずっとスマートです.
>>735 この場合>>734 = >> 735 の結果ですね. 私の>>728
ように使った場合順番が効いてきます.
これが>>731のいう癖のあるやり方ということなのでしょう.
>>732 ごめんな.sageとくから許してね.


740デフォルトの名無しさん:03/08/20 16:40
>>738
板違いと思うよ
素数のどんな性質利用してんの?
それでどこでつまってんの?
ほんで素数の方程式は今のところコンピュータで実装
できないらしいので(たぶん)がんばれ
squrt()使ってるんやったら限界あんのとちゃうの
素数判定は多項式時間で可能
sqrt()
順に割っていけばいいんだから多項式時間じゃない?
順に割ったら多項式時間ではすまない
何の多項式時間?
何のって、計算量知らんのか?
大雑把に言えば入力データ量に対する
プログラム停止までにかかる時間のオーダーだよ
747デフォルトの名無しさん:03/08/20 17:46
>742
素数計算での開平は値そのものが問題なのではないってことを理解しているか?

計算自体は多倍長の足し算引き算だけだろ。記憶場所がかなり必要になるってだけだ。
だからまともな処理系で栗をつかってメモリ確保すればその処理系の最大オカレンスサイズまで使い潰して止まる計算だな
n個の数字を判定するのか、数nを判定するのかのどっち?
749デフォルトの名無しさん:03/08/20 17:55
>>748
何の質問?
sqrtなんか使うなよ
その時点で限界が見えるだろが
751デフォルトの名無しさん:03/08/20 18:49
C言語の入り口で、泣いている諸君、いい本があった。倉薫氏が出した
「C言語(1)はじめてのCプログラミング」なら大丈夫。懇切ていねいとは
倉薫氏の書き方です。CD-ROMがついていて、失敗なしてインストールができるぜ。

752722:03/08/20 19:12
多項式とかよくわかんねーよ、難しい用語はやめてくれ
とにかく素数列挙の場合過去の素数で除算なんてしないよな?
そんで俺の知ってる方法のひとつに平方を使うなんだけど
他の方法はなんだ?
754711:03/08/20 20:31
>>753
すいません、レス遅れました。エラトステネスはやめてメルセンヌ素数
を探すことにしました。みなさんご迷惑おかけしてすいませんでした。

>>748
方向転換で数nという方向で

>>752
確率的なアルゴリズムでは、フェルマーテストや、ルビンテストなどがあります。
で、メルセンヌ素数の場合は、ルカステストで比較的容易に判定が可能です。
(2^n-1 n:素数)の形で表されます。
755デフォルトの名無しさん:03/08/20 22:08
今さ、ふとトリビアを見つつ、C言語入門シニア編を読んでいた
わけさ、そこでふとポインタも配列にできて、文字列を使う時に
いいんだと書いてあってさ、要するに
char *a[200];
とか宣言できるわけだ、んでもって配列の中身の文字数が少なく
てもその分しかメモリ食わないって言うし、すげぇなと思ったわけよ。
でもさ、あんましみんな使ってるの見た事ないんだけど、なんか不便
なトコとかあんの?
memcpy(a,"はなもげピー");とかできないとか、

char *b;
b=a;みたいな事ができないとかあんの?
どなたか教えてくんろ
上手くトリビアを絡めた質問じゃなきゃ(レスを求めるのは)難しい。
757デフォルトの名無しさん:03/08/20 22:26
>>756
むずかしいな。なんか見本みせてよ!!
ポインタ先の文字列はメモリ管理しないといけないでしょ。
static const char *const hoge[] = {
"foo", "bar", "baz", "gooo",
};
とかよく使うけどな。
誰もmemcpyの引数リストについてはつっこまないんだな。
>>747
ところで、栗ってなんだ?
素数の多項式ってこれか。
まだ生き残ってるとは思わなんだ。

暗号総崩れ-素数判定が多項式時間で可能
http://pc2.2ch.net/test/read.cgi/tech/1028877628/
インド人だとネタとしか思えない。
ネタじゃないんだろうけど。
インドは代数学発祥の地だぞ
「インド人数学者」って、たまに、とてつもない天才が登場するというイメージがあるなぁ
>>765
インドは、今も昔も、数学先進国ですからね。
cygwinのgccなんですがタイマーイベント起こすようなライブラリ関数はないでしょうか?
例えば、for文でループ回していて1秒おきに内容を表示するなんてのを作りたいのですが。

for (int i=0; i<10000000; i++) {
// 1秒おきにiの内容を表示したい
}
それ、タイマー必要なのか?
time()を使えばいいじゃん
769デフォルトの名無しさん:03/08/21 10:09
わたしは超ビギナーです。通常は画面の最後ににC:\Lsic86>が出ているのに、
操作しているうちに、次の行が_のようなカーソルだけになりなした。
C:\Lsic86>が出るようにするにはどうしたらよいのですか。教えてください。
770デフォルトの名無しさん:03/08/21 10:26
自己申告:exitでよかった。
>>768
time()ですか・・・擬似コードでもよいのでもう少し詳しく教えていただけませんか。
>>768
あっ、できました。

#include <stdio.h>
#include <time.h>

int main() {
int i;
time_t old, current;

time(&old);
for (i=0; i<200000000; i++) {
time(¤t);
if (current - old == 1) {
printf("%d\n", i);
}
old = current;
}

}

こんな感じでしょうか?
×
time(?t);
if (current - old == 1) {
 printf("%d\n", i);
}
old = current;


time(¤t);
if (current - old >= 1) {
 printf("%d\n", i);
 old = current;
}
ぬあ、"¤"なんて実体参照があるのか
>> 773
ありがとうございます。
>>774
なんか&currentって書こうとするとなっちゃいます。
でもこの方法だと無駄にwhile文回したりしないとできないんじゃないかと思えてきました。
Windowsだと何msおきにタイマーハンドラを呼び出すようなAPIがありますが、Linuxにはないのでしょうか?
すいません。Linux板いってきます。
780setitimer():03/08/21 11:49
(´-`).。oO(cygwinなのかLinuxなのか、どっちなんだろう?)
>>780
さりげなくヒントありがとうございます。
あれ、cygwinとlinuxってapiほとんど同じじゃないですか?
>>781
Linux板で聞いても確実に板違いといわれると思う。
「ほとんど同じ」というのはどちらもPOSIXをベースにしてるというだけで、
CygwinとLinuxだけじゃない。

Cygwin使っている人いますか? その9
http://pc.2ch.net/test/read.cgi/unix/1055250582/
783デフォルトの名無しさん:03/08/21 18:29
前に素数関連で質問をさせていただいた者です。こんにつは!
今、メルセンヌ素数を判定するルカス法の関数を見つけました。
で、この関数を用いて、非常に大きい素数の判定を行うとします。
しかし、大きな素数となると時間がかかる事は予想できている事なので、
当然1回(一度パソコンをつけている間)で判定しきれない場合も出てき
ます。←一週間ぐらいつけとけ!!って突っ込まれそう・・・・
なので、この関数の内容のループの部分を少しずつやって、ファイルに
どこまでやったかを保存して、みたいな方法を考えています。
でも、具体的にどうすればいいのかさっぱり思い浮かびません。
こんな感じにすればどう?ってアイデアがあればどなたかご教授くだ
さい。また、他の方法があれば些細な事でいいので教えてください。
(GIMPSみたいな事をやりたいと考えていただけると分かりやすいと思います)


784デフォルトの名無しさん:03/08/21 18:29
上で言っているコードです。
int lucas(int p){
char *l, *m;
char *lp, *mp1, *mp2;
int i, j, k;
int ca, x;
int ret = 1;
if (p <= 0) return 0;
if (p <= 2) return 1;
if ((l = (char *)malloc(p)) == NULL) return -1;
if ((m = (char *)malloc(p)) == NULL) {
free(l);
return -1;
}
785デフォルトの名無しさん:03/08/21 18:30
続き
for (lp = l + p; lp != l; ) *--lp = 0;
*(l+2) = 1; /* L(1) = 4 */
for (i = 2; i < p; i++) {
for (lp = l + p, mp1 = m + p; lp != l; ) {
*--mp1 = *--lp;
*lp = 1; /* 2^p -1 mod 2^p -1 = 0 */
}
*(l+1) = 0; /* L(i) = L(i) - 2 */
for (mp1 = m, j = 0; j < p; j++) {
if (*mp1++) { /* this bit is 1 */
ca = 0;
k = j;
for (mp2 = m; mp2 != m + p; ) { /* L(i) * L(i) */
x = *mp2++ + *(l+k) + ca;
*(l+k) = x & 1;
ca = x >> 1;
if (++k == p) k = 0;
}
その素数に燃やす熱意がよく分からない
787デフォルトの名無しさん:03/08/21 18:30
if (ca) {
while (*(l+k)) {
*(l+k) = 0;
if (++k == p) k = 0;
}
*(l+k) = 1;
}
}
}
}
x = *l;
for (lp = l + p; lp != l; ) /* L(p-1) == all 0 or 1 ? */
if (*--lp != x) {
ret = 0;
break;
}
free(m);
free(l);
return ret;
788デフォルトの名無しさん:03/08/21 18:31
>>786
あーコードの間に〜、まぁいいか。
素数・・・・・・・素晴らしいですよね!!
>>788
うざいので今度からはソースは貼らないでください。
>>783
>具体的にどうすればいいのかさっぱり思い浮かびません。

まずは本屋に行って、初心者用のC言語入門でも買いなさい。
791デフォルトの名無しさん:03/08/21 18:44
>>789
すいません。邪魔でしたね。


区切りのいいところで自動的に全て保存するようにすればいい
それでプログラムのスタート時に保存されたデータがあるかどうかを見て
あれば自動的に読み込む。
OSの機能を使えばもう少し気の利いたこともできるが
書き込み中に殺されても問題ないようにするのを忘れないよう
794デフォルトの名無しさん:03/08/21 19:04
>>792
プログラムの中の変数を全て保存しておくという事でしょうか?
やはり、そうするしかないですよね。(大変そうだ〜鬱)
795デフォルトの名無しさん:03/08/21 19:04
>>793
人がですか?パソコンがですか?
796デフォルトの名無しさん:03/08/21 19:06
2回目のセックス。
途中腹痛に見舞われますが慣れているのか我慢しながらのフェラ。
この女はかなりスタイルが良くて締まりも抜群なのでしょう。
援交女バリバリです。
無料ムービーはこちら
http://members.j-girlmovie.com/main.html
>>795
タスクが
798デフォルトの名無しさん:03/08/21 19:09
>>783
リエントリ可能な関数にフラグをつけておき、if (kbhit()) getchar();であるキー
が押されたらそこまでに必要な変数をすべてファイルに保存する。

次回起動時にオプションを付けるかファイル名を指定したらそのファイルから
必要な変数を読み取って試合続行。
799デフォルトの名無しさん:03/08/21 19:14
>>798
非常に参考になります。ですが、リエントリ可能というのは、
どういう事でしょうか?
kbhitはやめとけ
801デフォルトの名無しさん:03/08/21 19:22
for (i = 2; i < p; i++) {
...
}
ここの部分長い。別関数にすべき。

for (lp = l + p; lp != l; ) *--lp = 0;
forにまとめてインクリメントにするのが一般的。
for (lp = l; lp < l + p; lp++) *lp = 0;

for (mp1 = m, j = 0; j < p; j++) {
ポインタかカウンタかどっちかで、
for (mp1 = m; mp1 < m + p; mp++)
j = mp1 - m;
for (j = 0; j < p; j++)
m[j]をつかう。
802デフォルトの名無しさん:03/08/21 19:32
>>801
これは私が作ったわけではないです(汗)、もちろん私の方がこれ
を書いたであろう人よりレベル低いですよ。こんなスマートな
プログラムはまだ私には書けません。なので、そういったレベルの
高い指摘はうれしいのですが・・・・・・・ちょいと厳しい
803デフォルトの名無しさん:03/08/21 19:34
あんまりレベルの高い指摘じゃないよ。
ロジック見直してないし。
if (*--lp != x) {
ret = 0;
break;
}
をfreeしてreturn 0;するようにすればretいらないでしょ。
>>802
どれくらいのレベルか知らないけど、
プログラムの流れが追えなければ、
中間状態の保存なんて無理だぞ。
806デフォルトの名無しさん:03/08/21 20:06
>>805
そこん所はどうにかなりそうです。
for (i = 2; i < p; i++) {
の以降がネストの構造で、(インデントがなくなっていて本当に申し訳
ないんですが)まとまっているので、ここのループ1回の単位で保存して
おけば大丈夫っぽいです。また、内容も*lと*mの中身を配列としてあーだ
こーだしているだけなので、*lと*mを配列として内容を保存、pを保存、
てな感じにすれば大丈夫なはずです。
>インデントがなくなっていて本当に申し訳ないんですが

自分のサイトにでもテキストファイルのまま置いておけば問題ないんだから貼るな。
どうしても貼りたいなら、ちょっとした加工してインデントが見える工夫をしろ。
そもそも自分の書いたソースじゃないなら出展をポイントすれば充分。

そもそもおまえのレベルで長大な素数を(再)発見しようなんてのが無理。
ソーッス(素数、source)ね。











笑ってくれよ。
なぁ、アンタ。
809デフォルトの名無しさん:03/08/21 22:47
>>807
まぁ、そう言われてみればそうなんですけど、挑戦してみたい
んです。
>>806
1桁1bitの多倍長演算しているっぽいから、1桁16bitくらいで処理すれば、
速くなりそうだけど。
812デフォルトの名無しさん:03/08/21 22:55
どなたかFFTで計算ができる関数の置いてあるサイトとか知らない
でしょうか?(無謀)
FFTのソースなどどこにでもあるだろう?
「FFTで計算ができる関数の置いてあるサイト」の意味はよく分からないが
814デフォルトの名無しさん:03/08/21 23:03
>>813
そんなにいっぱいありますか?私がググった中ではソースが出てる
のは1つのサイトだけでした。そして、あまりに難しすぎて、利用
しようにも理解する事ができませんでした。(直接、乗算、除算
とかの関数じゃなくて、フーリエ変換を行う関数ならあるんですけど
そこからスタートでは無学な私では理解不能)
だいたいC言語の話じゃねーだろ。
>>814
どうgoogleで探したんだ?
fft source codeでいくらでも出てくるじゃないか
817デフォルトの名無しさん:03/08/21 23:09
>>815
確かに、いや本当は理由があったんです。
私にはC言語しか使えないという・・・・・・・・
それはさておき、下のサイトにはソースがあるのですが、私には
よくわかりません。このサイトの中のやつで乗算とか除算がやりたい
場合どうすればいいか教えてください。
(フォートランとCのやつがありますが、Cのやつで)
http://momonga.t.u-tokyo.ac.jp/~ooura/fftman/ftmndl.html
818デフォルトの名無しさん:03/08/21 23:10
>>816
すいません。私は英語圏のサイトはちょっと
Webの全サイトの80%は英語と言われているのに
英語恐怖症は痛手だね
820デフォルトの名無しさん:03/08/21 23:20
>>819
本当ですよ。特にプログラミングなんてのは(泣)、簡単な日常英語
みたいなのは分かるんですが、技術文書となるとチョット
>>812
結局何を知りたいのかが分からない
>>820
普通、逆なんだがな。技術英語の方が読める。
プログラマの場合。
文系SE?

で、817 の奴、そんな分かりやすいの他にないと思うんだが、
何が分からないんだ?
823デフォルトの名無しさん:03/08/21 23:43
>>822
あの、具体的にあのパッケージはどう使うものなのでしょうか?
MAKEFILEとかもGCC用とかで使えないし(使い方が分からない?)
ためしにコンパイルしても外部参照がどうのというエラーが出てしまうし、
どうにか計算するのに必要な部分だけを抜粋していただけるとあり
がたいです。
>>823
俺、そのソース普通に VC++ で使ってるぞ。
まあ、最小限必要な分は、fftsg.c だけで OK

void rdft(int n, int isgn, double *a, int *ip, double *w);
↑これが実信号のFFT

void cdft(int n, int isgn, double *a, int *ip, double *w);
↑これが複素信号のFFT

詳しくはコメント読め。英語読めないとか言うならもう使うな。
これ以上に分かりやすい奴で日本語コメント入った奴なんてない。
っていうか、プログラマ辞めたほうがいいよ、マジで。
825デフォルトの名無しさん:03/08/21 23:54
>>824
プログラマではないんです。ヘッポコ理系学生なんです。
ちょっと数値計算に必要になったので
>>825
情報系に友達作れ。
827デフォルトの名無しさん:03/08/22 00:02
>>826
見捨てないで下さい〜、回りもバカばっかでそんなヤツいないん
です。
おねがいです。計算をするのに必要な手順を教えて下さい。
例えば、
1、フーリエ変換
2、計算
3、逆変換
↑まったく適当ですが
とか、必要な関数とか手順がさっぱりなんです。
問題がどんなものかわからん。
あと宿題なら宿題スレへ。
829デフォルトの名無しさん:03/08/22 00:11
わかりました。逝ってきます。みなさんマルチとか言わないで下さいね
>>827
すげぇへたれっぷりだな。

そのソースの Managed C++ ラッパクラス、日本語コメント入り

http://www-ise2.ist.osaka-u.ac.jp/~iwanaga/csharp/sample/SpectrumAnalysis.zip
>>830=ウィルス
832デフォルトの名無しさん:03/08/22 15:01
決勝の結果です。
┏━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┓
┃   ┃  1 ┃  2 ┃  3 ┃  4 ┃  5 ┃  6 ┃  7 ┃  8 ┃  9 ┃  計┃
┣━━╋━━╋━━╋━━╋━━╋━━╋━━╋━━╋━━╋━━╋━━┫
┃東北┃ 0  ┃ 0  ┃ 1  ┃ 0  ┃ 2  ┃ 0  ┃ 0  ┃ 0  ┃ 0  ┃ 3  ┃
┣━━╋━━╋━━╋━━╋━━╋━━╋━━╋━━╋━━╋━━╋━━┫
┃常総┃ 0  ┃ 0  ┃ 2  ┃ 1  ┃ 0  ┃ 0  ┃ 2  ┃ 2  ┃ /  ┃ 7  ┃
┗━━┻━━┻━━┻━━┻━━┻━━┻━━┻━━┻━━┻━━┻━━┛



本当ですか?
#include<stdio.h>
int main(void){
int i;
for(i=17;i<=101;i=i+1)if((i%17)==0)printf("%d ",i);
return 0;
}
だと、ちゃんと実行されるのに、
#include<stdio.h>
int main(void){
int i;
for(i=17;i<=101;i=i++)if((i%17)==0)printf("%d ",i);
return 0;
}
だと無限ループになってしまうのはなぜ?コンパイラのバグですか?
#include<stdio.h>
int main(void){
int i;
for(i=17;i<=101;i=++i)if((i%17)==0)printf("%d ",i);
return 0;
}
にすればいいのか!(βακα)
835デフォルトの名無しさん:03/08/22 18:27
>>833-834
あの・・・ネタですよね?
× i=++i
× i=i++
○ i=i+1
○ i+=1
○ i++
○ ++i
837デフォルトの名無しさん:03/08/22 18:31
>>812
FFTWというライブラリが有名ですよ。 http://www.fftw.org/
matlab等でも使われてるらしいです。
838デフォルトの名無しさん:03/08/22 18:39
>>835
インクルリメントの仕組みを理解していなかった。あなたのようにおつむがよくないんで。
> i=i++
> i=++i

お馴染みネタな釣りかと思った
840デフォルトの名無しさん:03/08/22 18:44
結果が100bitを超えるような大きな値の累乗や乗算をしたいのですが、
それが出来るような関数やソースってありますか?
一応探してみたんですけど見つかりませんでした...
>>839
やっぱりネタか釣りみたいだぞ。インク「ル」リメントとか言っているし。
>>840
128bit整数型を持っている処理系を使うのが一番。
>>840
どうやって探したんだろう。
googleで「100bit 超える 関数」とかですか?
「多倍長整数」でもう一度探しなおせ
>>840
gmp
845デフォルトの名無しさん:03/08/22 19:35
>>840
多倍長演算か?
http://hp.vector.co.jp/authors/VA018507/index.html
ここ行ってみ。
846デフォルトの名無しさん:03/08/22 19:44
>>845
840じゃないんだけどさ、ここのサイトのってGccじゃないと使えないの?
VCじゃだめ?
847デフォルトの名無しさん:03/08/22 19:59
i=i++ は Linuxでは正しく動作するのに、FreeBSDでは動かない。FreeBSDは糞だ。
849783:03/08/22 20:09
お騒がせしました>>783です。
とりあえず、配列や変数をファイルに保持しておくというアイデアで進める
事にしたのですが、プログラムの都合上、保持してあるデータをいじられると
非常に困った事になるので、バイナリで保持しておこうという事にしました。(
サイズの関係もありますが)しかし、バイナリを扱うのは初めてでしてよくわかり
ません。また、VBのようにSplit関数でもあれば、全部一気に読みこんで、
分割してというような方法もとれるのですが、そうもいきません。
そこで、ちょっとした例をソースとして書いていただけると非常に助かる次第
です。お願いばかりですがよろしくおねがいいたしまう。
char *a,*b;
と宣言されていて、メモリを確保後、要素数はA,Bになっているとします。
これをスマートに書き込み、読み込み、配列に代入し直す方法を
おねがいしまふ。
850783:03/08/22 20:10
>>849
↑文字列ではなくて、配列の要素の中に数字が入っています。
>>849
要素数A+Bで一気にfread()して、malloc()した後memcpy()で分割すればいい
じゃん。
852デフォルトの名無しさん:03/08/22 20:58
>>842-847
ありがとうございます。勉強になりました。
「多倍長演算」という言葉は知りませんでした。
構造体の場合
+----------+--------------+----------------+
|        | 普通に宣言   | ポインタで宣言   |
+----------+--------------+----------------|
| アドレス   | (*str).mbr    | &str->mbr      |
+----------+--------------+----------------|
| 値      | str.mbr      | str->mbr      |
+----------+--------------+----------------+
変数の場合
+----------+--------------+----------------+
|        | 普通に宣言   | ポインタで宣言   |
+----------+--------------+----------------|
| アドレス   | &name      | pname        |
+----------+--------------+----------------|
| 値      | name       | *pname       |
+----------+--------------+----------------+

あのう・・・&と*の使い方ってこれであってるんですか?
&と*の使い方に一貫性が無くて納得できないんですが・・・
だれか、>>848 の相手してやれよ〜
>>853
構造体の場合
      普通に宣言 ポインタで宣言
アドレス  &str.mbr   &str->mbr
値     str.mbr    str->mbr

だろ。
>>848
i=i++; の結果はANSI-Cでは「未定義」です。ディスクがフォーマット
されたって文句は言えないのだよ。
857デフォルトの名無しさん:03/08/22 21:32
>>841
ネタじゃないです。でもはやとちりみたいなもんだから迷惑かけたのは事実。
前に++があると先に1を加えて後ろにあると先に代入するんですよね。
頭がこんがらがりそうな話だ。
>>856
knkたんには、それがわからんのです。

      ヽ ̄ ゙̄\
       \  ヽ \
         ヽ    ゙!  / ̄ ̄ ̄ ̄ ̄ ̄ ̄
          /      |< 呼んだー?
       /     ,.イ  \_______
      ∠___/ :|`ヽ.、
          ノ     '!   \-、
     _,.=''1      ヽ,   `'
      ヽ'" i|       |
         !       |
>>848
      ヽ ̄ ゙̄\
       \  ヽ \
         ヽ    ゙!  / ̄ ̄ ̄ ̄ ̄ ̄ ̄
          /      |< FreeBSD-users-MLの連中にはそれがわからんのです
       /     ,.イ  \_____          (⌒;:)
      ∠___/ :|`ヽ.、     (⌒ :::..ヽ  (⌒::;
          ノ     '!   \-、( ⌒Y:: : : :::::..;;:: j
     _,.=''1      ヽ,   ...;:::/...::: : :⌒ ̄""⌒ヾ
      ヽ'" i|    : :::.....:: ::: ::/::: ; ": ̄       ::)
         !      ,,..:;::::;::::::/:'(: : : ;;:;:    ⌒ ⌒)
               ノ.....:::;::::/;:/:::::::::ノ;;::::::; :  ... ....::::ノ
出ると思ったknkタンw
857はすっかり放置されているな
なつかしいな、knk
864デフォルトの名無しさん:03/08/23 08:13
>>851
簡単でいいのでソースをさらしていただけないでしょうか?
また、その方法は読み込みだけのようなので、書き込みの
方も教えていただけるとこれ幸いです。
865864:03/08/23 08:37
質問です。
バイナリで、ファイルを閉じるまでに、何度か書き込みを行った場合、データには
自分で何かしない限り区切りって入りませんよね?
866864:03/08/23 08:52
何度も質問してすいません。Cでプログラムのあるパスを取得する
にはどうすればよいのでしょうか?DOSプロンプトでプログラムを
走らせながら、別の事をユーザーがするかもしれないので、
カレントパスが移動してしまうとまずい事に・・・・・・・
あと、一応使っているのはVC++です。
>>866
コールバックする。ウインドウズアプリケーションなら普通に使うが、
それをコンソールに使用する。
868864:03/08/23 09:14
>>867
非常に申し訳ないんですが、コールバックとはどういう事で
しょうか?また、VC++ですが、使えるのはC言語だけな
ので、クラスとかはさっぱりなのですがOkですか?
>>865
バイナリだから当然です。

>>866
最初に一度カレントディレクトリを取得して、
あとは常に絶対パスでアクセスすればよい。
>>869
>バイナリだから当然です。

何を訳の分からんことを。
訳の分からない質問に訳の分からない回答
>>871
バイナリだから当然です。
873864:03/08/23 10:52
>>869
そのカレントパスを取得するという所がどうやるのか
わからないのですが
874デフォルトの名無しさん:03/08/23 10:57
GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
>>874
すみません、Xlib使いたいんですけどどこの

     開 発 環 境 ス レ

に行けばいいですか?
>>873
getcwd()でどうすか
>>868
OSに処理を返しながら起動させるもの。
猫でも分かるのSKDの所に載っているよ。
後、VCはVCスレあたりで聞いたほうが良いよ。

★初心者にVisual C++を教えるスレ★ Part7
http://pc2.2ch.net/test/read.cgi/tech/1056280510/l50

Win32API質問箱 Build13
http://pc2.2ch.net/test/read.cgi/tech/1059549320/l50

【初心者歓迎】C/C++室【環境依存OK】
http://pc2.2ch.net/test/read.cgi/tech/1059041347/l50
夏だなぁ。
>>877
OSとは限らん。
>>879
同意。関数ポインタを渡す関数に渡される関数はほぼ間違いなくコールバック関数になる。
夏だなぁ。
882864:03/08/23 11:49
>>877
親切にありがとうございます。
しかし、VBから呼ぶ、擬似外部関数として作るので、
面倒なのでShellの時に、APP.PATHで取得した
パスを引数で与えてやろうと思います。
大変ご迷惑をおかけいたしました。
883デフォルトの名無しさん:03/08/23 11:54
ふと思ったんだけど、ファイルをOpenして、それがなくて、
NULLが返ってきてた場合って、フィルポインタをCloseする
必要てあるんの?
884デフォルトの名無しさん:03/08/23 11:54
>>883
ごめん、ファイルポインタ
885デフォルトの名無しさん:03/08/23 11:57
セルフクンニのイメージ図
http://www.bendability.com/pics.php?Album=archives&Pic=1196

>>883
ありません。ハンドルと呼ばれる全てのものについてそうなので安心してください。
886デフォルトの名無しさん:03/08/23 11:59
>>885
マジメなヤツなのか、危ないヤツなのかよくわからんな
887>>849:03/08/23 12:11
char *l, *m;
int p
FILE *fp1;

書き込み
fp1=fopen("CulculateData","wb");
fwrite(&p,1,sizeof p,fp1);
fwrite(l,1,p,fp1);
fwrite(m,1,p,fp1);
close(fp1);

読み込み
fp1=fopen("CulculateData","rb"); /*ファイルが存在するかたしかめて存在する場合すべて読み込む*/
if(fp1!=NULL){
fread(work,sizeof p,1,fp1);
p=*work;
fread(l,sizeof l,1,fp1);
fread(l,sizeof l,1,fp1);
}

ファイルの先頭にIntで要素数をくっつけるようにしました。
こんな感じでOKでしょうか?
>>883
NULLが返ってきた場合、fcloseには何を渡したらいいんだ?
>>875
Xlibに関する質問ー01ー
http://pc2.2ch.net/test/read.cgi/tech/1060005170/l50
>>887
こらこらfopenの戻り値をcloseに渡してどうする
で、これを警告しないコンパイラだとpにも妙なことが起きても知らんぞ
891デフォルトの名無しさん:03/08/24 02:34
for(i=0; i<100; i++)
 gikoneko[X] = gikoneko[X] | gikoneko[i];

これをアセンブラで書くとどうなりまつか?
-Sでアセンブラ出力しない?
893デフォルトの名無しさん:03/08/24 02:47
フリーのコンパイラなんで出ないみたいです。
gcc bcc lsicあたりは全部出せるはずだけど
確かめもしないで書いてたら笑い
マイナーコンパイラ使ってたら大笑い
それでもwatcomやdigitalmarsなんかは出せそうだけど
895こうだな:03/08/24 03:15
 xor edx, edx
 mov eax, 100
l1:
 or edx, _gikoneko[eax*4-4];
 dec eax
 jnz l1
 mov eax, _X
 or _gikoneko[eax*4], edx
 mov _i, 101
>>891
>>これをアセンブラで書くとどうなりまつか?
微妙な質問だな。
誰かがZ80のコードを提示して、他の誰かがPS2のEEのコード出して
またまた誰かがMMX使用のコードだしてって有り得ない話じゃないぞ。
x86系の事だと思うんだけど…
897あるやらないやら:03/08/24 03:59
move r1, 0
move r0, 4 * 100
l0:
sub r0, 4
or r1, _gikoneko[r0]
test r0
jmp nz, l0
move r0, 4 * _X
or _gikoneko[r0], r1
move _i, 101
よく考えたら、iは最後100だな。
どうでもいいが。
899897:03/08/24 05:13
反応しろよてめーら
900デフォルトの名無しさん:03/08/24 08:28
900げっと
901>>849:03/08/24 08:39
nt main(int argc,char* argv[]){ ←二個目の引数でパスを渡す
char path[20];
   
strcpy(path,argv[2]);
chdir(path)
こんな感じでやっているんですが、コンパイルすら通りません。
VCでchdirとか入力すると引数候補とかが表示されるのに、
それは定義されていませんんと出ます。なぜでしょうか?
環境==VC++
(VBスレに誤爆してしまった 笑)
んtね
エラーメッセージ読め
904 ◆ZtXjKqCmiQ :03/08/24 08:58
>>901
関数が定義されていません?
C++スレに行ってください。

というかVC++スレに。
905904:03/08/24 09:00
#include <direct.h>と名前欄に入れたらトリップになっちゃった・・・
イベントビューアをリアルタイムで監視して、新しくイベントが追加された
場合はそのイベントのソースを取得する・・・というのはどうすれば良いでしょうか。
わーっつたよVCすれ行くよ。でも、別にVCとか
関係ねー内容だと思うんだけど〜
とにかくC言語には関係ない。Cではエラーにならない。
>>901
ntが未定義ならエラーになるねぇ。

>>906
>>1参照でどうぞ御大事に。
しかし、いつも思うけど、
ディレクトリ操作が標準関数にないのは面倒な話だよな。
まぁ、ディレクトリのないファイルシステム(MS-DOS ver 1.0 とかそうだっけ?)もあるし、
分からんでもないんだけど...。
>>910
BTRONにもないんだよぉ……
RDBを永続的データ保存形式として採用してるOSがあったとしたら、
Cは標準関数としてデータベース操作関数ってものを持たなくてはいけないわけ?
CはOSに必要とされる関数の最小公倍数を提供するものでもないし、
そもそも、C関数の形式はのOSのインタフェイスとして必須なわけでもない。

みんなUNIXの概念に毒されすぎ。
それならストリームを扱う関数は(ry
最近のOSは、どれも階層的なディレクトリ構成を持っている[ように見える]から、
階層ディレクトリを扱う、準標準ライブラリが欲しくなったりする。
POSIXみたいな、実装側からのアプローチでなく、
言語側からのアプローチとして...
>>913
冗談抜きでHosted Environmentの存在意義を疑いたくなることよくあるよ
ぶっちゃけUNIX以外は全てFreestanding Environmentでいいんじゃないか?
ライブラリはライブラリで別の規格があっていいはず、あるべきと言いたい
>>915
言語として、環境ごとに標準ライブラリを定めるのはいいけど、
独立した環境とみなせるものの数って、そんなに多くはないような。
だったらOS標準のAPIさえあればいいってことにならない?
言語側でそういったものを定めること自体、OSベンダとそのユーザに
なんの利益があるのかと。
現行の標準ライブラリが必ずしもいいとは言わないけど、
これをいったん捨てたら、新たなライブラリの規格なんて永遠に定まらないと思う。
定めても誰も守らないSQL99みたいな存在かも。
UNIX/Cの影響力は良くも悪くも偉大だってことなんかなあ。
おまえらなあ時代背景を無視してムチャ言うなと。当時の計算機の機能抽象化は
これで十分かつポータブルだったんだよ。ぶっちゃけもうCは骨董言語だからな。
>Cは骨董言語

具体的にどんなところが?
GCとか言い出すナンチャッテPGはもう見飽きたよ
オブジェクト指向
じぇねりっく
普通Cはアセンブラ想像しながら書くだろ。
C++ でも想像するけどね。
923デフォルトの名無しさん:03/08/25 09:40
今でも現場で使われている言語を「骨董」と言う917は、まぁアレだ
925デフォルトの名無しさん:03/08/25 09:56
そういうのはさあ、「生きている化石」と呼ぶんだよね。
>>924 は美術館に飾られている昔の芸術作品を
骨董とは言わないのか?
「void型を返す関数へのポインタ」の配列を
指す関数ポインタはどう書けばいいんでしょうか?

えっと、つまり
char foo[] = "ABCDE\0";
char *boo = src;
と変数を作って
printf("%c", boo[2]);
みたいにポインタを配列のように使うのを関数ポインタでやりたいのです。
>>926
現場で使う=美術館で飾る
なのか、お前の言語感覚では?
929デフォルトの名無しさん:03/08/25 10:19
>>927
void型を返すってのは戻り値なしととっていいのか?
930929:03/08/25 10:21
「void型を返す関数へのポインタ」の配列まではOKだが、それをさす「関数」ポインタってのがわからん。

あと、char foo[] = "ABCDE\0"; の\0はいらない。
931927:03/08/25 10:23
>>929
まぁ、そうなりますね。
うん。最後の「指す関数ポインタ」ってのが全く意味不明だよな。
それ以外なら普通にtypedefして配列作ればいいだけだし
ポインタにしたいなら*付けて先頭を代入するだけだし
それを返す関数も簡単だし。

宿題でtypedef使っちゃダメ、な気配もするけど。
933927:03/08/25 10:26
>>930
関数ポインタっていうか、ただのポインタとして宣言してしまうと
引数が取れないじゃないですか。
ポインタ名の最後に"()"が付いてないと、ポインタ越しで関数を呼び出すときに
BCCでは「関数でないものを呼び出している」と怒られます。
934929:03/08/25 10:27
「void型を返す関数へのポインタ」の配列を指すポインタを返す(または引数に取る)関数へのポインタか?
typedef void voidfn_t(int arg1, int arg2);
voidfn_t *table[] = { fn1, fn2, fn3, };
voidfn_t **p = table;
table[0](1, 2);
(*p)(1, 2);
みたいな
936929:03/08/25 10:29
>>933
ん?
typedef void (*func_t)(int,char *);
func_t funcpa[3];
(中略)

funcpa[1](0,NULL);
funcpa[0](80,"string");

こんな風にできるはずだけど?
引数は何を持つんだ?&typedef使っちゃ駄目なのか?
938929:03/08/25 10:34
>>933
そのエラーは>>935の5行目で?4行目はOK?
939935:03/08/25 10:36
いや、俺は927じゃないんだが
940929:03/08/25 10:41
>>939
あ、すまん。935はなんの問題もないわ。
941927:03/08/25 10:41
>>936
やりたいことは >>935 さんの方が近いです。
関数ポインタの配列を作るところまではいいのですが、
それをそのまま参照では都合が悪いのです。
ちょっとコード書いてみたので、分けてカキコします。

>>937
引数はいろいろです。型チェックはできなくてもいいので、
どんな引数でも受け取りたいのです。
typedefは使ってもOKです。
942927:03/08/25 10:42
void foo(int n) {
  printf("%d\n", n);
}

void boo(char c) {
  printf("%c\n", c);
}

void (*FuncArr[])() = {
  foo,
  boo,
};

????? ArrPtr; /* 何かしらの文でポインタを宣言 */
ArrPtr = FuncArr;

ArrPtr[0](5);
ArrPtr[1]('n');

と、いう感じ
文字リテラルってCではcharじゃなくてintだったような。
引数の型をチェックできないから(ry
> 引数はいろいろです。型チェックはできなくてもいいので、
> どんな引数でも受け取りたいのです。

配列への格納時と呼び出し時にキャストしてやらんと駄目になるな
void (**ArrPtr)()=FuncArr;かな。わかんないけど。
>>944
格納時はいらないんじゃない?引数の型のリストを省いているから。
とりあえずtypedefすりゃ簡単になるって。
あと、引数が不明(or可変)なら
typedef時のプロトタイプ引数リストをあえて省略すれば。

union使う手もあるけどな。
>>928
芸術作品に展示する以外に使い道があるとでも?
まだやってんおか、そもそも現場で云々に
「げいじゅつさくひん」を持ち出すのがバカタレ
>>945
ああ! それです! 動きました!
でもなんか意外と単純だった...何でこんなのに一晩悩んだんだろ?
鬱だけどせっかく分かったんでこれからプログラミングします。
つまらんことでお騒がせしました。
951927:03/08/25 11:09
>>947
これからは typedef を使うようにします。
でも実は typedef void (*func_t)(int,char *) の意味が分かってなかったり...
これで func_t っていう void ???(int, char*) の関数へのポインタの型が
できているのはわかるのですが、なぜそうなるのかが...
typedef unsigned int UINT; とかしか見た事がないので。
関数ポインタの書式は汚いからな!
signal関数なんかtypedefしないとhttp://www.bohyoh.com/CandCPP/C/Library/signal.htmlこんなになっちまう
>>951
変数の宣言文と同じ風に書いて、頭に typedef を書く、
というのが typedef の文法。
typedef void (*sigh_t)(int);
sigh_t signal(int sig,sigh_t func);

typedefすればこれだけ見やすくなる。
>>953
なるほど、そう言われれば簡単に理解できそうな...
大抵の本には、「前に書いた型にあとに書いた別名をつける」みたいな事が
書いてありますけど、あれじゃ >>936 は理解できませんな。

説明thx!


そういえば配列を表す型ってのも
typedef int array_t[10]; こうかくな。関数定義の頭にtypedefか。
957956:03/08/25 11:31
関数定義じゃなくて変数定義
#include <stdio.h>

void (*(*foo3(void (*fp)(void (*)(int))))(void (*)(int)))(int);

typedef void (*FP1)(int);
typedef void (*FP2)(FP1);
typedef FP1 (*FP3)(FP1);

void foo0(int n ) { printf("%d\n", n); }
FP1 foo1(FP1 fp) { return fp; }
void foo2(FP1 fp) { fp(2); }
FP3 foo3(FP2 fp) { fp(foo0); return foo1; }

int main(void)
{
foo3(foo2)(foo0)(4);
return 0;
}
>>955
大抵の本の作者はtypedefをそこまで使い込めてないか、
説明放棄しているか、孫引きしているからだね。

>953みたいに現場で使い込んでいる奴の説明は、
端折っているように見えて実は分かりやすいね。
#参考にさせてもらおう。
あー、疲れた。
そういえば、Linuxの開発MLでも、「C++でカーネル書き直そうよ」
っていう厨房がたまに出没するなあ。
>>960
BNFくらい(ry
「Cで初めて書かれたプログラム」とか「すごいハカーの作品」とかは、骨董・作品
Cという言語そのものは、美術で言えば、水彩画・油絵といった、道具・手段
プログラムは、年代によって変化する、技術・技法
>>964
ぜんぜんわからん
一体それの何をCのどこに比喩しかったんだ?

# 漏れは16年目のC++屋だが
966デフォルトの名無しさん:03/08/25 22:12
void ClearCanvas(int w, int h, int col, int *cnv){
int *p;
int *max = cnv+(w*h);

for(p=cnv; p<max; p++){
*p=col;
}
}

colで領域を埋めるんですが、遅いんです。
100倍速にするにはどうすればいいですか?
> 100倍速にするには

for(p=cnv; p<max; p+=100) {
*p=col;
}
>>967
ワラタ
>>966
めむこぴーだ!
>>966
void ClearCanvas(int w, int h, int col, int *cnv)
{
#if UINT_MAX != 0xFFFFFFFFu
#error その CPU/コンパイラ 用のコードに変えてね
#endif
 __asm {
  mov ecx, w
  mov edx, h
  imul ecx, edx
  mov eax, col
  mov edi, cnv
  rep stosd
 }
}
971デフォルトの名無しさん:03/08/26 00:16
VCインストールしたらcygwinでのコンパイルですべてヘッダファイル参照できなく
なりました。どうしたら回避できますか?
972デフォルトの名無しさん:03/08/26 00:28
INCLUDEって環境変数。かもしれない
973デフォルトの名無しさん:03/08/26 00:40
INCLUDE禍しるみたいです。そこでVCのLIBフォルダへのパスを退避させて
試してみたのですが、それでもだめでした・・・
タダ単にcygwinがおかしいみたいです。お門違いですが、gccが参照する
ヘッダファイルのパスが書いてある設定ファイルは何かとかどなたか教えてください。
974デフォルトの名無しさん:03/08/26 00:58
/usr/include /usr/local/include
あと-Iオプション
のような気がします
gcc -v
976966:03/08/26 01:07
>>969-970
ありがとうございます。すこし速くなりそうです。
977デフォルトの名無しさん:03/08/26 01:10
>>970
ediってなに?
978973:03/08/26 01:12
#include "..." search starts here:
#include <...> search starts here:
/usr/include/w32api
/usr/lib/gcc-lib/i686-pc-cygwin/3.2/include
/usr/include
End of search list.
client.c:10:21: stdio.h : No such file or directory
client.c:11:22: string.h : No such file or directory
client.c:12:25: sys/types.h : No such file or directory
client.c:13:26: sys/socket.h : No such file or directory
client.c:14:22: sys/un.h : No such file or directory
client.c: In function `main':
client.c:20: storage size of `addr' isn't known
client.c:31: `PF_UNIX' undeclared (first use in this function)
client.c:31: (Each undeclared identifier is reported only once
client.c:31: for each function it appears in.)
client.c:31: `SOCK_STREAM' undeclared (first use in this function)
client.c:44: `AF_UNIX' undeclared (first use in this function)
client.c:60: `stdin' undeclared (first use in this function)

・・・/usr/includeみてますね・・・・でも見つからないっていいます・・・
謎だ・・・
979デフォルトの名無しさん:03/08/26 01:34
わしもわからんので
”cygwin + mingwn + gcc 相談室”
ってのにいってみたら?
980デフォルトの名無しさん:03/08/26 01:56
1000
>>977
デスティネーション インデックス レジスタ。
movsb とか stosb とかの出力アドレスを指定するのに使えるけど、
普通の 32/16 ビットレジスタとしても使える。
埋め立てしないの?
んじゃ、埋め立てスタート〜
984
985
Intel 9x86 Family?
987デフォルトの名無しさん:03/08/27 11:24
>>986
コプロセッサの i987
(すまん、埋め立てなのに上げてしまった)
Intel Pentium VII 989GHz
990次スレ案内:03/08/27 11:57
C言語なら俺様に聞け! Part 64
http://pc2.2ch.net/test/read.cgi/tech/1061779941/l50
991次スレ案内:03/08/27 11:58
C言語なら俺様に聞け! Part 64
http://pc2.2ch.net/test/read.cgi/tech/1061779941/l50
992次スレ案内:03/08/27 11:58
C言語なら俺様に聞け! Part 64
http://pc2.2ch.net/test/read.cgi/tech/1061779941/l50
993次スレ案内:03/08/27 11:58
C言語なら俺様に聞け! Part 64
http://pc2.2ch.net/test/read.cgi/tech/1061779941/l50
994次スレ案内:03/08/27 11:59
C言語なら俺様に聞け! Part 64
http://pc2.2ch.net/test/read.cgi/tech/1061779941/l50
記念カキコ v(^-^*)
(*^o^)ノシ 996だよ
997名無し:03/08/27 12:45
記念カキコ v(^-^*)
998名無し:03/08/27 12:45
記念カキコ v(^-^*)

999名無し:03/08/27 12:45
記念カキコ v(^-^*)







1000デフォルトの名無しさん:03/08/27 12:45
1
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。