2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

C言語なら俺に聞け! Part 〈56〉

1 :【プログラマは如何に手を抜くか?】:03/05/10 13:59
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限Googleで検索を。

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

コンパイラを探しているなら >>2-13 を。

上記を逸した場合の結果は激しく未定義だゴルァ!!

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/

2 :デフォルトの名無しさん:03/05/10 14:00
古スレ1 http://pc.2ch.net/tech/kako/1020/10203/1020361918.html
古スレ2 http://pc.2ch.net/tech/kako/1020/10207/1020703159.html
古スレ3 http://pc3.2ch.net/test/read.cgi/tech/1026225445/
古スレ4 http://pc3.2ch.net/test/read.cgi/tech/1029336048/
古スレ5 http://pc3.2ch.net/test/read.cgi/tech/1031757171/
古スレ6 http://pc3.2ch.net/test/read.cgi/tech/1032160148/
古スレ7 http://pc3.2ch.net/test/read.cgi/tech/1032361924/
古スレ8 http://pc3.2ch.net/test/read.cgi/tech/1033204295/
古スレ9 http://pc3.2ch.net/test/read.cgi/tech/1034785350/
古スレ10 http://pc3.2ch.net/test/read.cgi/tech/1034863796/
http://pc2.2ch.net/test/read.cgi/tech/1034785925/
http://pc2.2ch.net/test/read.cgi/tech/1034785992/
http://pc2.2ch.net/test/read.cgi/tech/1035474976/
http://pc2.2ch.net/test/read.cgi/tech/1031758069/


3 :デフォルトの名無しさん:03/05/10 14:00
だからCで画像うんぬんは無理があるのよ。
Javaにしなさい。パッケージawtのGraphicsクラスのメソッド
g.drawImage(im,50,50);で一発で出るのよ。(imはImageで初期画済みね!gもGraphicsで)
コード全部で10行いかないわよ。


4 :デフォルトの名無しさん:03/05/10 14:03
前すれ
http://pc2.2ch.net/test/read.cgi/tech/1051528386/

5 :デフォルトの名無しさん:03/05/10 14:04
>>1
スレタテモティカレ

6 :デフォルトの名無しさん:03/05/10 14:11
>>979
あんたなに言ってのよ!
fgetsはファイルから1行読み込むのよ。
char *str;
int flag=0;
do{
if(flag==1)
printf("もう一度入力しろアホ");
gets(str);
if(10<(strlen(str)))
break;
flag=1;
}while(1);
まったくJava嫌いの人はどっかいっちゃったの?

7 :デフォルトの名無しさん:03/05/10 14:12
>6

8 :デフォルトの名無しさん:03/05/10 14:12
>fgetsはファイルから1行読み込むのよ。
>fgetsはファイルから1行読み込むのよ。
>fgetsはファイルから1行読み込むのよ。
>fgetsはファイルから1行読み込むのよ。
>fgetsはファイルから1行読み込むのよ。
>fgetsはファイルから1行読み込むのよ。
>fgetsはファイルから1行読み込むのよ。
>fgetsはファイルから1行読み込むのよ。
>fgetsはファイルから1行読み込むのよ。
>fgetsはファイルから1行読み込むのよ。
>fgetsはファイルから1行読み込むのよ。
>fgetsはファイルから1行読み込むのよ。
>fgetsはファイルから1行読み込むのよ。
>fgetsはファイルから1行読み込むのよ。
>fgetsはファイルから1行読み込むのよ。
>fgetsはファイルから1行読み込むのよ。
>fgetsはファイルから1行読み込むのよ。
>fgetsはファイルから1行読み込むのよ。
>fgetsはファイルから1行読み込むのよ。
>fgetsはファイルから1行読み込むのよ。
>fgetsはファイルから1行読み込むのよ。
>fgetsはファイルから1行読み込むのよ。
>fgetsはファイルから1行読み込むのよ。
>fgetsはファイルから1行読み込むのよ。
>fgetsはファイルから1行読み込むのよ。
>fgetsはファイルから1行読み込むのよ。
>fgetsはファイルから1行読み込むのよ。


9 :デフォルトの名無しさん:03/05/10 14:13
ファイルというかストリーム
stdinもストリーム

10 :デフォルトの名無しさん:03/05/10 14:13
> char *str;
> gets(str);

何ヤってんの?

11 :デフォルトの名無しさん:03/05/10 14:15
>>9
はいはい、Java子ちゃん、はじっこへ。

12 :デフォルトの名無しさん:03/05/10 14:15
>>11
えっ!?
Javaなんか知らないけど(^_^;)

13 :デフォルトの名無しさん:03/05/10 14:15

 ま た J a v a 厨 か

14 :デフォルトの名無しさん:03/05/10 14:17
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/fgets.3.html

streamって書いてあるYO!

15 :デフォルトの名無しさん:03/05/10 14:18
あらやだ。
char str[10];じゃない
getsは文字配列に格納よ(*^_^*)//

16 :デフォルトの名無しさん:03/05/10 14:22
どうやったらfgets()がファイルからの読み込みって言う考えをもてるのやら。

17 :デフォルトの名無しさん:03/05/10 14:23
で、Windows2000で動くリンカーは?(^o^*)

18 :デフォルトの名無しさん:03/05/10 14:24
ああ。fgetsのfってfileのfだったっけ?

19 :デフォルトの名無しさん:03/05/10 14:25
ほかになにがある

20 :デフォルトの名無しさん:03/05/10 14:25
float

21 :デフォルトの名無しさん:03/05/10 14:26
>>15
10文字以上の場合どうなるんだ
阿呆か馬鹿か

22 :デフォルトの名無しさん:03/05/10 14:27
>>16
なに言っての?fgetsはファイルポインタに関連ずけられたファイルから文字列を
読むのよ!
FILE *fp:
char str[10];
fopen("AHO.txt","r");
fgets(str,80,fp);
fclose(fp);
こうやって使うのよ!

23 :デフォルトの名無しさん:03/05/10 14:27
fabs - ファイルから数字を読み込み、絶対値を返す。

24 :デフォルトの名無しさん:03/05/10 14:28
>>22
fopenの戻り値は無視か?

25 :デフォルトの名無しさん:03/05/10 14:28
> 関連ずけ
> 関連ずけ
> 関連ずけ
> 関連ずけ
> 関連ずけ


は、いいとして、
> char str[10];
> fgets(str,80,fp);
またか


26 :デフォルトの名無しさん:03/05/10 14:30
ファイルストリーム、もしくはファイルハンドルと呼ぶと思うが
ファイルポインタというと現在操作している位置の事だよな

27 :デフォルトの名無しさん:03/05/10 14:31
>>26
俺はFILE *のことをファイルポインタと読んでいるけど、違うのか?
Perlだったらファイルハンドルというけど。

28 :デフォルトの名無しさん:03/05/10 14:34
ANSI C言語辞典では走査位置をファイル位置指示子
FILE* をファイルポインタとして区別してたな。規格的にはどう
表現されているんだろう。

29 :デフォルトの名無しさん:03/05/10 14:35
ファイルハンドルは非ANSIのopenのヤツなどとまぎらわしいので却下

30 :デフォルトの名無しさん:03/05/10 14:35
あらまたやっちゃった。
fp=fopen("AHO.txt","r");
じゃないとfclose();の引数がダメね!



31 :デフォルトの名無しさん:03/05/10 14:36
>>29
openの場合はファイルディスクリプタじゃないか?

>>30
その前にfgetsだろ

32 :デフォルトの名無しさん:03/05/10 14:38
>>30
fpがヌルの場合はどうするんだ。

33 :デフォルトの名無しさん:03/05/10 14:39
>>30
素直にVBやっとけ

34 :デフォルトの名無しさん:03/05/10 14:42
>>31
>openの場合はファイルディスクリプタじゃないか?
確かに…
当方DOS->Winなもので

35 :デフォルトの名無しさん:03/05/10 14:45
>>34
DOSだとファイルハンドルと言うのか。
スマソ UNIXだと決めつけていた

36 :デフォルトの名無しさん:03/05/10 14:46
ハンドルでもポインタでもなんでもいいよ

37 :デフォルトの名無しさん:03/05/10 14:46
そうそう。要は読み書きできればいいの。

38 :デフォルトの名無しさん:03/05/10 15:13
>>2-13 にコンパイラのリンクが無いのは仕様ですか


39 :デフォルトの名無しさん:03/05/10 15:13
【コンパイラ】
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

40 :デフォルトの名無しさん:03/05/10 15:34
ハンドルは0以上の数字であり。ファイルポインタは機械固有の
値だな。

41 :デフォルトの名無しさん:03/05/10 15:42
>>40
突込みどころ満載だな、釣りか ?

42 :デフォルトの名無しさん:03/05/10 16:02
>> http://pc2.2ch.net/test/read.cgi/tech/1051528386/954
標準Cでは無いですが。予め実行フォルダにbitmap.bmpを作っておく必要あり。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=999294620&res=61

43 :デフォルトの名無しさん:03/05/10 18:40
パスワードをがあっているかどうかの判断の時ですが(因みにパスワードはnekoです)

char pw[80];
gets(pw);
if(!strcmp("!neko",pw))printf("正解");

で出来るのですが、文字列の比較はstr系を使うしかないのでしょうか?
数字でしたら if(pw==30)とか出来ますが。


44 :デフォルトの名無しさん:03/05/10 18:44
memcmpでもいいし文字コードがわかっているなら一バイトずつ比較してもいい。

でも "!neko"と比較してたらだめだろう。

45 :デフォルトの名無しさん:03/05/10 18:52
あ、間違えました(--;

char pw[80];
gets(pw);
if(!strcmp("neko",pw))printf("正解");

ですね
どうもありがとうございました。


46 :デフォルトの名無しさん:03/05/10 19:09
>>43
==で判定したいのならC++とかでやるしかない

47 :デフォルトの名無しさん:03/05/10 19:10
マテマテマテ >>45
読み込みにgets()を使うのはやめれ
しかもパスワードを読み込むような用途って・・。
fgets(pw,sizeof(pw),stdin)を強くお薦め

48 :デフォルトの名無しさん:03/05/10 19:37
いいだろ別に、それをそのまま使うってわけでもねぇんだし、
例えとして出しただけだろ!
おまいはここにコード書くときも
いちいちエラーチェックまで入れたのを
書けってのかよ


49 :デフォルトの名無しさん:03/05/10 19:48
>>48
逆切れすんな。

お前が書いたコードを見た奴が真似しちゃうかもしれないだろ?
そういう奴のためにも>47のように補足しておくのは悪いことじゃねーだろ。

50 :43,45:03/05/10 20:04
当方のlvが低いため付いて言ってませんが、
とりあえずmemcmpなる物を使って同じのを作ってみました。

#include <stdio.h>
#include <string.h>

int main(void)
{
char pw1[80];
char pw2[]="neko";
printf("パスワード: ");
gets(pw1);
if(!memcmp(pw1, pw2,4)) printf("正解\n");
else printf("不正解\n");

return 0;
}

これで出来ましたが、memcmp内のcountの4を10にすると動きませんでした。
ご指摘宜しくお願いします。

51 :43,45:03/05/10 20:11
ちなみに4から8まではうまく動きました。

>46さん
まだC++は触った事がないです(笑)
>47さん
参考書の例題のようなモノですので大丈夫です。
fgetsも初耳ですが使って見ようと思います。

52 :デフォルトの名無しさん:03/05/10 20:19
>>51
> ちなみに4から8まではうまく動きました。

これは、たまたま。

というか、なぜ memcmp() なんか使うんだ ?
素直に strcmp() 使うべき。

53 :デフォルトの名無しさん:03/05/10 20:31
できれば平文はやめた方がいいよ。。。

54 :43,45:03/05/10 20:40
fgets苦戦中(--;

>52さん
なるほどたまたまですか。
確かにこの場合はstrcmpのが用途に合ってますね。
どうもありがとうございます。

>53さん
平文の意味も知りませんでした^^;
勉強になりました。

fgets苦戦中(--;

55 :デフォルトの名無しさん:03/05/10 20:51
strcmpは文字列の終りを認識してそれ以降の比較はしないけど
memcmpはcountであたえたサイズを無条件で比較するため。
結果はpw1、pw2の未初期化部分に何が入っていたかに依存してしまう。

fgetsは単にgetsと置き換えるだけで動作しない?

56 :43,45:03/05/10 20:55
#include <stdio.h>
#include <string.h>

int main(void)
{
char pw[256];
printf("パスワード: ");
fgets(pw,sizeof(pw),stdin);
if(!strcmp(pw,"neko"))printf("正解\n");
else printf("不正解\n");

return 0;
}

ダメでした(;´Д`)
とんでもない勘違いをしていたら恥ずかしい。

57 :デフォルトの名無しさん:03/05/10 20:57
末尾の改行を取り除く処理はした?
getsと違ってfgetsは改行も書き込むから。

58 :デフォルトの名無しさん:03/05/10 21:02
void chomp(char *str)
{
if(!*str) return;
str+=strlen(str)-1;
if(*str=='\n') *str='\0';
}


59 :デフォルトの名無しさん:03/05/10 21:11
voidだからって最後にreturnを書かないやつは非国民

60 :デフォルトの名無しさん:03/05/10 21:19
>>59
んなこたーない

61 :43,45:03/05/10 21:19
>57さん
できましたー!

#include <stdio.h>
#include <string.h>

int main(void)
{
char pw[256];
printf("パスワード: ");
fgets(pw,sizeof(pw),stdin);
if(!strcmp(pw,"neko\n"))printf("正解\n");
else printf("不正解\n");

return 0;
}

取り除かないで付け加えましたが(;´Д`)
ありがとうございました。

62 :57:03/05/10 21:21
>>61
>>58 せっかく書いたのに(T_T)

63 :43,45:03/05/10 21:30
>57さん
すみません。
私にとっては意味不明なsrcだったので関係無いかと思いました^^;

#include <stdio.h>
#include <string.h>
void chomp(char *str);
int main(void)
{
char pw[256];
printf("パスワード: ");
fgets(pw,sizeof(pw),stdin);
chomp(pw);
if(!strcmp(pw,"neko"))printf("正解\n");
else printf("不正解\n");
return 0;
}
void chomp(char *str)
{
if(!*str) return;
str+=strlen(str)-1;
if(*str=='\n') *str='\0';
}

これでうまく動きましたー
お手数おかけしました。
ありがとう(T-T

64 :デフォルトの名無しさん:03/05/10 21:34
こうやって比べてみると
>61のほうが(・∀・)イイ!

65 :デフォルトの名無しさん:03/05/10 23:58
マジレスすると
getsよりfgetsと同じように
strcmpよりstrncmpなんだけどね

66 :デフォルトの名無しさん:03/05/11 00:11
strncmp だと nekomimi でも正解じゃぁねぇか。

67 :デフォルトの名無しさん:03/05/11 00:22
(゚Д゚)ハァ?

68 :デフォルトの名無しさん:03/05/11 00:38
>>65
> strcmpよりstrncmpなんだけどね

何でや !?
とりあえず、n の値はどうするのか聞きたい。

69 :デフォルトの名無しさん:03/05/11 00:44
この場合は257にしといたらいいんでない

70 :デフォルトの名無しさん:03/05/11 01:02
>>69
で、それはどう言う意味があるんだ ?

71 :デフォルトの名無しさん:03/05/11 01:09
>>67
そのハァ?はどの書き込みへのレスなんだ?

72 :デフォルトの名無しさん:03/05/11 01:09
こんなソフトはいやだ。
・パスワードが平文で実行ファイルに格納されている


73 :デフォルトの名無しさん:03/05/11 01:12
>70
よく見てなかったこのばやい5?

74 :デフォルトの名無しさん:03/05/11 01:15
>>72
それ、CGIスクリプトに多いね・・・・


75 :デフォルトの名無しさん:03/05/11 01:26
ページを見ただけで、何日か後にハードディスクが消去されるようなスクリプトってあるんでしょうか?
あるページをみたら警告文で書いてあったのでおしえてください。

76 :デフォルトの名無しさん:03/05/11 01:26
CGIスクリプトの場合、例え平文でもパスワードが見れないわけだから問題ないよ。

77 :デフォルトの名無しさん:03/05/11 01:27
>>76
iswebみたいなところだと(ry

78 :デフォルトの名無しさん:03/05/11 01:28
>>75
セキリュティホールをうまくつけば可能かもしれませんね

79 :デフォルトの名無しさん:03/05/11 01:37
Index of /cgi-bin
.
..
checkpasswd
chuumon_form.cgi
kanri_form.cgi
kokyaku_data.dat


80 :デフォルトの名無しさん:03/05/11 01:42
1+1=2

ハァ? 1+1には代入できないだろ。  と思うようになってしまった。

81 :デフォルトの名無しさん:03/05/11 01:44
crypt〜

82 :Prolog:03/05/11 01:47
>>80
漏れは

1+1=2

ハァ? 1+1 =:= 2 だろ?  と思うようになってしまった。

83 :デフォルトの名無しさん:03/05/11 01:51
それよりabがa*bだってのに違和感を覚えるようになった。。。

84 :デフォルトの名無しさん:03/05/11 04:26
「猫でもわかる〜」の24章、38章でサイコロの目を二つ乱数で出すところがあるんですが、

int main(void){
 .....
 srand((unsigned)time(NULL));
 me1 = saikoro();
 me2 = saikoro();
 ....
}
int saikoro(void){
 return (rand() % 6 + 1);
}

だと二つバラバラで出るんですが、

int main(void){
 .....
 me1 = saikoro();
 me2 = saikoro();
 ....
}
int saikoro(void){
 srand((unsigned)time(NULL));
 return (rand() % 6 + 1);
}

だとゾロ目になります。
どうしてこのような違いが出るのでしょうか?

85 :デフォルトの名無しさん:03/05/11 04:45
>>84
srandの引数が同じなら、その後の乱数列は同じものが出るから。
単に乱数が欲しいだけなら、srandはプログラム起動時に1回だけ実行するように。

86 :デフォルトの名無しさん:03/05/11 05:34
typedef struct{double x,y,z}vec;vec U,black,amb={.02,.02,.02};struct sphere{
vec cen,color;double rad,kd,ks,kt,kl,ir}*s,*best,sph[]={0.,6.,.5,1.,1.,1.,.9,
.05,.2,.85,0.,1.7,-1.,8.,-.5,1.,.5,.2,1.,.7,.3,0.,.05,1.2,1.,8.,-.5,.1,.8,.8,
1.,.3,.7,0.,0.,1.2,3.,-6.,15.,1.,.8,1.,7.,0.,0.,0.,.6,1.5,-3.,-3.,12.,.8,1.,
1.,5.,0.,0.,0.,.5,1.5,};yx;double u,b,tmin,sqrt(),tan();double vdot(A,B)vec A
,B;{return A.x*B.x+A.y*B.y+A.z*B.z;}vec vcomb(a,A,B)double a;vec A,B;{B.x+=a*
A.x;B.y+=a*A.y;B.z+=a*A.z;return B;}vec vunit(A)vec A;{return vcomb(1./sqrt(
vdot(A,A)),A,black);}struct sphere*intersect(P,D)vec P,D;{best=0;tmin=1e30;s=
sph+5;while(s-->sph)b=vdot(D,U=vcomb(-1.,P,s->cen)),u=b*b-vdot(U,U)+s->rad*s
->rad,u=u>0?sqrt(u):1e31,u=b-u>1e-7?b-u:b+u,tmin=u>=1e-7&&u<tmin?best=s,u:
tmin;return best;}vec trace(level,P,D)vec P,D;{double d,eta,e;vec N,color;
struct sphere*s,*l;if(!level--)return black;if(s=intersect(P,D));else return
amb;color=amb;eta=s->ir;d= -vdot(D,N=vunit(vcomb(-1.,P=vcomb(tmin,D,P),s->cen
)));if(d<0)N=vcomb(-1.,N,black),eta=1/eta,d= -d;l=sph+5;while(l-->sph)if((e=l
->kl*vdot(N,U=vunit(vcomb(-1.,P,l->cen))))>0&&intersect(P,U)==l)color=vcomb(e
,l->color,color);U=s->color;color.x*=U.x;color.y*=U.y;color.z*=U.z;e=1-eta*
eta*(1-d*d);return vcomb(s->kt,e>0?trace(level,P,vcomb(eta,D,vcomb(eta*d-sqrt
(e),N,black))):black,vcomb(s->ks,trace(level,P,vcomb(2*d,N,D)),vcomb(s->kd,
color,vcomb(s->kl,U,black))));}main(){printf("%d %d\n",32,32);while(yx<32*32)
U.x=yx%32-32/2,U.z=32/2-yx++/32,U.y=32/2/tan(25/114.5915590261),U=vcomb(255.,
trace(3,black,vunit(U)),black),printf("%.0f %.0f %.0f\n",U);}/*minray!*/



87 :デフォルトの名無しさん:03/05/11 06:13
>>86
コンパイル通らないよ

88 :デフォルトの名無しさん:03/05/11 06:25
>>86
なんですかこの読みにくいソースは・・・

89 :デフォルトの名無しさん:03/05/11 06:37
>>85
理解しました。ありがとうございます。

90 :デフォルトの名無しさん:03/05/11 11:22
>>87
Linux+gccで通ったぞ。多少警告はでたが。

91 :デフォルトの名無しさん:03/05/11 11:36
そのままじゃ通らないだろ
2行めirの後に;、コンパイル時に-lm。
しかし問題はこれが何なのかなのだが・・・

92 :デフォルトの名無しさん:03/05/11 11:39
irの後にセミコロンってネタですか?

93 :デフォルトの名無しさん:03/05/11 12:20
おいおい

94 :デフォルトの名無しさん:03/05/11 12:52
91 名前:デフォルトの名無しさん :03/05/11 11:36
     2行めirの後に;、コンパイル時に-lm。
91 名前:デフォルトの名無しさん :03/05/11 11:36
     2行めirの後に;、コンパイル時に-lm。
91 名前:デフォルトの名無しさん :03/05/11 11:36
     2行めirの後に;、コンパイル時に-lm。
91 名前:デフォルトの名無しさん :03/05/11 11:36
     2行めirの後に;、コンパイル時に-lm。



   >>91  =  犬厨  =  知ったか君




うわっ、このスレ犬臭え

95 :デフォルトの名無しさん:03/05/11 13:01
なんでそこで犬(linux?)が出てくるのかわからん。

96 :デフォルトの名無しさん:03/05/11 14:04
linux厨のことを犬厨って言うのか?

97 :デフォルトの名無しさん:03/05/11 14:28
漏れも犬厨は嫌いなんだけど、
みんなは犬厨のどんなところが嫌い?


98 :デフォルトの名無しさん:03/05/11 14:35
技術もないくせに偉そうなところ

99 :デフォルトの名無しさん:03/05/11 15:22
>>92-94
自分でやってみもしないアフォばっかりか...

test.c:1: warning: no semicolon at end of struct or union
test.c:2: warning: no semicolon at end of struct or union
test.c:2: warning: missing braces around initializer
test.c:2: warning: (near initialization for `sph[0]')
test.c:5: warning: type defaults to `int' in declaration of `yx'
test.c:5: warning: data definition has no type or storage class
test.c: In function `trace':
test.c:12: warning: suggest parentheses around assignment used as truth value
test.c: At top level:
test.c:19: warning: return-type defaults to `int'
test.c: In function `main':
test.c:19: warning: implicit declaration of function `printf'
test.c:21: warning: double format, vec arg (arg 2)
test.c:21: warning: too few arguments for format
test.c:21: warning: control reaches end of non-void function
cc -lm -o t test.o

つーか、普通に考えりゃわかるだろうに。

100 :デフォルトの名無しさん:03/05/11 15:27
>>99
やってみないとわからんのか。

101 :デフォルトの名無しさん:03/05/11 15:38
漏れは見なくてもわかる

102 :デフォルトの名無しさん:03/05/11 15:41
俺はこのスレ読む前から解ってた。

103 :デフォルトの名無しさん:03/05/11 15:46
>>100
プッ、やることもできないんだろ。
まあ、見るだけでわかるんなら >>92-94 に反論の一つでもしてると思うけどな。

俺は、あんなソースは見たくもないから。

104 :ヘルバ ◆THYOQYTAXA :03/05/11 15:48
fgetsよりfgetcの方が好き。
fgetsとfgetcはほんと間違いやすいから気をつけよう。
ややこしいよね。

105 :デフォルトの名無しさん:03/05/11 15:53
>>104
激しくぜんぜん。

106 :デフォルトの名無しさん:03/05/11 15:54
>>104
うんうん、君には難しいんだろうね。
よくわかったから、満足したらもう来ないでね。

107 :デフォルトの名無しさん:03/05/11 15:55
引数も違うのに間違えるんかい

108 :デフォルトの名無しさん:03/05/11 16:08
>の方が好き
好みの問題なんだろうか

109 :デフォルトの名無しさん:03/05/11 16:30
もれはfgetcよりもfputcの方が好きだな

110 :デフォルトの名無しさん:03/05/11 17:46
>>109
>>107

111 :110:03/05/11 17:46
スマン 間違える間違えないの問題じゃなかった。

112 :デフォルトの名無しさん:03/05/11 18:17
>>105-106
別に叩くところではないと思うが。
煽り目的か、お前。

113 :デフォルトの名無しさん:03/05/11 19:03
>>99
警告しか出ていないように見えるのは俺だけか?
gcc2.95.3だと-ansi -pedanticつけないとエラーはでないな。つけると5行目でエラー
> ANSI C forbids data definition with no type or storage class

しかし、2行目に;が必要ってどういうことだよ。

114 :113:03/05/11 19:07
なんか勘違いしていた・・・スマソ irのすぐ後にってことか。

115 :デフォルトの名無しさん:03/05/11 19:21
Part56って凄いね。うんうん。すごいすごい。
すごすぎだよあんた。
五万六千レス。

116 :デフォルトの名無しさん:03/05/11 19:42
初心者板には5000を越えたスレがあるらしいぜ

117 :デフォルトの名無しさん:03/05/11 19:57
それだけバカとバカに教えるバカが豊富、と

118 :デフォルトの名無しさん:03/05/11 20:50
おそろしくへたくそなソースだが、レイトレのつもりか?


119 :デフォルトの名無しさん:03/05/11 20:51
新しいトイレ?

120 :118:03/05/11 20:53
なるほど、これか。
ttp://www-2.cs.cmu.edu/~ph/src/minray/minray.card.c


121 :デフォルトの名無しさん:03/05/11 20:59
ttp://www.acm.org/pubs/tog/GraphicsGems/gemsiv/minray/README
名刺大レイトレーサー


122 :デフォルトの名無しさん:03/05/11 21:29
いつからここは7行スレに?

123 :デフォルトの名無しさん:03/05/11 21:35
>>112
自分の好みを披露するスレでもないからな。

124 :デフォルトの名無しさん:03/05/11 22:34
C初心者です。
今後C++を覚えたいのですが、なんかC#という新しい言語もあるそうなんですが
C#ってなんでしょうか?C++を飛び越してC#を学んだ方が得策なのでしょうか?
教えてください。

125 :デフォルトの名無しさん:03/05/11 22:37
>>124
お好きなように。

126 :デフォルトの名無しさん:03/05/11 22:43
>>124
> C#ってなんでしょうか?

http://www.asia.microsoft.com/japan/msdn/vstudio/techinfo/articles/upgrade/Csharpintro.asp

> C++を飛び越してC#を学んだ方が得策なのでしょうか?

今のところ誰にもわからない。
5年ぐらいしたら結果が出ているかもしれない。

それ以前に、その全然C言語に関係ない質問がこのスレにふさわしいかよく考えた方がいい。

127 :デフォルトの名無しさん:03/05/11 23:00
色々悪口を言われるプリプロセッサだけど、俺は大好き。


128 :デフォルトの名無しさん:03/05/12 00:13
俺は大嫌い。

129 :デフォルトの名無しさん:03/05/12 00:14
俺は性格は好き。

130 :デフォルトの名無しさん:03/05/12 02:11
NULLとナル文字の違いを教えてください。

131 :デフォルトの名無しさん:03/05/12 02:23
NULLはポインタ ナル文字は文字であり整数型

132 :デフォルトの名無しさん:03/05/12 02:25
ナル文字と0の違いは?'\0'でじゃなく0でいいのでは?

133 :デフォルトの名無しさん:03/05/12 02:26
ナコルルとリムルルの違いを教えてください。

134 :デフォルトの名無しさん:03/05/12 02:27
>>132
読みやすくするため


135 :134:03/05/12 02:27
あと"aaa\0bbbb"とかやったりな 

136 :134:03/05/12 02:28
やらないか

137 :デフォルトの名無しさん:03/05/12 02:30
>>130
ヌルポインタ
あるオブジェクトの位置を示す、どの正常なポインタとも
等しくならない事が保証されているポインタ。
ソース上では 0 というリテラルで得る事ができるが、
NULL というマクロを使った方が読みやすい。
しかし、実際は 0 以外に ((void*)0) と定義されていてもよいとされている
(C++ では 0 と定義される)。

ヌルキャラクタ
あらゆる文字とも等しくならないことが保証されている文字。
文字列を操作する標準関数において文字列の終端を表す。
ソース上では '\0' というリテラルで得る事ができる。
リテラル文字列(" " で囲んで得られる文字列)の終端には
ヌルキャラクタが自動的に付け加えられる。


ヌルポインタはポインタであり、ヌルキャラクタは文字である。
ヌルポインタは文字ではなく、ヌルキャラクタはポインタではない。

以上。

138 :デフォルトの名無しさん:03/05/12 02:31
要するに0

139 : :03/05/12 03:23
>>138
だけど、ヌルポインタはデータとして 0 であるという保証は無い。
ソース上は 0 だけどね。

140 :デフォルトの名無しさん:03/05/12 03:41
オブジェクト指向ってなんですか?

141 :デフォルトの名無しさん:03/05/12 03:44
>>140
スレ違い。
というか、オブジェクト指向で検索汁。

142 :デフォルトの名無しさん:03/05/12 04:13
>>140
実はオレも知らないんだ。
検索してもよくわからなかった。

>>141の言うように検索してバカなオレにわかりやすく教えてくれ。

143 :デフォルトの名無しさん:03/05/12 04:18
>>136
いや、やったことがある。こっそりバイナリにメッセージ仕込んだりしてた(w

144 :デフォルトの名無しさん:03/05/12 05:26
>>139
*(NULL)が0である保障がないことは
なんの関係もないぞ?
何が言いたいんだ?


145 :139:03/05/12 05:42
>>144
void *p = NULL;
printf("%d\n", (int)p);
で 0 が表示される保証が無い、ということ。

146 :デフォルトの名無しさん:03/05/12 05:58
本気で言ってる?
釣り?

147 : 139:03/05/12 05:59
もっと現実的な状況で言うなら、

int **p; /* int* 型の動的確保配列 */
p = (int**)calloc(size, sizeof (int*));

という方法では NULL で初期化されない、
という環境があって構わないということだ。
malloc の後に for を使って NULL で初期化しなくてはならない。

しかも厳密に言うなら、
NULL を実現するための現実の値が
char* と int* などで異なっていても構わない。
そのため、この初期化処理を関数化するには型ごとに関数を作るしかない。
int** を void** で受けようとしてもエラーか警告を受けるであろう。

C++ ではこのような状況は当たり前のように存在していて、
多重継承をしているクラスではそもそもポインタのサイズが異なるために
int* と iostream* とでは NULL の値は異なる、
という実装になっている処理系が殆どである。

148 :デフォルトの名無しさん:03/05/12 06:21
>>144
ガッ

149 :デフォルトの名無しさん:03/05/12 06:28
>>146
139の言うことか? 釣りでもなんでもなく正しいよ。
Cの規格では、0が出てきたときそれがポインタを表す文脈の時は
NULLポインタに読み替えられることが保障されているだけで、
NULLポインタがバイナリ0である保障は全くないよ。つまりえーと、

union {
 void *p;
 int i; /* sizeof(int) == sizeof(void *)を仮定 */
} hoge;

hoge.p = 0;
printf("%d", hoge.i);

とやったときに「0」という出力がえられることは規格では保障されてない。

もっとも殆どのコンパイラの実装ではバイナリ0だろうけど、
それは規格には関係ない。

150 :デフォルトの名無しさん:03/05/12 06:48
フフッ、漏れは騙されないよ。


151 :デフォルトの名無しさん:03/05/12 06:48
もっとも規格ではNULLポインタがバイナリ0である保障はないけど、
現実のコンパイラの実装ではバイナリ0だから
実際のプログラムには関係ない。

152 :デフォルトの名無しさん:03/05/12 07:00
ASCIIコードが8ビット(1バイト)とか言ってるヤシよ!
アスキーコードは7ビットだろうがよぅ!

153 :139:03/05/12 07:20
まぁ、とりあえずここを読めってこった。
http://www.catnet.ne.jp/kouno/c_faq/c5.html

154 :デフォルトの名無しさん:03/05/12 11:47
>>149
共用体のvoid*に書き込んだ値をintで読んだりしたら結果は処理系依存。
もっとも期待通りに動作しない処理系なんて聞いたことないが…

155 :デフォルトの名無しさん:03/05/12 11:48
>>152
そういう言い方をするとちょっと違うような。

156 :デフォルトの名無しさん:03/05/12 12:29
>>154
MS-DOS時代のMS-Cにはfarポインタと言うものがありましてな、
16bitのセグメントと16bitのオフセットと言う構造になってたので
intとの共用体を作ることもできなければセグメントの値が
0になることもなかったものなのですよ。
#温故知新。

157 :デフォルトの名無しさん:03/05/12 12:39
>>156
なにが言いたいの

158 :デフォルトの名無しさん:03/05/12 12:40
>>156
共用体自体は作れたと思うし、(void far *)0はセグメントも0だったのでは。


159 :149:03/05/12 13:04
>>154
もちろんわかっててやってる。
つうかコンパイラの実装(NULLポインタのバイナリ表現)を見る
ことが目的なので処理系依存でかまわない(w

とはいえあの例で0と出ない例をおれは知らぬ。
DOSだって>>156が言うとおりfarポインタのNULLは0:0(バイナリゼロ)だし。
# 共用体はlongでとってね。
誰か0以外のが出る実装を教えてくれんか(w

Cの規格にある制限の理由には大きく2種類あって
・現実の機械にそういう物があるから(例: 名前は6文字以下であること…C89の有名無実な制限)
・実装者に選択の余地を与えること(例: intのサイズ)
んで、NULLがバイナリ0でないというのはどっちの理由なんだろうな。

160 :デフォルトの名無しさん:03/05/12 13:54
そういう機械があったという伝説は残っている。

161 :デフォルトの名無しさん:03/05/12 14:26
>>159
> 誰か0以外のが出る実装を教えてくれんか(w

CFAQの5.17に書いてあるよ。

162 ::03/05/12 14:46
逝ってよし

163 :デフォルトの名無しさん:03/05/12 15:07
プログラム内でよく参照する文字列のリストをグローバル変数の配列にしているんですがもっと良い方法はあるのでしょうか。
♯defineとかを使うという話を聞いたような気もするのですが、[]内が式になると上手くいかないようなきがしますが…。

164 :デフォルトの名無しさん:03/05/12 15:16
>>163
enumかな?

165 :デフォルトの名無しさん:03/05/12 15:30
>>163
その文字列がキーワードの類なら
static char const *const sKeyWords[] = {"foo", "bar", "baz",};
が無難ではないかと。
マクロにするなら、
#define KEY_WORD(x) ((x) == 0 ? "foo" : (x) == 1 ? "bar" : "baz")
などとできなくもないが煩わしい。

もしその文字列がエラーメッセージのようなものなら、
テキストファイルやリソースの形で実装することをお勧めする。

166 :デフォルトの名無しさん:03/05/12 15:41
一番目のconstはcharの前に書けよ気持ち悪い

167 :デフォルトの名無しさん:03/05/12 15:51
>>163
どういう目的でそういう方法をとっているのですか?

例えばコンパイラの中には、ソース中に同じ文字列が出てきた場合、
一つにしてくれる機能を持つものもあります。
メモリの節約をしたいというのであれば、この機能を使えばよいですが、
文字列の内容に変更が入るかもしれないので共有しているのであれば、
この機能を使うのはよくないです。

168 :デフォルトの名無しさん:03/05/12 15:54
>>167
文字列リテラルを書き換えてはいけないよ
読み出し専用(のはず)だからこそ、そういう機能を適用するわけだし。

169 :167:03/05/12 16:36
>>168
動的に書き換えるという話ではなく、
ソースの一箇所直せば事足りるようにするというような
静的なものを言ったつもりでした。

170 :デフォルトの名無しさん:03/05/12 17:32
もうちょっとプログラミング用語を勉強したほうがいいぞ
コミュニケーションがうまくできていない

171 :デフォルトの名無しさん:03/05/12 17:36
>>170
誰が?

172 :デフォルトの名無しさん:03/05/12 17:38
>>170
もうちょっと日本語を勉強したほうがいいぞ、
コミュニケイションが(略

173 :デフォルトの名無しさん:03/05/12 17:44
日本語難しい

174 :デフォルトの名無しさん:03/05/12 17:47
>>167の言いたいことがわからん。
俺も>>170の言う通りか?

175 :デフォルトの名無しさん:03/05/12 17:49
どっちかというと作文能力の問題だな

176 :163:03/05/12 18:29
>>164-168の皆様、お答えありがとうございました。
例えば{"読売ジャイアンツ","阪神タイガース",…,"福岡ダイエーホークス"}のような
今後拡張する必要の無い単語リストを格納するつもりでした。
ただ、多くの関数で参照する都合上、まとめた方が便利だったもので。
とりあえずstatic〜の方法でやってみようと思います。

177 :デフォルトの名無しさん:03/05/12 18:31
多くの関数で・・・ならstaticをつけちゃまずいのでは。
多くの関数ってのがひとつのファイルに入っているのならかまわないけど。

178 :デフォルトの名無しさん:03/05/12 19:07
>>176
static の方法を使うと、そのヘッダファイルを
インクルードしているソースファイル全てで
その変数が定義されてしまうので、不効率。
ただの一定数なら最適化でなんとかなることが殆どだと思うけど、
配列とかポインタとかはどうにもならんと思う。
添字が定数ならなんとかなるかもしれないけどね。

ところで、配列の場合は初期化を考慮した EXTERN マクロの技巧
#ifdef 何か
#define EXTERN_INIT(var, init) var = init;
#else
#define EXTERN_INIT(var, init) extern var;
#endif
が上手く使えないけど、みんなどうしてる?

179 :デフォルトの名無しさん:03/05/12 19:16
>>178
>EXTERN マクロの技巧
そんなもん使うな。ソースが激しく見づらくなる。
#目視という意味だけでなく、解析ツールが使えなくなる。
外部変数を幾つも宣言したいならせめて構造体にまとめろ。

180 :デフォルトの名無しさん:03/05/12 19:44
論理的に関連性のない変数を無理に構造体に纏める方が激しく読みづらくなりますが何か?

マクロが読みづらいならプリプロセッサだけを通したソースでも読めや。

181 :デフォルトの名無しさん:03/05/12 19:49
>>178
値を変更するたびにインクルードするソース全部コンパイルし直すことになっ
て、分離するメリットを損なうので、しない。


182 :デフォルトの名無しさん:03/05/12 20:49
mainのなかでint **型のポインタのポインタ(可変長の多次元配列を取るため)pを宣言して
それをfunc_aという関数に渡してmallocで多次元配列を確保して
さらにpをfunc_bに渡してその中で処理をしてpに値を入れました。
それでこれをmainで参照しようと思ったのですが、うまくいきません。
func_a、func_b内でなら参照できたのですが。
mainでも参照できる方法はないでしょうか。

183 :182:03/05/12 20:51
グローバル変数は使わない方向でおながいします

184 :デフォルトの名無しさん:03/05/12 20:52
int **pを渡すのが間違っている。
int **pにint **型のfunc_aの戻り値を代入する。

どうしても渡したいのなら、func_aの引数をint ***にして、func_a(&p)として呼ぶ。


185 :182:03/05/12 21:31
>>184
ありがd
解決しました。

186 :184:03/05/12 21:33
(´-`).。oO(よくこんな説明で分かったな・・・)

187 :182:03/05/12 21:37
>>186
(´-`).。oO(多分あと一押しの部分を押してくれたんだと思う・・・)

188 :デフォルトの名無しさん:03/05/12 21:37
なんだ自作自演か

189 :デフォルトの名無しさん:03/05/12 21:55
そして破滅へ

190 :デフォルトの名無しさん:03/05/12 22:02
Cにプロトタイプ宣言が導入される前はどうやって関数ポインタを初期化していたんですか?
初期化よりも上で関数を定義ですか? でもそうすると他のファイルで定義したものは使えませんよね?

191 :デフォルトの名無しさん:03/05/12 22:36
どんな関数ポインタでも

(*pfunc)(arg1, arg2, arg3)
してもいいし
(*pfunc)(arg1, arg2)
してもいいし
(*pfunc)()
してもよかった。

関数ポインタの指す先が
int func(arg1) /*一個だけよ*/

だった場合は、余計な引数は無視され、
足りない引数にはゴミが渡された。

スタック渡しなんで、言われた順に単に
後ろからスタックにつんでただけ。


192 :デフォルトの名無しさん:03/05/12 22:41
戻り値の型も、後方参照できなければ暗黙的にint形を返すことになっている。

だから double atof(char *)みたいなのをプロトタイプ宣言せずに呼ぶと
戻り値をうまく受け取れなかったりした。

というわけで、プロトタイプされていない関数はすべて、
「intを返す、引数の数不明な関数」
であり、
「int (*pfunc)()」
のような関数ポインタで扱うことができた。


193 :デフォルトの名無しさん:03/05/12 22:41
printf()系以外めったに使わない可変長引数のためだけに後ろから
畑中葉子

194 :190:03/05/12 22:45
あ、すみません。初期化というのはint (*p)(int,double)=func;みたいな形のことです。
この場合、コンパイラがfuncという名前を知らないとエラーになりますよね?
で、宣言するか上で定義しないと分からないから・・・

195 :デフォルトの名無しさん:03/05/12 22:55
>>194
だからそういう場合は
int func();

196 :190:03/05/12 22:59
>>195
あ、当時のコンパイラならエラーにならなかったんですか。

197 :デフォルトの名無しさん:03/05/12 23:02
foo()
{
extern int func(); /* funcって名前の関数がどこかにあるよ */
int (*p)(int,double)=func; /* 関数ポインタに代入 */
}


198 :デフォルトの名無しさん:03/05/12 23:05
>>196
今だってならんわ。

199 :デフォルトの名無しさん:03/05/12 23:07
>>197
> extern int func(); /* funcって名前の関数がどこかにあるよ */

それはプロトタイプ宣言では。

200 :190:03/05/12 23:09
>>198
int main()
{
int (*p)(int)=func;
return 0;
}

gcc test.c

test.c: In function `main':
test.c:3: `func' undeclared (first use in this function)
test.c:3: (Each undeclared identifier is reported only once
test.c:3: for each function it appears in.)

エラーになりましたよ?

201 :デフォルトの名無しさん:03/05/12 23:56
わざと読み飛ばしてるのか?

int main()
{
  int func();
  int (*pXint) = func;
}

>>195>>197 もこういってるのに。

202 :190:03/05/12 23:59
>>201
だから宣言しないで・・・

203 :190:03/05/13 00:01
もしかして私がプロトタイプ宣言というものを勘違いしている?^^;

204 :デフォルトの名無しさん:03/05/13 00:06
>>203
つーかそんなことを知る必要があるのか? そんなこと知っても無意味だろ。

205 :デフォルトの名無しさん:03/05/13 00:07
変数の名前(ラベル名?)を表示することはできますか?
具体的には
 int Right;
 int Left;
 printf("Variable1 Name:%? \n",Right);
 printf("Variable2 Name:%? \n",Left);
上記を実行すると標準出力に
 Right
 Left
と表示される。見たいなことをやりたいです。

206 :デフォルトの名無しさん:03/05/13 00:08
>>205
無理


207 :デフォルトの名無しさん:03/05/13 00:09
 int Right;
 int Left;
 printf("Variable1 Name:Right \n");
 printf("Variable2 Name:Left \n");

208 :206:03/05/13 00:09
そういうことができるとして、どういうことに利用したいの?
他の方法で実現できるかも。

209 :デフォルトの名無しさん:03/05/13 00:12
コンパイルした後も変数の名前って残るの?

例えば int a; より int ab;ってやったほうがexeが大きくなるとか

210 :デフォルトの名無しさん:03/05/13 00:14
>>209
リンク時に必要な名前以外は消える・・・・と思う。

211 :デフォルトの名無しさん:03/05/13 00:16
>>203
もう一回勉強し直してきな。

212 :デフォルトの名無しさん:03/05/13 00:17
>>209
デバッグ情報には。

213 :205:03/05/13 00:19
>>206
そうでしたか、できないものは仕方ないですね。

特に目的は無く、
 きっと変数名を表示することはできるだろう。
 → 調べたけどどこにも載っていない。
 → あぁ気になって眠れない。
という流れで質問させていただきました。

214 :デフォルトの名無しさん:03/05/13 00:20
とりあえず俺が>>205に言いたいことは
printf("Variable1 Name:%s \n","Right");
じゃ
Right
とは出力されないってことだな

215 :デフォルトの名無しさん:03/05/13 00:24
マクロ使えばいいじゃん#とか

216 :デフォルトの名無しさん:03/05/13 00:26
(゚Д゚)ハァ?

217 :デフォルトの名無しさん:03/05/13 00:37
文字列連結演算子 ##


218 :デフォルトの名無しさん:03/05/13 00:50

#define P(x) printf(#x)

219 :デフォルトの名無しさん:03/05/13 01:13
http://www.cmagazine.jp/src/kinjite/c/volume.html
> いわゆる「入れ子」が2重3重になるというケースがあります。

2重が駄目なら入れ子自体が駄目ということになるが。


220 :デフォルトの名無しさん:03/05/13 01:34
>>219
入れ子が関数が長くなる原因になるといっているだけで、
駄目とは言ってないような。

そんなことよりも、
>フローシートなどを用いて処理の再検討をする必要があります。
これはやめてくれ。

221 :あふぉ:03/05/13 01:49
解の公式のプログラムでできるだけ桁落ちしないようにするにはどうしたらいいんですか?


222 :デフォルトの名無しさん:03/05/13 01:55
>>219
一通り読んだけど、こいつ駄目だわ。
「こういう考え方の奴もいる」程度に読むように。

223 :デフォルトの名無しさん:03/05/13 01:58
>>221
ケースバイケース。
場合によっては、公式をそのままプログラムに移すのではなく、
予め桁落ちしないように変形するなどの工夫をするといい。
特に、収束の悪い級数展開には要注意。

224 :デフォルトの名無しさん:03/05/13 02:10
>>219
メンバーにmをつけるという命名規則が分からない・・・
mついていなくてもa.bとかa->bってかけばbはメンバーだってわかるし、メンバーを裸で書くことはできないはずだし・・・

225 :224:03/05/13 02:12
C++の場合かな? メンバ関数内での使用とか。


226 :デフォルトの名無しさん:03/05/13 02:21
それより自動変数につけるtheとか「引数は参照のみは「in」」ってのが・・・
参照のみならconstつけろよ。Cの標準関数もそうしている。

227 :デフォルトの名無しさん:03/05/13 08:03
違います

228 :デフォルトの名無しさん:03/05/13 11:16
>>220
つーかフローシートって何だ。
風呂敷?

229 :222=220:03/05/13 11:46
>>228
私に聞くな。
フローチャートの間違いだと思うのだが、そうだとしても阿呆だと思うがね。

230 :デフォルトの名無しさん:03/05/13 11:48
>>229
結論に禿撞。

231 :デフォルトの名無しさん:03/05/13 15:56
free()とかfclose()しないでexec()したらマズイですか?


232 :デフォルトの名無しさん:03/05/13 15:58
>>231
http://pc2.2ch.net/test/read.cgi/tech/992057422/

233 :デフォルトの名無しさん:03/05/13 16:07
>>231
呼び出したプログラムが終了して戻ってきて、
mainから抜ける時まで確保されっぱなしだけど、気にしないなら問題はないよ。


234 :デフォルトの名無しさん:03/05/13 16:13
>http://www.cmagazine.jp/src/kinjite/cpp/scale.html#index2
メンバ関数が多いと使いたいメンバを探すのに苦労する
→ 継承クラスを作って分割させる
と読める。どんなもんだろう。

235 :デフォルトの名無しさん:03/05/13 16:27
>>234
単純に「クラスを分割する」でいいよな。
なんで継承なんだろ。

236 :デフォルトの名無しさん:03/05/13 16:53
>231
free()については、無問題
fclose()については、書き込まれていないバッファの内容がうしなわれるし、ファイルがひらきっぱなしになる。


237 :デフォルトの名無しさん:03/05/13 18:21
struct a{
struct aa;
struct bb;
char cc;
}hoge;

struct b{
struct aa;
struct bb;
char cc;
}piyo;
上記2つの構造体の中身を"char cc"を除いて丸ごとコピーしたいのですが
memcpy(piyo, hoge, (aa + bbのサイズ));
↑でできるでしょうか??
ご指導おねがいしまふ。

238 :デフォルトの名無しさん:03/05/13 18:23
その前にエラーでは・・・・

239 :238:03/05/13 18:26
エラーにならねー(T_T)
struct aa; はエラーにならないのか。


240 :デフォルトの名無しさん:03/05/13 18:31
>>237
struct aa と struct bb のペアに意味があるなら、
別の構造体としてまとめるべし。
あとは構造体の代入でいける。

ちなみに、上の memcpy での代入はできない。
何とかする方法はあるが、
余計な事を教えるとやりそうで恐いので教えない。

241 :238:03/05/13 18:38
なるほど・・・struct aaとstruct bbはないものと判断されるのか。
じゃあccを除いてコピーってのは・・・

242 :237:03/05/13 18:44
正確には
struct a{
   struct aa a;
   struct bb b;
    char cc;
}hoge;

struct b{
struct aa ba;
struct bb bb;
char cc;
}piyo;
って感じです。
すんません。

243 :デフォルトの名無しさん:03/05/13 18:46
>>242
hoge.a=piyo.ba;
hoge.b=piyo.bb;

と二行に書くのがいやなわけ?

244 :237:03/05/13 18:47
>>240サソ
ありがとうございます
hoge = piyo;
だとchar ccも入ってしまいますよね、、、

で、どうするか。。。
ホカに構造体を用意して、そのエリアに
いれちゃうって感じですか?

245 :デフォルトの名無しさん:03/05/13 18:48
出力結果が
一つ目==>○ーーーーーーscanf()で
二つ目==>□ーーーーーーscanf()で
○+□=△ーーーーーーーー△は2進数で表示
を作りたいのですがサッパリです。
#include <stdio.h>
int main()
{


246 :237:03/05/13 18:48
>>243サソ
それでできるんすかーーーーー!!???
まじっすかーーーーー

革新的ダァーーーーー!!!!

247 :デフォルトの名無しさん:03/05/13 18:54
だから、その2つの構造体を
まとめて扱う事に大きな意味があるのなら、
struct ab {
 struct aa a;
 struct bb b;
};
という構造体を作って
struct a {
 struct ab a;
 char cc;
} hoge;

struct b {
 struct ab b;
 char cc;
} piyo;

piyo.b = hoge.a;
とするか、1つずつ代入する関数でも作る。
そうでないなら、1つずつ代入する。

構造体の一部を memcpy でコピーするのは禁じ手。
memcpy するコードを書いたのを忘れると、
あとから構造体に要素を追加した時に
アドレスがずれてバグになる可能性がある。

248 :デフォルトの名無しさん:03/05/13 18:55
型の違うもの同士をmemcpyしたくないなぁ。
例えメンバーが同じでも。

249 :デフォルトの名無しさん:03/05/13 18:57
>>245
先ずは 10 進数で表示するプログラムを作ってみ。

250 :245:03/05/13 19:03
#include <stdio.h>
int main(void)
{
int a,b;
printf("1つ目\n");
scanf("%d",&a);
printf("2つ目\n");
scanf("%d",&b);
printf("\n\t\t演算結果\n");
printf("\t\t%d + %d=%d\n",a,b,a+b);
printf("\t\t%d - %d=%d\n",a,b,a-b);
printf("\t\t%d * %d=%d\n",a,b,a*b);
if( b==0 ){
printf("\t\t%d / %d0では割れません。\n\t\t%d %% %d0では割れません\n",a,b,a,b);
}
else{
printf("\t\t%d / %d=%d\n",a,b,a/b);
printf("\t\t%d %% %d=%d\n",a,b,a%b);
}
return 0;
}

251 :デフォルトの名無しさん:03/05/13 19:04
きちんと0チェックしている・・・自分で考えたのなら偉い。

252 :245:03/05/13 19:07
0でやったらエラーでるので出なくしました。

253 :デフォルトの名無しさん:03/05/13 19:08
>>250
あとは2進数を表示する関数を作れば終わりやね。
まぁ、初心者なら一旦表示する文字列を作ってから
それを後から表示すればいいね。

再帰関数を使う方法もあるけどね。

254 :デフォルトの名無しさん:03/05/13 19:11
http://www.catnet.ne.jp/kouno/c_faq/c14.htmlの「適切に選んだepsilon」というのは
float.hで定義されているDBL_EPSILONやFLT_EPSILONのことですか?


255 :bloom:03/05/13 19:13
http://homepage.mac.com/ayaya16/

256 :245:03/05/13 19:14
d=nisinsuu(a,b);

int nisinsuu(int x,int y)
{
.
.
.
}
って感じでですか?

257 :デフォルトの名無しさん:03/05/13 19:15
>>256
int型の引数はひとつでいい。

258 :デフォルトの名無しさん:03/05/13 19:17
>>254
自分で適当に決める。
この値が精度に相当する。

>>256
nisinsuu(a + b);
とかいう風に、計算部分までは関数には持ち込まない。

259 :デフォルトの名無しさん:03/05/13 19:19
>>258
じゃあDBL_EPSILON使います。
ありがとうございました。

260 :256:03/05/13 19:33
スマソ。ギブアップ

261 :デフォルトの名無しさん:03/05/13 19:43
データの先頭アドレスを指すポインタ*pがあります。
このデータの先頭から3〜4バイト目に値を入れたいです。
値はint hoge = 42;など
こういった際には
p +=3;
memcpy(p, hoge, 2);
って感じなのでしょうか?
memcpyはcharはダメ・・・?
どうすりゃいいんでしょうか?
厨房ですみません、ご教授願います。

262 :デフォルトの名無しさん:03/05/13 19:43
>>260
第 n ビットだけ 1 になった値は
どうやって得ればいいかな?
(ただし、一番下のビットは第 0 ビットとする)

263 :デフォルトの名無しさん:03/05/13 19:44
--------●○●別れさせ屋●復讐代行業務●○●----------

●騙された・裏切られた・弄ばれた・逃げられた・捨てられた・
相手に誠意が無い・異性問題・家庭内暴力・不倫疑惑解明・人間関係・金銭トラブル★

●  http://www.blacklist.jp/i

別離工作・情報収集・トラブル対策・ボディガ―ド・等々!
●真剣にお悩みの方、安心してご相談下さい。解決へ導きます★
□■各種データ・電話番号調査・住民票・戸籍謄本など調査■□

●  http://www.blacklist.jp/i  ●別れさせ屋・特殊工作・調査全般
●  http://www.blacklist.jp/   ●復讐代行・人生相談・駆け込み寺
--------------------------
リンク⇒ http://315.teacup.com/asocokit/bbs 凄い・必見!!!

264 :デフォルトの名無しさん:03/05/13 19:52
>>261
何をしたいの?


という質問がよくあるが、これは
やってることが危険、
奇妙なコードで意図が汲めない、または
一応動くがバグの温床になるという指摘である。

265 :デフォルトの名無しさん:03/05/13 20:09
char c[4];
c[0] = 0;
c[1] = c[2] = c[3] = 1;
int i = (int) c[0];
としても i = 0; ですよね。


266 :デフォルトの名無しさん:03/05/13 20:11
#include <stdio.h>
int main(void)
{
int a,b,c,d,n;
printf("===============================================================================\n");
printf(" いまから四則演算をする数値2つ入れなさい\n");
printf("===============================================================================\n");
printf("1つ目の数値を入力してください\n");
scanf("%d",&a);
printf("2つ目の数値を入力してください\n");
scanf("%d",&b);
printf("\n\t\t実行結果の表示です\n");
n=0;
for(c=a+b;c>0;c/=2){
d=c%2;
printf("%d",d);

}
printf("\n左から読んでくれ");
return 0;
}
分かりません。これが限界です

267 :デフォルトの名無しさん:03/05/13 20:14
ある乱数を発生させてそれぞれに条件式をつけるにはどうすればいいですか?

乱数で1から100までの数字を発生させて
1〜40ならA
41〜50ならB
50〜99ならC
100ならD
といったような具合に場合分けしたいときって どうすればいいんですかね?
1<X<40
こういった条件式をプログラム上で行いたいんだけど
良いほうが思いつかないもので

初心者的な質問ですんません
C言語限定ってわけではないけどアルゴリズムが知りたいので書きました
良かったら 教えてください


268 :デフォルトの名無しさん:03/05/13 20:15
>>265
はい。
c[0] は 0 なので、i は 0 です。

int i = *(int*)&c[0];
とすると変わってきます。
結果は CPU のバイトオーダに依存します。

>>266
どこまで習ったの?
1. 関数
2. 配列、文字列
3. ビット演算
4. 再帰関数

269 :デフォルトの名無しさん:03/05/13 20:17
>>267
アルゴリズムつーか、ifでやるのはいかんの?

270 :デフォルトの名無しさん:03/05/13 20:17
今は何の時期だ???ひどいもんだ

271 :デフォルトの名無しさん:03/05/13 20:20
>>267
1)
int x = rand() % 100;
enum ABCD abcd =
 (x < 40) ? A :
 (x < 50) ? B :
 (x < 99) ? C : D;

2)
int x = rand() % 100;
if(x < 40) { ... }
else if(x < 50) { ... }
else if(x < 99) { ... }
else { ... }

272 :261:03/05/13 20:23
>>264サソ
ご指摘ありがとうございます。

ほんと厨なもんで何が危険なのか
何が奇妙なのかもわかりません、、、

ご教授おんがいします、、、

273 :デフォルトの名無しさん:03/05/13 20:23
>267
xが1〜40 → xが1以上 かつ xが40以下 → 1<= x && x <= 40

274 :デフォルトの名無しさん:03/05/13 20:27
×良いほうが思いつかないもので
○何一つ思いつかないので

275 :デフォルトの名無しさん:03/05/13 20:27
専門ではまだ演算子なんてものやってますが高校時代に関数、配列と文字列、シフト演算をかじる
ぐらいまでやってます。忘れかけてますが、、、、

276 :デフォルトの名無しさん:03/05/13 20:27
>>272
その前に何がしたくてそういうことをしているのかが分からない。
大方、代替案を出して終わる事になりそうだが、
何がしたいのか分からないので代替案が出せない。

277 :267:03/05/13 20:31

>271
なるほど 2)の考え方でいいんですね
ありがとうございます

278 :デフォルトの名無しさん:03/05/13 20:32
>>275
関数も配列もやってないのにこういう問題が出たの?

>>266 では 1 桁ずつ直接表示してたけど、
その値を配列に保存しておいて、
それをちゃんとした順序で表示すれば
逆から読ませないで済む。

279 :261:03/05/13 20:37
>>276サソ
関数の引数でわたされるものが
データのカタマリの先頭アドレスなんです。

そしてそのデータの3〜4バイト目を
書き換えたいのです。

厨で上手く説明できずすみません、、、

280 :デフォルトの名無しさん:03/05/13 20:39
>>266
早く10進数で表示させれた人は暇だろうからチャレンジしてみろと言われた。
クラスで2,3人できた奴がいたのでビックリ。自信なくなる鬱。H○L生です

281 :デフォルトの名無しさん:03/05/13 20:43
>>280
なるほど。そういうことか。

他にもいろいろやる方法はある。
上の桁からとるように工夫するとか。

とりあえず、表示部分は関数にして分離しておくと、
a + b, a - b, a * b, a / b, a % b で
同じ処理を簡単に使い回せるし、
プログラムも読みやすくなる。

282 :デフォルトの名無しさん:03/05/13 20:54
>261
まずは渡されるデータ構造を知ることが先決。
構造さえ知ってれば構造体メンバへの値の代入で終り。

283 :261:03/05/13 20:59
>>282サソ
ありがとんございます。

可変長のデータなので
構造体って感じじゃないみたいなのです、、、

284 :デフォルトの名無しさん:03/05/13 21:05
>>283
何かよー分からんが、memcpy なんか使わんでも

typedef short int int16;
void foo(char* p, int16 hoge)
{
 *(int16*)&p[3] = hoge;
}

でええがな。

285 :261:03/05/13 21:10
>>284サソ
アリガトンゴザイマスーーーー

これはキャストして代入って感じですか??


286 :山崎渉:03/05/13 21:12
(^^)
http://jbbs.shitaraba.com/computer/6328/




287 :動画直リン:03/05/13 21:13
http://homepage.mac.com/hitomi18/

288 :デフォルトの名無しさん:03/05/13 21:17
>>285
p[3] のポインタ &p[3](型は char*)を得て、
それを int16(16 ビットの整数型)へのポインタ型にキャストして、
そのポインタの参照するところに代入。

あまり使いたくない技だけど。

289 :デフォルトの名無しさん:03/05/13 21:28
>284
扇るつもりはないが、まだmemcpyの方がましだ・・・

290 :261:03/05/13 21:29
>>288サソ

ほんとありがdございます!
勉強になります。

ところでついでにもうひとつ質問を、、、
int16ってのはなんですか??
初めて見ました。
とりあえずぐぐってみます。

291 :デフォルトの名無しさん:03/05/13 21:32
表示部分は関数にしてというのがわからないのですが
#include <stdio.h>
int main(void)
{
int a,b,wa,d[100],n;
printf("===============================================================================\n");
printf(" いまから四則演算をする数値2つ入れなさい\n");
printf("===============================================================================\n");
printf("1つ目の数値を入力してください\n");
scanf("%d",&a);
printf("2つ目の数値を入力してください\n");
scanf("%d",&b);
printf("\n\t\t実行結果の表示です\n");
n=0;
wa=a+b;
for(;wa>0;wa/=2){
d[n]=wa%2;
n++;
}
d[n]='\0';
printf("\t\t%d + %d=",a,b);
for(n=n-1;n>0;n--){
printf("%d",d[n]);
}
return 0;
}
でできるようにはなったのですが

292 :構造体:03/05/13 21:35
struct tbl{
int n;

}

void main89
{
struct tbl dt;
void inp_int(int *)

inp_int(&dt.n);
}

構造体のメンバを副関数に渡すには引数はどうなるの?



293 :デフォルトの名無しさん:03/05/13 21:44
>>292
お前は何もかも意味不明

294 :デフォルトの名無しさん:03/05/13 21:44
>>292
int *型

295 :デフォルトの名無しさん:03/05/13 21:47
>291
つまりこういうこと。
#include <stdio.h>
int printbin(int num)
{
int i,j;
for(i = 1,j = 1;num >> j;i = i << 1,j++);
for(;i;i = i >> 1)(num & i)?fputc('1',stdout):fputc('0',stdout);
return 0;
}

int main(void)
{
int a,b;
..
printbin(a+b);
return 0;
}

296 :構造体:03/05/13 21:49
>>294
void inp_int(int *p.n)
でいいの?

297 :デフォルトの名無しさん:03/05/13 21:51
煽るつもりはないけど、ちょっとレベル低すぎないか?

298 :デフォルトの名無しさん:03/05/13 22:01
ある程度分かった人間の疑問は
>1のリンクで片付いちまうからなぁ・・
回答者のレベルは・・・運任せのところがあるなぁ・・

299 :291:03/05/13 22:04
>>297
スマソ。進んで勉強する気があると言う事で許してはくれまいか、、、

300 :デフォルトの名無しさん:03/05/13 22:12
>>299
参考書を読めばわかるレベルだと、そのうち釣りだと言われて、相手にされなくなるよ。

301 :デフォルトの名無しさん:03/05/13 22:17
とほほ。ここ返事が早いのでいいのですが、、、
スマソ。過去に言われた経験あり

302 :構造体:03/05/13 22:19
おい、私の答えはどうなったの?

303 :デフォルトの名無しさん:03/05/13 22:22
>>302
>>293

304 :デフォルトの名無しさん:03/05/13 22:23
>>302
ごく普通のint*を受ける関数でいいんだよ・・・

305 :デフォルトの名無しさん:03/05/13 22:23
プログラミングのレポートで「考察を書け」といわれたんですが、
実際何を書けばいいんでしょうか?
一つ一つ関数について書くべき?

306 :構造体:03/05/13 22:23
もう、いいよ。ばかたれども(ぷんすかぷんぷん

307 :デフォルトの名無しさん:03/05/13 22:25
>292
入門書レベルの質問だろが・・
<呼ばれる側>:<呼ぶ側>
int inp_int(int):inp_int(dt.n)
int inp_int(int *);inp_int(&dt.n)
int inp_int(struct tbl *):inp_int(&dt)
のどれかだろ

308 :デフォルトの名無しさん:03/05/13 22:27
どうも仮引数の書き方がわからないらしい。
inp_int(int *p) <- 名前は何でもいい

309 :デフォルトの名無しさん:03/05/13 22:30
もう疲れた。

310 :デフォルトの名無しさん:03/05/13 22:41
>>295
> for(;i;i = i >> 1)(num & i)?fputc('1',stdout):fputc('0',stdout);

もう少し三項演算子の使いどころを…

311 :デフォルトの名無しさん:03/05/13 23:11
>>305
自分でプログラミングに関することで、また、最近習ったことで
興味のあることなどについてずらずら書く。

312 :デフォルトの名無しさん:03/05/13 23:14
>>311
なるほど。どうもでした

313 :デフォルトの名無しさん:03/05/13 23:30
>>295
そんな奇妙な三項演算子の使い方する前に、
forをきちんとブロックで書く習慣つけろよ。
小手先のワザを覚えて使いたがる餓鬼みたいだぞ。

もし、forは敢えてブロックを使わないほど習熟している積もりなら
何故>>310や私が指摘しているのかすぐ判るだろ?

314 :デフォルトの名無しさん:03/05/13 23:36
> for(;i;i = i >> 1)(num & i)?fputc('1',stdout):fputc('0',stdout);

fputc((num&i)?'1':'0', stdout); のがいいな。

315 :デフォルトの名無しさん:03/05/13 23:48
Cで、あるテキストファイルから文字列を読み込むときに
半角スペースで区切られたいくつかの値を
それぞれ違う変数に代入したい場合は
どうやったらいいんでしょうか?
ちなみにdouble型です。

316 :デフォルトの名無しさん:03/05/13 23:50
void fprintb(FILE* file, unsigned int num) {
 if(num == 0) { return; }
 fprintb(file, num >> 1);
 fputc('0' + (num & 1), file);
}

void printb(int num) {
 fprintb(stdout, num);
}

317 :デフォルトの名無しさん:03/05/13 23:51
scanf("%f ",data);

318 :デフォルトの名無しさん:03/05/13 23:58
>>315
fgets()で1行取りこんで、sscanf()

319 :デフォルトの名無しさん:03/05/14 02:13
OracleのSQL埋め込みC(Proc)に関する質問です。

OracleでNUMBER(18,3)型で定義された項目をCで使いたいです。
当然、DBからデータを持ってくるためのホスト変数を定義します。

NUMBER(18,3)というのは、精度18桁ということです。
Cだとdoubleが精度15桁、long doubleが精度19桁なのですが、
Procでlong double型ホスト変数は定義できません
(double型ならあるのですが精度が足りません)。

char型の変数に文字としておとしてきてからlong doubleの数値に変換、という
方法はあるにはあるのですが、できれば直接数値として取得したいのです。
どうしたらよいのでしょう。同じ問題に直面した事のある方いませんか。

320 :デフォルトの名無しさん:03/05/14 02:15
>>321-1000
>>1を見ろという指摘は結構です

321 :デフォルトの名無しさん:03/05/14 02:25
このスレだけ読んどけばC言語マスターできますか?

322 :デフォルトの名無しさん:03/05/14 02:26
間違った知識を身につけられます。

323 :デフォルトの名無しさん:03/05/14 02:30
>>321
基本はマスター出来ます。
しかも>>1だけで。

324 :319:03/05/14 02:30
激しく申し訳ない。別のスレに逝ってきます。

325 :319:03/05/14 02:31
一言いい忘れ

>>320
指摘ありがd

326 :デフォルトの名無しさん:03/05/14 02:31
DECIMAL?

327 :デフォルトの名無しさん:03/05/14 05:13
static const FProc routineForSelector [] =
{
  /* formatSelectorReadPrepare */  DoReadPrepare,
  /* formatSelectorReadStart */    DoReadStart,
  /* formatSelectorReadContinue */  DoReadContinue,
  /* formatSelectorReadFinish */    DoReadFinish
};
勉強で人のソースを読んでたら、このような文が出てきました。
この配列内にあるDo〜というのは静的なグローバル関数として
宣言済みなんですが、この文は何でしょうか??

328 :327:03/05/14 05:27
ひらめきました。お騒がせしました。

329 :デフォルトの名無しさん:03/05/14 07:17
>>327
悪しきコメントの典型的な例だな。

330 :デフォルトの名無しさん:03/05/14 11:10
>>327
> 静的なグローバル関数として
Cには動的な関数というものはないし、staticならグローバルではない。

331 :デフォルトの名無しさん:03/05/14 11:24
文字を数値にする関数としてatoi,atol,atofがありますが、
long double型にする関数はないのでしょうか。
自前でやるしかない?

332 :デフォルトの名無しさん:03/05/14 11:27
>>330
はぁ? ポインタ経由の呼び出しは、動的な関数だろ。

333 :デフォルトの名無しさん:03/05/14 11:56
それは動的な呼び出し。関数自体を動的に作ることはできない。
JITみたいなのは別として。

334 :デフォルトの名無しさん:03/05/14 11:56
>>331
doubleならscanfで変換できるよ。

335 :ヽ(´ー`)ノ:03/05/14 12:04
c99 なら long double strtold(const char*, char** endptr) が。


336 :デフォルトの名無しさん:03/05/14 12:30
>>331
文字列からだと sscanf だな。

337 :331:03/05/14 12:56
>>334-336
レスどうもです。
sscanfを使おうと思ったのですが、また疑問が。
そもそもlong doubleの書式指定って何ですか?
long double hoge = 1;
printf("%lf",hoge);
とやっても、結果は
-21745549…と出てしまいます。

338 :デフォルトの名無しさん:03/05/14 13:07
L

339 :デフォルトの名無しさん:03/05/14 13:32
if ((*count = _lread(fp, buf, bytes))==0xffff)
return readErr;

というのを見たんですが、(式)==0xffffという部分がよくわかりません。
助けてください。

340 :デフォルトの名無しさん:03/05/14 13:37
>>339
_lread()の仕様がよくわかりません。
助けてください。

341 :デフォルトの名無しさん:03/05/14 13:39
_lreadの帰り値は UINT

本来は 0xffff ではなく HFILE_ERROR を使うべき所を
includeしなければちょっとコンパイルが速くなるからと、けちったものと思われる。

342 :デフォルトの名無しさん:03/05/14 14:01
>>341
本当にそのつもりだったとしたら安物買いの銭失いって感じだな(w

343 :デフォルトの名無しさん:03/05/14 14:21
ていうか知らなかっただけ

344 :339:03/05/14 15:36
なるほど・・・HFILE_ERRORが0xffffということだったんですか・・・
ありがとうごじゃーます。

345 :デフォルトの名無しさん:03/05/14 15:41
>>330
> staticならグローバルではない。

どういうこと?

346 :デフォルトの名無しさん:03/05/14 15:53
>>345
static を付けるとファイルスコープになる。
付けないとグローバルになる。

動的な関数ってのは、
関数型言語でよく使われるラムダ式とかそういうやつ。

347 :デフォルトの名無しさん:03/05/14 15:55
>>346
なんだそういうことか。
特定の関数からしか呼べない関数という意味だと思った>グローバルでない関数

ファイルスコープ・・・・

348 :デフォルトの名無しさん:03/05/14 16:00
「ファイルスコープ」に違和感を覚える人間がなんでC言語スレに居るんだろー

349 :デフォルトの名無しさん:03/05/14 16:02
ブロック外で定義したstaticをつけた変数はなんと呼ぶの?

350 :349:03/05/14 16:14
ねーなんと呼ぶのよー
>>346の考え方で考えるとグローバルでないということになるけど。

351 :デフォルトの名無しさん:03/05/14 16:20
関数の話をしているんだがな

352 :349:03/05/14 16:25
そもそもCの関数にはグローバルもローカルも静的も動的もないと思うんだけど。

353 :デフォルトの名無しさん:03/05/14 16:29
よかったね

354 :デフォルトの名無しさん:03/05/14 16:32
ファイルスコープ変数

355 :349:03/05/14 16:33
ファイルスコープ変数ですか。
覚えておきます。ありがとうございました。

356 :デフォルトの名無しさん:03/05/14 16:59
スコープとリンケージがごっちゃになっていないか?

static int x; /* 内部リンケージ */
int y; /* 外部リンケージ */

っていうんじゃないの?


357 :馬鹿:03/05/14 17:01
馬鹿な漏れに教えてくれ!
漏れは次のソースをコンパイルして実行した

void main(){
}

上手くコンパイルできた
出来たexeファイルを起動しても当然何も実行されない
しかし、出来たexeファイルを見ると47,104バイトの容量がある
なぜこんなに容量を食うんだろうか?

358 :デフォルトの名無しさん:03/05/14 17:14
グローバル関数で検索しても出てくるのは特定のクラスに属さない関数という説明ばかり。

359 :デフォルトの名無しさん:03/05/14 17:16
スタートアップルーチンとか
VCならmainCRTStartupとかsetargvとかがデカイ

360 :デフォルトの名無しさん:03/05/14 17:20
>>357
× void main
○ int main

実行ファイルに必要な情報と
main 関数を呼ぶルーチンが入ってる筈。
確か。

361 :馬鹿:03/05/14 17:28
>360
ありがとう


362 :デフォルトの名無しさん:03/05/14 18:34
あとはデバッグ情報がついてるとか。

363 :デフォルトの名無しさん:03/05/14 19:29
最初に実行した瞬間にウィルスに感染したとか。

364 :デフォルトの名無しさん:03/05/14 19:32
リンカがすでに感染してるとか。

365 :デフォルトの名無しさん:03/05/14 21:14
stdin を fseek はできますか?
したときの動作は規格で保障されてますか?
fseek(stdin, 0L, SEEK_SET)

366 :デフォルトの名無しさん:03/05/14 21:18
どちらもNO

367 :デフォルトの名無しさん:03/05/14 21:25
fgets で検出した EOF が stdin に残ってしまっています。
この EOF を消したいのですがどうしたらよいでしょうか?

検索すると fseek, fflush, rewind などを用いたプログラムを
見かけるのですが、どれも動作が保障されていないようです。

char str[10];
fgets(str, 10, stdin); <= EOF を入力すると
fgets(str, 10, stdin); <= この行のfgetsが実行されない

368 :デフォルトの名無しさん:03/05/14 21:44
>>367
すまん、fflush()と間違えた。fseek(stdin)は問題ない。


369 :デフォルトの名無しさん:03/05/14 22:06
fseek(stdin)じゃプロトタイプと合わないだろ。と言ってみる。

370 :デフォルトの名無しさん:03/05/14 23:48
質問です。

高さH、幅Wの三角波をプロットしたいのですが、正弦波sin()のように
三角波も標準的な関数として用意されているのでしょうか?

こういう関数なんですが


y

|/\/\/\/\/\/\/\ …
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄x

371 :デフォルトの名無しさん:03/05/14 23:51
>>370
生成式あるっしょ。それをプロットすればよし。

372 :デフォルトの名無しさん:03/05/15 00:00
>>371
5時間くらい考えて何度自分で作っても変な関数になってへこんでたんです。
で、もしかしたら用意されてるのかと思って聞いてみたんですが、式があるんですか…

持ってる本はC言語の入門書だけで、どうやら載ってないようです。
Web上を探してもどうもキーワードが悪いようで、みつかりません。

よろしければヒントを教えていただけませんか?

373 :デフォルトの名無しさん:03/05/15 00:12
>>370
Wの解釈が違うかもしれんけど…
double f(double x, double H, double W) {
  double t = x - floor(x / W);
  if (t < W / 2) {
    t = H / (W / 2) * t;
  } else {
    t = -H / (W / 2) * t + H * 2;
  }
  return t;
}

374 :デフォルトの名無しさん:03/05/15 00:15
strchr()の第2引数に'\0'を与えた時の動作は
仕様で規定されていますか?

bcbのヘルプによると、strchrに与える文字列は末尾の'\0'も含まれるので
返り値は末尾の'\0'の位置ということですが。

375 :デフォルトの名無しさん:03/05/15 00:18
>>373
ご丁寧に関数の提示までしていただき、ありがとうございます。
さっそくこれを参考に作業にとりかかろうと思います。
お手数をかけて申し訳ありませんでした。

376 :デフォルトの名無しさん:03/05/15 00:19
×お手数をかけて
○お手数をかけさせて

377 :デフォルトの名無しさん:03/05/15 00:23
>>374
それはCの仕様できまっている。
それを知らずに使って起きたバグに小一時間悩まされたことが・・・ manを注意深く見てようやくわかった(^_^;)

378 :デフォルトの名無しさん:03/05/15 00:28
>>370
#define H
#define W
でなんか定義されてるものとして

double sankaku(double x)
{
 double xx = x % W;

 if (xx < W / 2) {
  return (H * (xx / (W / 2)));
 } else {
  return (-H * ((xx - W) / (W / 2)));
 }
}
こんな感じかな?
式はもう少し簡単になりそうだけど



379 :374:03/05/15 00:29
ありがとう。安心した。

380 :デフォルトの名無しさん:03/05/15 00:30
BorlandのCコンパイラでgraphics.hみたいなのってあるの?

381 :デフォルトの名無しさん:03/05/15 00:30
#include <string.h>
size_t strlen(const char *s)
{
return strchr(s,'\0')-s;
}


382 :デフォルトの名無しさん:03/05/15 00:58
C++に関してですが、
クラスのオブジェクトへの参照(リファレンスではないです)を返す関数の戻り値の型は、
リファレンスあるいはポインタのどちらがいいんでしょうか?
各々にメリット・デメリットがあれば教えてください。


383 :デフォルトの名無しさん:03/05/15 00:59
ここは++のつかない古代のCスレ(´д`;)

384 :デフォルトの名無しさん:03/05/15 01:02
>383
すみませんでした。。。
C++のスレはあるんでしょうか?


385 :デフォルトの名無しさん:03/05/15 01:03
>>384
http://pc2.2ch.net/test/read.cgi/tech/1052625846/

386 :デフォルトの名無しさん:03/05/15 01:03
ありました。
失礼。。。


387 :デフォルトの名無しさん:03/05/15 01:02
C++相談室 part19
http://pc2.2ch.net/test/read.cgi/tech/1052625846/l50


388 :消防並:03/05/15 02:16
#include<stdio.h>
main()
{
int i,sum,x;
x=1;
sum=0
for(i=1;i<=100;i++)
{
sum+=x;
x+=1;
}
printf("合計=%d\n",sum);
}



すんません。教えてください。
↑のやつをBuilder5.5でコンパイルすると
7行目に構文エラーで(for)())(;)というのが出ます。
一体、何が間違ってるのか、まったくわかりません。
教えてください。

389 :デフォルトの名無しさん:03/05/15 02:17
>>388
sum=0;

一般に構文エラーだのsyntax errorだの言われたときは、
指摘された行の直前の行を見るとよいことが多い。

390 :消防並:03/05/15 02:20
>>389
ありがとうございます。


つーか、漏れ馬鹿すぎ。。。

>一般に構文エラーだのsyntax errorだの言われたときは、
>指摘された行の直前の行を見るとよいことが多い。

これは非常にためになる豆知識をありがとうございます。

391 :デフォルトの名無しさん:03/05/15 02:37
エディタのオートインデントやキーワードのハイライト機能で
バグに気づくこともあるね。
あとは、全角空白も見えるようにしておくとか。

392 :デフォルトの名無しさん:03/05/15 02:48
>388
豆知識その2
エラーが出たら最初の1つだけみて直して再コンパイル。
で、カナーリエラーの数が減る。

393 :デフォルトの名無しさん:03/05/15 02:52
豆知識その3

ソースを書かなければバグは発生しない。
仕事してる奴ほどバグを出す。

394 :デフォルトの名無しさん:03/05/15 03:14
エラーが出過ぎて見れません。どうすればいいのでしょうか?

395 :370:03/05/15 03:14
>>370です。フローチャート書いたら10数分でできました。
8時間もかけて、アホですね…



                _           ニ / l l
             /´´,ィ〕           /       気が付けば……
  ニ / l l   ,_   /  'ーっ          /ニ7
   /   /777/  /  ./ ̄             /         省略っ…!
  /ニ7 {   し'7/ ゙̄7/    ,. ''´ ̄`ヽr:z   :
   /   ヽ.  ノ { /〈/   /    _,、 ゝ       _ f'h、 
    :   |ー-|  X ,.へ    !   r'7/,ゞ7レリ       (.くノ ' 'ヽ  フローチャート
  ,rf'?   !   !// V   \_l   y/__ヽ,        .〉   ノ   省略っ…!
 〈  レフ .!    ̄/ ̄ ̄/ /   ,.イ | r'::   、    /   /´
  ヽ  く  `‐! !-l__/ /イ / / ̄`<:: _ ヽヽ.  /ー-v'   やって
.   V⌒ヽ_, l l-‐ヽ /  ´ l/ レ'      ,ゝ、  ̄7 i‐-'  / } }  しまったっ……!
   ヽ    ! !   ∨   /       /   \/l. !   ./  ノノ
     \__,,.ゝヽ''7    ./ ニ / l l   、   /ソ ,'─‐'   r‐ 、  さすがのカイジも
         /    /   /     ,イ ヽ./ / /、_ __/  ´ヾ、 フローチャート省略は
.        /    ノ   /ニ7   /;'|___ゝ'/   }   __,.へ)     猛省…!
       <、   ./     /   /;' | '´イ ` ー─‐'-‐'''´  

396 :デフォルトの名無しさん:03/05/15 03:15
>>395
そういう問題か?

397 :デフォルトの名無しさん:03/05/15 03:21
豆知識その4

フローチャートは不要。

398 :デフォルトの名無しさん:03/05/15 03:23
ごちゃごちゃになった処理の流れを整理するのに使ったりするけど。

399 :デフォルトの名無しさん:03/05/15 04:57
つまりアルゴリズムが頭に入ってなかったって事でファイナルアンサー?

400 :真紀俊男:03/05/15 05:01
ハァ?フローチャート?
フローシートだろ。

401 :デフォルトの名無しさん:03/05/15 05:17
ハローワーク

402 :デフォルト名無しさん:03/05/15 05:38
アイディアを貸してください。
#define TATE 480
#define YOKO 7
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
int array1[TATE][YOKO];
int tate;
int custNum;
int in;
int totalTime;
int pause;
int help;
int out;
int previous;
int current;
int value1, value2, value3;

srand(time(NULL));
custNum=1;
totalTime = 0;

403 :デファルと名無しさん:03/05/15 05:40
for(tate=0; totalTime<=TATE; tate++)
{

in = rand()%5+4;
if(in + totalTime <= TATE)
{array1[tate][0] = custNum;
custNum = custNum+1;
array1[tate][1] = in + totalTime;
help = rand()%3+4;
array1[tate][2] = help;}

totalTime = in + totalTime;
}
array1[0][3] = array1[0][1];
array1[0][4] = array1[0][1] + array1[0][2];




404 :デファルト七資産:03/05/15 05:41
for(tate=1; tate<custNum-1; tate++)
{
previous = tate-1;
out = array1[previous][4];
current = array1[tate][1];
value1 = array1[tate][2] + array1[tate][1];
value2 = array1[previous][4];
value3 = value2 + array1[tate][2];

if (current<=out)
{array1[tate][3] = value2;
array1[tate][4] = value3;}
else
{array1[tate][3] = array1[tate][1];
array1[tate][4] = value1;}
};

405 :デファルト七資産:03/05/15 05:41
for(tate=0; tate<custNum-1; tate++)
{
array1[tate][5] = array1[tate][3] - array1[tate][1];
array1[tate][6] = array1[tate][4] - array1[tate][1];
};


for (tate=0; tate<custNum-1; tate++)
{
printf("\n%d \t%d \t%d \t%d \t%d \t%d \t%d", array1[tate][0], array1[tate][1],
array1[tate][2], array1[tate][3], array1[tate][4], array1[tate][5], array1[tate][6]);


406 :デフォルト七資産:03/05/15 05:42
pause = tate+1;

if(pause%20==0)
{fflush(stdin);
getchar();}
};

fflush(stdin);
getchar();
return 0;
}

407 :デフォルト名無しさん:03/05/15 05:43
上のプログラムの縦の列の2,4,5番目を8時から夜の8時までの時間で
表したいのですがうまくいきません。
少しアイディアを分けていただけないでしょうか?
よろしくお願いいたします。

408 :デフォルトの名無しさん:03/05/15 05:51
>>402-407
>>407の意味も分からないし、もともと何のプログラムかも分からないです。
よく見れば分かるかもしれないけど、コメントを書く、説明するなりして
くだちいー。

409 :デフォルト名無しさん:03/05/15 06:07
すみません、説明不足でしたね。
一番左の列以外はすべて単位は分です。
そして、2番目が客の入ってくる時間、4番目が客が接客を受けた時間
5番目が客が出て行った時間です。
分で表すものだから60分を超えると70、とか80になってしまって
見難くなってしまって。。。
このプログラムは簡単なお店のシュミレーションです。
時間はランダムを使って決定されています。
分かりにくいかもしれませんgよろしくお願いいたします。

410 :デフォルトの名無しさん:03/05/15 06:07
>>406
stdinにfflushを使うなよ

411 :デフォルト名無しさん:03/05/15 06:10
すみません・・・

412 :デフォルトの名無しさん:03/05/15 06:11
for文のブロックの後(}の後)にはセミコロンはいらない。

413 :デフォルト名無しさん:03/05/15 06:12
ご、ごめんなさい(笑)

414 :デフォルトの名無しさん:03/05/15 06:12
array1[2,4,5][N]を朝の八時から夜の八時にしたいの?

415 :デフォルト名無しさん:03/05/15 06:13
>>414
はい、朝の8時にお店が開店して、夜の八時にしまる、、見たいな感じです。

416 :デフォルトの名無しさん:03/05/15 06:17
一番左の列というのはarray1[0]のこと?

417 :デフォルト名無しさん:03/05/15 06:18
一番左の縦の列は、1番目の客、2番目の客、、、、、、
という風になってます。

418 :デフォルトの名無しさん:03/05/15 06:21
なんつーか、酷いね

419 :デフォルト名無しさん:03/05/15 06:22
すみません、まだまだ初心者なもので。。。。

420 :デフォルトの名無しさん:03/05/15 06:24
左の列というのがプログラム上でどれを指すのか分からないんだけど・・・

421 :デフォルト七資産:03/05/15 06:26
array1[TATE][0]だと思います。すみません。

422 :デフォルトの名無しさん:03/05/15 06:32
もしかして、ランダムに生成される時間を朝の8時から夜の8時にしたいってこと?

423 :デフォルトの名無しさん:03/05/15 06:39
>>407 こうかな?
0:番号
1:客が入る時間 ○:○○
2:客が接客を受ける時間 ○分
3:この時間に入ってくれば前の客とかぶらなかったのにという時間 ○:○○
4:客が出る時間 ○:○○
5:(自分)客が店にいる時の、前の客の接客時間 ○分
6:客が入ってから出るまでにかかった時間 ○分

424 :デフォルト七資産:03/05/15 06:39
そうです、そのとおりです。よろしくお願いいたします。

425 :デフォルトの名無しさん:03/05/15 06:41
すみません。わかりにくくて・・・。

426 :デフォルトの名無しさん:03/05/15 06:42
>>424
朝の8時は8、夜の8時は20でいいのかな?

427 :デフォルトの名無しさん:03/05/15 06:44
はい、20時です。よろしくお願いいたします。

428 :デフォルトの名無しさん:03/05/15 06:45
>>427
8から20までの乱数を得たいのなら、rand()%13+8ってのはどう?


429 :428:03/05/15 06:47
もっと素直に、期待する範囲の値を得られるまでループしてもいいけど。

430 :デフォルトの名無しさん:03/05/15 06:48
>>407 たぶん
array[][]/60+8:array[][]%60

431 :428:03/05/15 06:48
ああ、時間じゃなくて分なのか。じゃあ13とか8を適当に変えて。

432 :デフォルトの名無しさん:03/05/15 06:53
>>407
内容は店のシュミレーションと言ってたけど、一定時間内に何人接客できる
かって事?それとももっと深い意味があるの?

433 :デフォルト名無しさん:03/05/15 06:56
一応、客の接客に何分かかるか、何分待たせたか、平均時間、などを
だそうと思っています。

434 :デフォルトの名無しさん:03/05/15 07:22
>>433
それは乱数で求めているから、結果はその乱数の幅の近似値になって
しまうと思うけど。時間帯によって、人口密度によって、待ち時間によって
マイナスになるもの、売上、接客係を増やすとどうなるか、等あると面白いかも。
あと、表示の仕方を直すのは多分こう。
printf("\n%d \t%d:%d \t%d \t%d:%d \t%d:%d \t%d \t%d"
, array1[tate][0]
, array1[tate][1]/60+8,array1[tate][1]%60
,array1[tate][2]
, array1[tate][3]/60+8,array1[tate][3]%60
, array1[tate][4]/60+8,array1[tate][4]%60
, array1[tate][5], array1[tate][6]);

435 :デフォルトの名無しさん:03/05/15 11:17
>434
ありがとうございます。とてもたすかりました。

436 :K&R三世:03/05/15 14:57
>>402
最初の for ループで、totalTime が判定文に使われているが
この時点では値は不定だぞ。tate と間違えていないか?

437 :_:03/05/15 15:04
  ∧_∧
 ( ・∀・)/< こんなのみつけたっち♪ 
http://www.hiroyuki.zansu.com/hankaku/jaz03.html
http://hiroyuki.zansu.com/hankaku/jaz10.html
http://www.hiroyuki.zansu.com/hankaku/jaz08.html
http://hiroyuki.zansu.com/hankaku/jaz09.html
http://www.hiroyuki.zansu.com/hankaku/jaz06.html
http://hiroyuki.zansu.com/hankaku/jaz05.html
http://www.hiroyuki.zansu.com/hankaku/jaz01.html
http://hiroyuki.zansu.com/hankaku/jaz02.html
http://www.hiroyuki.zansu.com/hankaku/jaz07.html
http://hiroyuki.zansu.com/hankaku/jaz04.html

438 :デフォルトの名無しさん:03/05/15 17:35
>【ライセンスや機能などに問題あり】
>Microsot C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/

>>39の問題ありってどういう事ですか?
教えて偉い人!

439 :デフォルトの名無しさん:03/05/15 17:41
>>438
最適化ができないらしい

440 :デフォルトの名無しさん:03/05/15 17:50
>>439
そうなんですか。わかりました。どうもありがとう!

441 :デフォルトの名無しさん:03/05/15 17:52
正直、最適化できないんじゃ要らないわけだが。

442 :デフォルトの名無しさん:03/05/15 18:28
過労死させられても反抗すらできない民族、それが日本人。
どうすりゃいいの?
       ∪ / ノ
  | ||   ミ    /            |           ヽ       / / /
  ヽ_)_)     ∧/∧         |        ∧ヽ∧  彡  しl_ノ
        ( / ⌒ヽ        |        ( / ⌒ヽ
         | |   |  ミ   ∧ |∧  彡    | |   |
         ∪ / ノ     ( / ⌒ヽ        ∪ / ノ
          | ||        | |   |         / / /
          ヽ_)_)      ∪ / ノ        しl_ノ
                   | ||
                   ∪∪
日本ロジテム(みずほの融資先)の子会社せいも素(みずほの融資先)で
サービス残業させすぎによる過労で自殺者が出た。
http://www.samos.co.jp
http://society.2ch.net/test/read.cgi/traf/1046749189/l50
http://tmp.2ch.net/test/read.cgi/company/1046775680/l50

443 :山崎渉:03/05/15 18:56
(^^)    

444 :質問厨 ◆Kwu0p51cCg :03/05/15 22:42
申し訳ないのですが質問です…。
大学のレポートなんですが。。。

#include <math.h>
#include <stdio.h>

int main(void)
{
float hankei;
float hankei_2, hankei_3, ensyutyou, menseki, h_menseki, taiseki, pi, radius, r_2, r_3;

printf("1つの実数(半径…単位:km)="); scanf("%f", &hankei );

☆ pi=4.0*atan(1.0);
ensyutyou=2*pi*hankei;
hankei_2=pow( hankei, 2 );
menseki=pi*hankei_2;
h_menseki=4*pi*hankei_2;
hankei_3=pow( hankei, 3 );
taiseki=4*pi*hankei_3/3;

printf("円の円周長=%5.1f\n\n", ensyutyou );
printf("円の面積=%5.1f\n\n", menseki );
printf("円の表面積=%5.1f\n\n", h_menseki );
printf("円の体積=%5.1f\n\n", taiseki );

return (0);
}

445 :質問厨 ◆Kwu0p51cCg :03/05/15 22:43
☆の部分でatanが定義されてないというエラーが出るんですが
どのように定義すればい良いのでしょうか?
検索エンジンで調べても全く分からず…。
どなたか…愛の手を。。。

446 :デフォルトの名無しさん:03/05/15 22:45
>>445
もしかして「undefined reference to atan」ってやつか?
もしそうならコンパイル(リンク)時に-lm

447 :質問厨 ◆Kwu0p51cCg :03/05/15 22:51
わざわざすいません。
大学のウルトラCというソフトではエラー無かったんですが
さっきダウソしたCマシーンというフリーソフトでは
「atanが未定義です」と出るんです。
>undefined reference to atan
の意味も正直わからない初心者です。
初心者なんて嫌われるのわかってるんですが。。。

448 :デフォルトの名無しさん:03/05/15 22:54
>>447
C Machineは無条件に捨てた方がいいかも。
標準関数は一部しか使えない。

449 :質問厨 ◆Kwu0p51cCg :03/05/15 22:56
あ。そうなんですか!!
ありがとうございます。
>C Machineは無条件に捨てた方がいいかも。
そのお言葉聞けただけで安心しました。
大学のソフトではエラー無しだったんでOKです。
脳内解決させて頂きました。
ホント質問厨に付き合ってくれてありがとうございました。

450 :デフォルトの名無しさん:03/05/15 22:59
>>449
>>39にもっとましなコンパイラをダウンロードできるサイトへのリンクがあるから見てみては。

451 :デフォルトの名無しさん:03/05/15 23:00
>449
>39

452 :デフォルトの名無しさん:03/05/15 23:00
>451
かぶった。鬱だ。。。

453 :質問厨 ◆Kwu0p51cCg :03/05/15 23:05
>450-452
ここまでしてくれるとは思っていませんでした。(失礼。。。)
ダウソしてます。頑張ります。
どうもありがとうございます。

454 :デフォルトの名無しさん:03/05/15 23:23
久しぶりのシャバだぜ。
ムショにいた3年間、毎日C言語を勉強してきた。
C言語のことなら俺に聞け。

455 :デフォルトの名無しさん:03/05/15 23:34
(・∀・)ムショムショ

456 :消防並:03/05/16 00:09
教えてください。
多次元配列 A={{2,3,4}
            {2,3,3}
            {3,3,3}}
という感じで表示したいんですが、
これは、printf()で要素一つ一つを%d%d%d…A[1][1]A[1][2]A[1][3]…
という風にして表示するしかないんでしょうか?

何か配列を一気に表示する方法ってありますか?

本にも、ググってもで無かったから無いかな。。。


>>391-393
本には載っていないような豆知識は非常にためになります。
ありがとうございます。

457 :デフォルトの名無しさん:03/05/16 00:15
i,jでループを回す。

458 :デフォルトの名無しさん:03/05/16 00:15
>>456

for (i = 0; i < 3; i++) {
 for (j = 0; j < 3; j++) {
  printf("%d", a[i][j]);
 }
}

459 :デフォルトの名無しさん:03/05/16 00:26
というかインデクス使わなきゃ配列のメリットがないだろ

460 :消防並:03/05/16 00:34
>>457
ありがとうございます。

>>458
わざわざ、丁寧にソースまでありがとうございます。

教えてもらったら、すごい簡単なんだけど、まったく、わからなかった。。。

すごい基本的なことだけど、
今、手元にあるCの本、3冊にはのってませんでした。
C言語辞書みたいなのを買うべきかな。。。

461 :デフォルトの名無しさん:03/05/16 00:36
>>460
見落としてるだけじゃないの?
じゃなかったらよっぽどDQNな本を買ったか

462 :デフォルトの名無しさん:03/05/16 00:37
どんな本だよ。二次元配列のループ処理も載ってないの?

463 :消防並:03/05/16 00:40
『C言語入門』 アスキー出版
『はじめて読むC言語』 アスキー出版
『よくわかるアルゴリズムの基本と仕組み』 杉浦賢

最後のやつはアルゴリズム中心でCのソースは
おまけ程度なので仕方ないかも。

上の二冊は、今、はじめて気がついたけど
どっちもアスキー出版だ。。。

464 :デフォルトの名無しさん:03/05/16 00:42
入門書は一冊でいいから、3000円以上する本を買いなさい。


465 :消防並:03/05/16 00:52
>>464
わかりました。
厚めのいろいろ載ってそうなやつ買おうと思います。

比較的、小さくて、薄めの本を買ってしまった。。。

466 :デフォルトの名無しさん:03/05/16 00:52
registerとかvolatileとかのキーワードって
どの位効果があるの?
普通の(ライブラリとかでない)プログラムでは考慮しなくても良い?

467 :デフォルトの名無しさん:03/05/16 00:59
>>466
register はコンパイラが最適化するのでいらないかも。あっても害はないけど
volatile は割り込みとか使うときには注意したほうがいいかも


468 :デフォルトの名無しさん:03/05/16 01:06
volatileは、割りこみ、スレッド、プロセス間共有メモリ、デバイスドライバなどを
書くときには必要になることがある。
例えば入力ポートはconstでvolatileだったりする。


469 :デフォルトの名無しさん:03/05/16 01:11
>>466
setjmp()/longjmp()を使うときにはvolatileが必要になる。

470 :デフォルトの名無しさん:03/05/16 01:13
registerヒントはいまどきのコンパイラだとほぼ完璧に無視するから
組み込みでもやらない限りは忘れていいよ

471 :466:03/05/16 01:27
ありがとうございました。>>467-470
K&Rに書いてある「最適化に関係のある特別な性質」って漠然としすぎw>volatile

472 :デフォルトの名無しさん:03/05/16 01:38
>>471
それよか、コンパイラの初期設定に、「最適化を無視する」みたいなのを
やっとけばいいのではないの?

473 :デフォルトの名無しさん:03/05/16 01:39
それじゃ全部無視されちゃうだろ。

474 :デフォルトの名無しさん:03/05/16 01:54
>>470
殆ど揚げ足取りに近いんだが、
どんな場合でもregisterキーワードをコンパイラが無視しない場合がひとつだけある。
それはregister修飾された変数のアドレスを取れないということだ。

475 :デフォルトの名無しさん:03/05/16 01:56
>>474
?だからコンパイラがregister指定を無視するんじゃないの?

476 :デフォルトの名無しさん:03/05/16 02:03
あったとしても
アドレスが参照されたためregister指定を無視しました
って旨のメッセージが出るだけだが。

エラーになるコンパイラがあるなら教えて。


477 :デフォルトの名無しさん:03/05/16 03:18
reg.c ----------------
#include<stdio.h>
int main(void) {
register int i;
printf("%p\n", &i);
return 0;
}
----------------------

$uname -a
CYGWIN_ME-4.90 xxx 1.3.4(0.47/3/2) 2001-11-07 13:36 i586 unknown
$gcc reg.c
reg.c: In function `main':
reg.c:4: warning: address of register variable `i' requested
$

むぅ、警告されるだけですた。ANSI的にはどうなんだろう。


478 :デフォルトの名無しさん:03/05/16 04:00
エラーにしろと言っているかどうかはしらないけど、アドレスは取れないことになっている。

479 :デフォルトの名無しさん:03/05/16 05:48
致命的なエラー(回復できないエラー)じゃないからエラーにしないのかもね。

480 :デフォルトの名無しさん:03/05/16 07:46
コボラーの書いたCのコードは性能が良いと聞いたのですが、
コボラーみたいに良いコードを書くコツを教えてください。


481 :デフォルトの名無しさん:03/05/16 08:27
イスラム教のシーア派というのはC使いのことですか?

482 :デフォルトの名無しさん:03/05/16 08:53
コボラーに限らず、まともなプログラマはまともなコードを書くよね。

483 :K&R三世:03/05/16 08:53
>>480
趣味でコボルやつは居ないからな。
大企業や官公庁の厳格な管理体制の下で鍛えられたから
安定した性能を誇るんでは?

484 :480:03/05/16 09:06
マジレス希望です。

485 :デフォルトの名無しさん:03/05/16 09:31
何処で聞いたんだ>480

486 :480:03/05/16 09:39
プログラマ板です。

487 :デフォルトの名無しさん:03/05/16 10:03
コボラーが書いたのが性能いいというと、思い当たる節がひとつだけある。
やつら、関数のパラメータを使わずグローバル変数で受け渡しするって話だから、
関数を呼ぶときパラメータをスタックに積むとかそういう操作しなくて済む分
性能がよくなるんじゃないのか? これくらいしかわからんけど、他になにかあるかな?

488 :デフォルトの名無しさん:03/05/16 10:15
コボラーが使う いわゆる計算機はCPU時間いくらの世界だったので、その点にシビアというだけなのでしょう。


489 :デフォルトの名無しさん:03/05/16 10:39
>>486=480
「 コボラーみたいに良いコードを書くコツ」も、マ板で聞け

490 :デフォルトの名無しさん:03/05/16 10:40
>>487
退避の分遅くならんか?

491 :デフォルトの名無しさん:03/05/16 11:18
プログラムの種類によっては、データ依存型の言語の方が性能がいいプログラムを書きやすいよ。
つーか、ごみみたいなコードを書くコボラーもいるし、
素晴らしいコードを書くCプログラマーもいるけどね。

492 :デフォルトの名無しさん:03/05/16 11:34
素晴らしいコードを書くCプログラマは元コボラー

493 :デフォルトの名無しさん:03/05/16 11:37
質問なんですけど,普通のC(C++)で
fgets(str,sizeof(str),stdin)
などで取得したstdinのバッファを開放するにはどうすればいいですか。
MSじゃないのでfflushとかはout系のものしかサポートしていないんですけど・・・・。

494 :デフォルトの名無しさん:03/05/16 11:39
>>493
何で開放したいんだ?
他のプロセスにか?

あ、解放か。

>>492
俺、元コボラーじゃないよ。

495 :デフォルトの名無しさん:03/05/16 11:41
C++でいう
fflush(stdin)
もしくは
rewind(stdin)
という動作をしたいんですよー。知ってたら教えてください??

496 :デフォルトの名無しさん:03/05/16 11:42
>>487
それって言語仕様なんだからさ

497 :デフォルトの名無しさん:03/05/16 11:45
>>494
それはつまり、「俺は素晴らしいコードを書くCプログラマ」だと言いたいのですね?

498 :デフォルトの名無しさん:03/05/16 11:46
fseek(stdin,0,SEEK_END);

499 :デフォルトの名無しさん:03/05/16 14:21
socketでAF_SECURITYの使い道おしえてください。

500 :デフォルトの名無しさん:03/05/16 14:52
socketは標準Cの範疇にないのでスレ違い。

ついでに言えば、ぐぐればヒントが得られるんじゃないか?

501 :デフォルトの名無しさん:03/05/16 15:41
>>480
>良いコード

まず、おまえの言う「良いコード」ってどんなコードよ?

502 :デフォルトの名無しさん:03/05/16 15:47
http://ck.jp.ap.valuecommerce.com/servlet/referral?sid=36418&pid=870202359

買ってください。おながいします。おながいします。

503 :デフォルトの名無しさん:03/05/16 17:20
>>205
#include <stdio.h>
#define DBG_PRINT( str ) printf( "Variable " #str "\n" )

int main( void )
{
  int test;

  DBG_PRINT( test );

  return 0;
}


こんな感じか?

504 :デフォルトの名無しさん:03/05/16 17:38
>>501
>>503

505 :デフォルトの名無しさん:03/05/16 17:43
きちんと設計してから書け。
Cプログラマが負けるとすれば多分そのあたりだ。
あいつらは仕様書に書いてないものは決して作らないからな。


506 :デフォルトの名無しさん:03/05/16 18:15
仕様書の行間も読まないしな。

507 :デフォルトの名無しさん:03/05/16 18:16
Cobolはデータ設計しないと書けないよねぇ。
Cだってきちんと設計すればいいものができると思うのだけど
やっつけ仕事ができちゃうからね。
#特にVC++なんかはもう・・・

508 :デフォルトの名無しさん:03/05/16 18:19
>>507
それは言語の問題ではない。
ツールに踊らされてる馬鹿の問題。

509 :デフォルトの名無しさん:03/05/16 19:02
sageていいですか?

510 :デフォルトの名無しさん:03/05/16 19:44
いくらでもsageたまえ

511 :デフォルトの名無しさん:03/05/16 21:01
int char x[12][6][7] = { 0 };
これの{ 0 }の部分はどういうことですか?

512 :デフォルトの名無しさん:03/05/16 21:09
要素を全て0で初期化したいんじゃネーノ?

513 :デフォルトの名無しさん:03/05/16 21:11
>>511
C の文法の勉強やり直せ

514 :動画直リン:03/05/16 21:11
http://homepage.mac.com/hitomi18/

515 :512:03/05/16 21:42
しったかぶってごめん。


516 :デフォルトの名無しさん:03/05/16 22:00
>>515
え? 合ってるだろ?

517 :デフォルトの名無しさん:03/05/16 22:04
合ってるよ

518 :デフォルトの名無しさん:03/05/16 23:10
memset(x,0sizeof x);

519 :デフォルトの名無しさん:03/05/16 23:49
配列や構造体で1つでも初期化するデータを指定した場合、
初期化するデータを指定しなかったところは全て0で初期化される。
これ、仕様。

520 :デフォルトの名無しさん:03/05/17 00:13
おせーてください
Cででてくる関数exp(x)はどうやって作られてるんですか?
xが自然数なら簡単ですけど、実数で定義されてますよね?
まさか、テイラー展開?

521 :デフォルトの名無しさん:03/05/17 00:16
<math.h>

522 :デフォルトの名無しさん:03/05/17 00:19
最近C言語を学び始めた者ですが、例題で分からないプログラムがあります。
コンパイルまではエラーなしなのですが、実行しようとするとエラーが出て
実行できないんですよ。どこが間違っているのか教えてもらえないでしょうか?
例題のプログラムは次の通りです。

523 :デフォルトの名無しさん:03/05/17 00:20
>>522
配列の範囲を超えて書き込んだりしているんじゃないの?

524 :522:03/05/17 00:20
もしかしてスレ違いでしたか?

525 :デフォルトの名無しさん:03/05/17 00:21
>>524
超せっかち?

526 :デフォルトの名無しさん:03/05/17 00:21
'次'というのはどれのことですか?

527 :522:03/05/17 00:23
どのスレがいいのか分からないんで一応、書いちゃいます。

#include <stdio.h>
#define N 20
double largest2(double, int);
main()
{
int k;
double x[N];
printf("入力された実数の中で最大のものを出力します\n");
for(k = 0; k < N; k++)
scanf("%lf", &x[k]);
printf("最大のものは%lf\n", largest2(x[k], N));
}

double largest2(double x[], int n)
{
double max;
int k;
max = x[0];
for(k =1 ; k < n; k++)
if(max < x[k]) max = x[k];
return max;
}

528 :デフォルトの名無しさん:03/05/17 00:25
>>527
largest2において、仮引数と実引数の型が違うぞ。
本当にエラーも警告も出なかった?

529 :528:03/05/17 00:26
その前にプロトタイプ宣言と定義がことなるんだ。
これはエラーになるはずだけど・・・

530 :522:03/05/17 00:27
>>528
largest2で使う変数などの型は統一しないといけないのですか?
コンパイラはvisual C++なんですけど、コンパイル時にはエラーなしで
警告は一つでました。

531 :522:03/05/17 00:28
>>529
mainのほうは自分で書いて、largest2の定義はコピペですので。。

532 :デフォルトの名無しさん:03/05/17 00:29
>>530
double *とdoubleじゃ明らかに違うだろう。

double largest2(double, int);

double largest2(double *, int);
にして、
largest2(x[k], N)

largest2(x, N)
にする。

533 :522:03/05/17 00:31
>>532
ありがとうございます。やってみます。

534 :デフォルトの名無しさん:03/05/17 00:35
>>520
libmのソースを読んでみれば?
漏れには理解できなかったけど・・・
http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/msun/src/e_exp.c?rev=1.8&content-type=text/x-cvsweb-markup

535 :522:03/05/17 00:41
>>532
無事に実行できました。

536 :デフォルトの名無しさん:03/05/17 01:14
>>534
自分で FreeBSD 使っているのに、忘れていました
exp意外と単純ですね
ありがとうごぜーますた

537 :デフォルトの名無しさん:03/05/17 02:03
#include <time.h>
#include <stdio.h>

main()
{
clock_t start,end;
char c;

start = clock();

printf("Press a key followed by ENTER: ");
scanf("%c",&c);

end = clock();
printf("Elapsed time = %f\n",(end-start)/CLK_TCK);
}

bccでコンパイルするとうまく動くんだけど、gccでコンパイルするとうまく動かない。
実行結果
bcc:
Press a key followed by ENTER:
Elapsed time = 1.772000
gcc:
Press a key followed by ENTER:
Elapsed time = 0.000000
なんで?

538 :デフォルトの名無しさん:03/05/17 02:15
CLK_TCKって何?

539 :デフォルトの名無しさん:03/05/17 02:17
clock_t って整数じゃないの?


540 :デフォルトの名無しさん:03/05/17 02:18
普通、秒数なら(double)(end-start)/CLOCKS_PER_SECってやるよね。

541 :537:03/05/17 02:32
>(double)(end-start)/CLOCKS_PER_SEC
これも試してみたけどgccだとうまく動かない。
コンパイルする時になにかオプションでもいるの?
それともcygwin上だとうまくいかないのかな。

542 :デフォルトの名無しさん:03/05/17 02:59
cygwin上のgccを使って試した。
>>537 はElapsed time = 0.000000になったけど、
>>540 にしたら、大丈夫だった。


543 :デフォルトの名無しさん:03/05/17 08:49
>>537
お前はデバッグの仕方も解らないのか?

544 :デフォルトの名無しさん:03/05/17 09:00
>>543
誰がお前じゃ。もう一度言うてみろ糞餓鬼

545 :デフォルトの名無しさん:03/05/17 09:14
>>543
言うことは、いっちょ前やね。
具体的にやりかた書いてみそ。

546 :デフォルトの名無しさん:03/05/17 09:15
>>544
誰が糞餓鬼じゃ。もう一度言うてみろお前

547 :デフォルトの名無しさん:03/05/17 09:19
>>545
お前もデバッグの仕方すら解らないのか?


548 :デフォルトの名無しさん:03/05/17 09:38
デバッグの方法を教えてください。

549 :デフォルトの名無しさん:03/05/17 12:30
printf

550 :デフォルトの名無しさん:03/05/17 13:02
0x15aa は二進では 1010110101010と書いてあったんですが、
じゃあ0x15aaは何進数なんですか?
それともプログラム専用の書き方みたいなもんですか?



551 :デフォルトの名無しさん:03/05/17 13:05
>>550
氏ね

552 :デフォルトの名無しさん:03/05/17 13:10
xまであるところを見ると36進数より上だとは思うのですが?

553 :デフォルトの名無しさん:03/05/17 13:11
>>550
4桁の2進数    16進数 
0000           0
0001           1
0010           2
0011           3
0100           4
0101           5
0110           6
0111           7
1000           8
1001           9
1010           a
1011           b
1100           c
1101           d
1110           e
1111           f





554 :動画直リン:03/05/17 13:11
http://homepage.mac.com/hitomi18/

555 :デフォルトの名無しさん:03/05/17 13:22
>>553
あんたは偉いな

>>550
プログラミング以前に勉強することがあるようだな
とりあえずコンピュータの基礎から始めろ

556 :デフォルトの名無しさん:03/05/17 13:25
コンピュータの基礎やっても意味ないよ。無関係だから。

557 :デフォルトの名無しさん:03/05/17 13:27
>>550
>0x15aaは何進数
C言語の場合、数字の前に0x書くと、その数値は16進数表記していることを意味する。
なお、数字の前に0を書いた場合は8進数。

#include <stdio.h>

int main(){
int a = 010;
int b = 10;
int c = 0x10;

printf(" 8進数 : %o %o %o \n",a,b,c);
printf("10進数 : %d %d %d \n",a,b,c);
printf("16進数 : %x %x %x \n",a,b,c);

return 0;
}


558 :デフォルトの名無しさん:03/05/17 13:31
>>556
壮絶なアホを発見。

559 :デフォルトの名無しさん:03/05/17 13:33
556 名前:デフォルトの名無しさん * sage 本日のレス 投稿日:03/05/17 13:25
コンピュータの基礎やっても意味ないよ。無関係だから。

560 :デフォルトの名無しさん:03/05/17 13:37
>>550
こういう入門書の一冊も読まずに質問するやつは無視してほしい。

561 :デフォルトの名無しさん:03/05/17 13:57
そこまで責めなくても・・・

562 :デフォルトの名無しさん:03/05/17 14:05
>>561

>>560は幼いが言ってることは一理ある。死んでくれ。

563 :デフォルトの名無しさん:03/05/17 14:34
>>547
プッ、やっぱり書けないだ。

それとも >>549 が答えなのか ?

564 :デフォルトの名無しさん:03/05/17 14:49
>>563は幼いが言ってることはもっと幼い。死んでくれ。

ガキじゃねえんだから......

565 :デフォルトの名無しさん:03/05/17 14:50
563 名前:デフォルトの名無しさん 本日のレス 投稿日:03/05/17 14:34
>>547
プッ、やっぱり書けないだ

566 :デフォルトの名無しさん:03/05/17 15:13
ああ、今日は学校が休みなんだな

567 :デフォルトの名無しさん:03/05/17 15:17
>>564-566
あんたの知ってるデバッグ方法とやらを書けばいいだけなのにねぇ...。

568 :566:03/05/17 15:21
>566
漏れはデバッグ方法なんかしらねえ
勝手に人違いするな

569 :566:03/05/17 15:22
>567だった
鬱だ詩嚢

570 :デフォルトの名無しさん:03/05/17 15:38
>>567
標準出力が使える場合: printf
エラー出力なら使える場合: frpintf(stderr, ...)
どちらも使えない: fp=fopen(...);fprintf(fp, ...)

571 :デフォルトの名無しさん:03/05/17 16:15
漏れの場合、おまいらと違ってバグを出さないから
デバックは不要なんだよな・・・
ま、せいぜいガンガってくれ。


572 :デフォルトの名無しさん:03/05/17 16:27
バグを出さないプルグラマはただのプルグラマだ

573 :デフォルトの名無しさん:03/05/17 16:29
ちょっとずつ書きながら確認してるからデバッグなんかしないし。

574 :デフォルトの名無しさん:03/05/17 16:32
>>573
ワラタ

575 :デフォルトの名無しさん:03/05/17 16:39
あ?とりあえずは>>573的な方法でやってるが。
あとはデバッガーでトレースするとか。
それでも駄目なら、>>570か。

というか、そもそも
548 :デフォルトの名無しさん :03/05/17 09:38
デバッグの方法を教えてください。

ネタだろ?がっつくなよ。

576 :デフォルトの名無しさん:03/05/17 17:32
構造体のビットフィールドがよく分かりません。
どのHPも扱ってなかったので2chに頼るしかなくなりました。
どうか教えて下さい。


577 :デフォルトの名無しさん:03/05/17 17:34
あまり使わないもんだが、普通入門書でも説明されてるだろう。

578 :デフォルトの名無しさん:03/05/17 17:34
>>576
環境依存するので使用は控えましょう


579 :デフォルトの名無しさん:03/05/17 17:35
おまいら教えてやれよw

580 :576:03/05/17 17:37
おまえらとっととおしえろよ

581 :デフォルトの名無しさん:03/05/17 17:38
「構造体のビットフィールド」で検索すればいろいろでてくるが、
>>578のいうとおり。

582 :デフォルトの名無しさん:03/05/17 17:41
#include<stdio.h>
main()
{
int i,x=2;
for(i=1;i<1;i++){
x=x*x;
}
printf("%d");
}

実行結果は「2」となります。

変数xに2を代入して二乗、それをもう一回二乗させて4という
答えを出したいんですが。できません。。。
何が間違っているかもわかりません。
教えてください。

583 :デフォルトの名無しさん:03/05/17 17:41
まあどこがわからないのか書いた方が答える方も答えやすいわな

584 :デフォルトの名無しさん:03/05/17 17:42
printfの行をよく見ろ。

585 :デフォルトの名無しさん:03/05/17 17:43
>>582
for文の中にprintf("hello!\n");
とでも入れてみろ
画面には何がでる?

586 :デフォルトの名無しさん:03/05/17 17:44
> 2を代入して二乗、それをもう一回二乗
16

587 :576:03/05/17 17:45
>>577-581
ありがとうございます。おかげで分かりました。
使うのは避けたほうがいいんですね。1つ勉強になりました。
ありがとうございます。

588 :デフォルトの名無しさん:03/05/17 17:49
for文も通らないだろ

589 :デフォルトの名無しさん:03/05/17 17:50
>>582
そのループは1度も(ry

590 :デフォルトの名無しさん:03/05/17 17:51
>>582
凄いコードだなw

591 :デフォルトの名無しさん:03/05/17 17:55
>582
printf("%d"); > printf("%d",x);
for(i=1;i<1;i++) > for(i=1;i<2;i++)

これで4になると思うけど

592 :582:03/05/17 17:56
for文がおかしい気もしますが
一回ループします
i=1は一回ループしたあと、設定されているようです。

i<=1,i<1,i<=2などいくつか試したんで
間違いないと思います。


> 2を代入して二乗、それをもう一回二乗
16

すいません、そうです。
二回2乗させて16です。



593 :582:03/05/17 17:58
>>591
ありがとうございます。

printf("%d"); > printf("%d",x);

これに気がつきませんでした。

for(i=1;i<1;i++) > for(i=1;i<2;i++)

これは、僕もそう思います。
ただ、何故かいろいろ実行して試してみると。。。

とにかく、ありがとうございました。
いろいろやってみます。

594 :デフォルトの名無しさん:03/05/17 17:59
http://www.h3.dion.ne.jp/~oto/

595 :デフォルトの名無しさん:03/05/17 17:59
>>592
もう一度for文を説明しているページをよく読め。 

596 :582:03/05/17 18:00
>>591
>for(i=1;i<1;i++) > for(i=1;i<2;i++)

今、やってみたけど、
やっぱり、これであってました。

僕がミスってました。
すんません。。。
そして、ありがとう。

597 :デフォルトの名無しさん:03/05/17 18:01
まともに解説してある入門書があったら教えて欲しい項目。
・ビットフィールド
・sprintf()系、sscanf()系のフォーマット
・strtoken()の使いこなし
・qsort()/bsearch()の使いこなし
・暗黙の型変換

598 :デフォルトの名無しさん:03/05/17 18:13
>>597
そういうのは入門書を読むようなレベルの人はまだ覚えなくてもいいです

599 :デフォルトの名無しさん:03/05/17 18:46
>>597
>・ビットフィールド
使わなくてよし
>・sprintf()系、sscanf()系のフォーマット
MSDNで十分
>・strtoken()の使いこなし
使わなくてよし
>・qsort()/bsearch()の使いこなし
使わなくてよし
>・暗黙の型変換
MSDNで十分

600 :デフォルトの名無しさん:03/05/17 18:46
いつも思うけど、プログラム系の参考書って高いよな。

601 :デフォルトの名無しさん:03/05/17 18:46
>>597
> ・ビットフィールド
>>578,>>581

> ・sprintf()系、sscanf()系のフォーマット
オンラインマニュアル

> ・strtoken()の使いこなし
これは漏れも知りません。
strtok()のことなら使いにくいので無理して覚える必要なし。

> ・qsort()/bsearch()の使いこなし
> ・暗黙の型変換
>>598


602 :デフォルトの名無しさん:03/05/17 19:01
>>599
その使わなくてよし(ビットフィールド以外)というのは>>598の理由で?

>>600
買う人が限られているからかな?医療系はさらに高いらしいね。


603 :デフォルトの名無しさん:03/05/17 19:46
sprintf/sscanfに関しては キーワード:書式指定子 で検索しれ。

strtokやqsortは、MSDNで
http://www.microsoft.com/japan/msdn/library/ja/vclib/html/_CRT_qsort.asp?frame=true
http://www.microsoft.com/japan/msdn/library/ja/vclib/html/_crt_strtok.2c_.wcstok.2c_._mbstok.asp?frame=true

シミュレータ系のプログラム組んでるけど、
sprintf/sscanf以外、どれもこれも使った記憶ないよ(笑

大切なのは「必要なときに必要な情報を検索できること」れす。
がんがれ。

*そういえば友人が作ったプログラムで、高速化のためにフラグを全部
ビットフィールド風に扱っているのがあったなぁー

604 :デフォルトの名無しさん:03/05/17 21:06
C言語で構造体を使う方法を教えてください。


605 :デフォルトの名無しさん:03/05/17 21:07
>C言語で構造体を使う方法を教えてください。
使わなくてよし

606 :デフォルトの名無しさん:03/05/17 21:16
>>604
char s[200];int a,b;
&s[0] = a;
&s[sizeof(int)] = b;

607 :デフォルトの名無しさん:03/05/17 21:17
>>606
いい太古とはわかるが、違うだろ。

608 :デフォルトの名無しさん:03/05/17 21:17
>>568-569
ああ悪い、「唐突にわけわからんこと書くなヴォケ。」だったな。

>>570
>>563>>549 で既出のことを今頃のこのこ書いてて恥ずかしくないの ?

609 :デフォルトの名無しさん:03/05/17 21:21
>>606
3,4行目は正しいの?

610 :デフォルトの名無しさん:03/05/17 21:22
>>608
ニチャニチャ

611 :デフォルトの名無しさん:03/05/17 21:36
>>607
全然わからない。>>606は何を言いたいの?

612 :デフォルトの名無しさん:03/05/17 21:39
>>611
ボケてるんだよ。わかってやれよ

613 :デフォルトの名無しさん:03/05/17 21:47
>>612
ねたを書くならわかるけど、ホントにボケててどうするよ。

*(int *)&s[0] = a;
*(int *)&s[sizeof(int)] = b;

って書かなきゃ。

614 :デフォルトの名無しさん:03/05/17 21:52
>>613
それをマクロで定義しとけば構造体( ゚听)イラネ

615 :デフォルトの名無しさん:03/05/17 23:20
>>597
とりあえず、「ANSI C言語辞典」でも買っておけ。

616 :デフォルトの名無しさん:03/05/17 23:24
>>603
>*そういえば友人が作ったプログラムで、高速化のためにフラグを全部
>ビットフィールド風に扱っているのがあったなぁー

ビットフィールドの方が参照に時間かかりそうだけど…。
ちょっと興味あるから詳細キボヌ。

617 :デフォルトの名無しさん:03/05/17 23:34
>597
 僕が比較的妥当な内容だと思う本なので、あなたにとってベストか分かりませんが...
 「C言語 関数の使い方+作り方」(技術評論社刊)、辞典と言う形態ですが「ANSI C言語辞典」(同)
の2冊があれば標準関数の理解には充分かと思います。
 標準関数の中には、たとえ使わなくても、理解する価値があるものが多いです。str、scanf系は特にそう思います。
 これらを読んでも分からない事は、他の本やnetの情報を拾い読みすると良いと思います。
 がんばって下さい。

618 :デフォルトの名無しさん:03/05/18 05:19
scanfは標準出力のバッファをフラッシュするの?

619 :デフォルトの名無しさん:03/05/18 06:03
( ´_ゝ`)プッ

620 :デフォルトの名無しさん:03/05/18 08:58
文字に色つけたいんだけど無理?

621 :デフォルトの名無しさん:03/05/18 08:59
コンパイルして実行するとなにかキー押すまでDOS画面が閉じませんが
exeファイルから実行するとキー押す前に消えてしまうのですが
消えなくする方法ありませんか?    

622 :デフォルトの名無しさん:03/05/18 09:00
getchar();

623 :デフォルトの名無しさん:03/05/18 09:34
>>621
プロパティで
「プログラム終了時にウィンドウを閉じる」
のチェックをはずせばよいよいよい。


624 :デフォルトの名無しさん:03/05/18 09:38
>>620
このスレ的な答えは「標準Cではできない」だが、
OSなどの環境くらい書こうよ。

625 :デフォルトの名無しさん:03/05/18 09:45
>>620
マジックで塗れ。

と言う冗談はさておき、環境依存だからあんたの環境にマッチしたスレへ Go!!

626 :デフォルトの名無しさん:03/05/18 09:51
ネタは結構(^_^;)
マジレス希望

627 :デフォルトの名無しさん:03/05/18 09:53
>>623
exeファイルのプロパティですか?
見当たらないのですが(;´Д`)

628 :デフォルトの名無しさん:03/05/18 09:53
>620
SetTextColor();

629 :デフォルトの名無しさん:03/05/18 10:00
>>627
プロパティがないのか項目がないのか。
そもそもOSは何だ?


630 :デフォルトの名無しさん:03/05/18 10:07
>>629
そのOS is Windowsみたいな発言止めてくれんか?恥ずかしい。


631 :デフォルトの名無しさん:03/05/18 10:08
>>630
DOS画面とかexeとか言っているあたり、Windowsしか考えられないが。

632 :デフォルトの名無しさん:03/05/18 10:09
家のパソコンは常時DOS画面なんだよw

633 :デフォルトの名無しさん:03/05/18 10:18
>>630=犬厨(プ

634 :デフォルトの名無しさん:03/05/18 10:21
>>629
(;´Д`)項目が見つかりません
     OSはXPです

                  

635 :デフォルトの名無しさん:03/05/18 10:24
OSはXPですOSはXPですOSはXPですOSはXPですOSはXPですOSはXPですOSはXPです
OSはXPですOSはXPですOSはXPですOSはXPですOSはXPですOSはXPですOSはXPです
OSはXPですOSはXPですOSはXPですOSはXPですOSはXPですOSはXPですOSはXPです
OSはXPですOSはXPですOSはXPですOSはXPですOSはXPですOSはXPですOSはXPです
OSはXPですOSはXPですOSはXPですOSはXPですOSはXPですOSはXPですOSはXPです
OSはXPですOSはXPですOSはXPですOSはXPですOSはXPですOSはXPですOSはXPです
OSはXPですOSはXPですOSはXPですOSはXPですOSはXPですOSはXPですOSはXPです
OSはXPですOSはXPですOSはXPですOSはXPですOSはXPですOSはXPですOSはXPです
OSはXPですOSはXPですOSはXPですOSはXPですOSはXPですOSはXPですOSはXPです
OSはXPですOSはXPですOSはXPですOSはXPですOSはXPですOSはXPですOSはXPです
OSはXPですOSはXPですOSはXPですOSはXPですOSはXPですOSはXPですOSはXPです
OSはXPですOSはXPですOSはXPですOSはXPですOSはXPですOSはXPですOSはXPです
OSはXPですOSはXPですOSはXPですOSはXPですOSはXPですOSはXPですOSはXPです
OSはXPですOSはXPですOSはXPですOSはXPですOSはXPですOSはXPですOSはXPです
OSはXPですOSはXPですOSはXPですOSはXPですOSはXPですOSはXPですOSはXPです
OSはXPですOSはXPですOSはXPですOSはXPですOSはXPですOSはXPですOSはXPです

火に油をどぷどぷと・・・

636 :デフォルトの名無しさん:03/05/18 10:31
漏れはいまだに95使ってるってのに、
XPなんて贅沢だ!


637 :デフォルトの名無しさん:03/05/18 11:20
独学で勉強しているのですが、MSDNの読み方がよくわかりません。

例えば、
scanf("%d" ,&num);

scanf("変換仕様", &変数)
というように学んだのですが、MSDNの説明で

int scanf( const char *format [,argument]... );
の場合、意味がわかりません。

MSDNの読み方を説明しているサイトってありますか?

638 :デフォルトの名無しさん:03/05/18 11:30
Vine Linux2.5上のemacsでC言語を書いてるんですが、
emacsで文法ごとに色分けしてくれる設定ってないですかね?
知ってる人教えてください。お願いします。

639 :デフォルトの名無しさん:03/05/18 11:34
(;´Д`)で結局、どうやって閉じないようにするんでしょうか、、、

640 :デフォルトの名無しさん:03/05/18 11:41
>>637
辞書でも引け

641 :デフォルトの名無しさん:03/05/18 11:44
>>639
だからスレ違いなんだってばさ。

>>638
文法ごとって?
特定のキーワードに色をつけるコードはあったと思うけど。

>>637
その、const char*formatが君の習った変換仕様の型だ。
MSDNの読み方以前にCの文法の勉強をした方がいいんじゃないのか?

642 :デフォルトの名無しさん:03/05/18 11:49
>>639
だからgetch();かgetchar();を最後に入れろと。

>>637
返り値がintで関数名がscanfで
引数の一個目の型がconst char*で、場合によっては追加の引数があるということ

643 :デフォルトの名無しさん:03/05/18 12:44
>>637
誰かに教えてもらわないと無理よ。いくら高級言語でも独学では非常に
厳しいわよ!昔の私がそうだったように!ある程度教わったら基本情報の
試験受けなさい。(私のころは第2種)たとえ落ちても、第2種の試験勉強
してればわかるようになるわ!


644 :デフォルトの名無しさん:03/05/18 12:51
>>620
そうそう書き忘れたけどprinf("\xlb[色番号 m");
でも色が変わるわよ!

645 :デフォルトの名無しさん:03/05/18 13:13
>>644
残念ながらそれじゃかわらんな

646 :デフォルトの名無しさん:03/05/18 13:15
なんで皆して環境依存の話してるんだよぅ

647 :デフォルトの名無しさん:03/05/18 13:21
>>644
win98以前でないとDOSのエスケープシーケンスコードは使えんかった気がする。
俺のマシン、XPだから確認不可能なんだけどね。

648 :デフォルトの名無しさん:03/05/18 13:23
ってかそれ以前に「l」は16進数でないだろ

649 :デフォルトの名無しさん:03/05/18 14:22
winとかdosしか知らん連中が多いのぅ...その上みーんな自分と同じ環境と思うておるんかのぅ....

650 :デフォルトの名無しさん:03/05/18 14:24
Windows のシェアからしてしょうがない。

651 :デフォルトの名無しさん:03/05/18 14:27
定期的にこの話題と会話がでてくるよなぁ

652 :デフォルトの名無しさん:03/05/18 14:29
シェアが大きいと、そうなるんかの? なんだかしょっぱいオツムだのぅ...。

653 :デフォルトの名無しさん:03/05/18 14:51
win、dos、mac、nuix、後他に何がありましたっけ?

654 :デフォルトの名無しさん:03/05/18 15:03
>>653
お前はしゃべらんでええよ。

655 :デフォルトの名無しさん:03/05/18 15:08
>>654 ごめん・・・

656 :デフォルトの名無しさん:03/05/18 15:14
>>655
元気出せ。

657 :620:03/05/18 15:27
一応環境っと
OS windows 2000
コンパイラ gcc
環境に依存するスレってどこだろ?Σ(゚Д゚;≡;゚д゚)ドコ?

658 :デフォルトの名無しさん:03/05/18 15:45
strcspnを使って文字列から特定の文字列を切り出そうとしているのですけれど
2バイト文字の1部が一致するためそこで勝手に区切られてしまうのです。
charset"[]"を使って切り出そうとしたんですけど2バイト文字"ー"が81 5Bで
"["は5Bなので"["でないのにそこまでの文字数しか返してくれないのです。
2バイト文字の存在を考慮した場合どういう考え方で処理を書かないといけないでしょうか?

659 :デフォルトの名無しさん:03/05/18 15:45
なんかUNIXとか知ってる奴って偉そうで嫌味っぽいな。

660 :デフォルトの名無しさん:03/05/18 15:51
char[]から1文字(=1byte/2byte)を取得する関数を作ればいい。

使用する文字コードにもよるが、
読み込んだ文字が1byte文字の範囲ならばそのまま返し、
2byte文字ならば更に次の文字を読み込んで結合して返せばよろしいかと。

661 :デフォルトの名無しさん:03/05/18 15:56
>>658
S-JISなら1byteずつ読んで8x,9x,Exの時は次のbyteを飛ばす

662 :デフォルトの名無しさん:03/05/18 16:28
>>657
Windows2000 で gcc か...。
Cygwin とかは入れてないってことだな。

とりあえず、

Win32API 質問箱 Build11
http://pc2.2ch.net/test/read.cgi/tech/1052651750/

が一番近いかと。

ただ Win2K + gcc の組み合わせで使ってる人ってあまりいないから、自分で色々調べることができないと辛いと思うよ。

>>659
まあ、ここは「C言語」のスレだから Windows 前提で来られても困る。
嫌味と言うのは、個人に属することなのでコメントはしないけど。

>>658
strcspn() は2バイト対応じゃないからしょうがない。
環境はよくわからんけど、_mbscspn() みたいな奴はないのか ?

663 :620:03/05/18 16:34
>>662
あ、cygwin上のgccでした。説明省いてスマソ。とりあえずそこ見てみます。

664 :デフォルトの名無しさん:03/05/18 16:36
>>659
それは厳密には、「Linux」を使ってる奴ら、な。
奴らと一緒にしないでくれよ。


665 :デフォルトの名無しさん:03/05/18 16:42
>>663
Unix 板の Cygwin スレにでも行くと吉。

666 :デフォルトの名無しさん:03/05/18 16:45
定数はマグロにするといいと聞いたのですが、どういう意味なんでしょうか?
マグロ関数とかと何か関係があると想像してるんですが・・・


667 :デフォルトの名無しさん:03/05/18 17:01
もっとひねれ

668 :デフォルトの名無しさん:03/05/18 17:19
>>663
だから環境はきちんと書けとあれほど...

669 :デフォルトの名無しさん:03/05/18 17:26
久しぶりに C でプログラムを書いてみたのだけど、 Java に慣れきってしまったせいで、
エラーだしまくり ^^;

昔はすらすら書けたのになぁ、、、

670 :デフォルトの名無しさん:03/05/18 17:38
夢・独り言
http://life.2ch.net/yume/

671 :デフォルトの名無しさん:03/05/18 18:05
人生相談
http://life2.2ch.net/jinsei/

672 :デフォルトの名無しさん:03/05/18 19:06
>>643
基本情報の勉強だけではC言語なんて身に付かないと思うけど。
あれはあくまでも用語の勉強。

673 :632:03/05/18 19:25
嘘だよ

674 :デフォルトの名無しさん:03/05/18 19:36
ベクターワークスを使っていて、ある操作(編集→すべてを選択、加工→合成)で必ず、Microsoft VisualC++ Runtime Library     RuntimeError!
abnormalprogramtermination と表示されOKするとそのアプリが強制終了になってしまします。
そのときは OK しかクリックできません。スレ違いかもしれませんけど、たどり着いたのがここでした!

675 :658:03/05/18 19:36
_mbscspn()を使うと簡単に出来てしまいました。662さんありがとうございます。
ですがこのまま判らないままにするのもアレなのでちょっと2バイト文字について
勉強してみようと思います。せめてこの部分が自力で実装できるぐらいにー。
660,661さん参考にさせていただきます。


とりあえずShift-JISが何たるかから・・・。

676 :デフォルトの名無しさん:03/05/18 19:41
>>674
帰れ

677 :デフォルトの名無しさん:03/05/18 19:47
>>675
それ以前に、VC++ とか使ってるんだろうから、質問する時はそっちのスレにした方がいいよ。

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

678 :デフォルトの名無しさん:03/05/18 20:04
nCrの計算てどんな風に書けばいいんでしょうか?

679 :デフォルトの名無しさん:03/05/18 20:15
再帰関数で>>678

680 :デフォルトの名無しさん:03/05/18 20:57
float.h を眺めていると、LDBL_DIG が 15 で、DECIMAL_DIG が 17 と
定義されていたのですが、どうして DECIMAL_DIG の方が大きいのでしょう?
自分の理解ではこの2つは同じでないといけないと思うのですが。

681 :デフォルトの名無しさん:03/05/18 20:57
>>679
再帰使う必要あるか?

682 :デフォルトの名無しさん:03/05/18 21:02
>>680
>>643

683 :デフォルトの名無しさん:03/05/18 22:00
よく調べたら定義上違って当然だった(汗
同じになるのは基数が10の整数乗の場合です、はい…

684 :680:03/05/18 22:01
683 = 680 です、すいません。

685 :デフォルトの名無しさん:03/05/18 22:36
処理系ってコンパイラのことっすか?

686 :デフォルトの名無しさん:03/05/18 23:36
volatileって使い道あるんですか?

687 :デフォルトの名無しさん:03/05/18 23:38
>>685
コンパイラとかインタプリタとか。

688 :デフォルトの名無しさん:03/05/18 23:54
>>686
ある。

マルチスレッドとか、デバイス制御とかやってると必須。
要するに自分以外が変数を勝手に書き換えちゃったりする時に使う。

689 :デフォルトの名無しさん:03/05/18 23:57
>>688
よくイメージがわかない・・
constと違うんですか?


690 :デフォルトの名無しさん:03/05/19 00:03
コンパイラが最適化するのを防ぐのもある


691 :デフォルトの名無しさん:03/05/19 00:06
>>690
そのためにあるんじゃ・・・・

692 :デフォルトの名無しさん:03/05/19 00:07
autoと単項+演算子以外は意味がある。

693 :デフォルトの名無しさん:03/05/19 00:08
volatileの説明に
その変数の値が、明示的に定義されていない方法で変更され得ることをコンパイラに
知らせることになる。
と書いてありました。「明示的」?

694 :デフォルトの名無しさん:03/05/19 00:08
>>689
const は、そのシンボルを通じて書き込みが出来ないと言う指定。
volatile は、現在動いているプログラムとは違う要因で書き換えられる事がある、と言う指定。

695 :689:03/05/19 00:11
>>694
例えばどのようなことでしょう?

696 :デフォルトの名無しさん:03/05/19 00:13
while(a);
一見aの値が変わらないように見えるから無限ループだけど、もしも他の要因でaが書き換えられることがあったら・・・
でもそんなことコンパイラは分からないから、volatileつけないと条件式すらなくして完全な無限ループにしてしまうかも。

697 :デフォルトの名無しさん:03/05/19 00:14
>>695
他のスレッドやハード的な要因で書き変わることが有り得る、と言うこと。

698 :696:03/05/19 00:15
あ、aの初期値が0以外の場合ね

699 :たすけて〜:03/05/19 00:17
DirectInput8.1 なんですけど、
一度だけ、キー判定したいのだが、
これだと何故か、連続判定してしまいます。
ああ、アクションゲームが作れないよ〜。
だれか、教えてください。

BOOL GetKeyOnce( BYTE bKey )
{
static bool bb_Flag = true;

// キーボードの更新
lpDevKeyboard->GetDeviceState( 256, KeyboardData );

// キーが押されているか
if ( KeyboardData[bKey] & 0x80 && bb_Flag == true )
{
bb_Flag = false;
return TRUE;
}
// キーが押されていない
else
{
bb_Flag = true;
return FALSE;
}
return FALSE;
}


700 :デフォルトの名無しさん:03/05/19 00:17
volatileつけると、勝手にレジスタに配置したりしなくなるんだっけ?

701 :デフォルトの名無しさん:03/05/19 00:19
>>689
標準 C じゃねぇだろ!
カエレ!

702 :デフォルトの名無しさん:03/05/19 00:19
>>696
なんとなく分かったような気がしました。
でも他の要因って??馬鹿ですいません
>>697
プログラムと関係のないところで変数が変わるんですか?

703 :701:03/05/19 00:19
>>701
× >>689
>>699

鬱だ…

704 :デフォルトの名無しさん:03/05/19 00:20
便乗ですが、構造体やクラスのメンバの場合でも volatile の指定が必要に
なる(メンバがそのような最適化の対象になる)ことはあるでしょうか。

705 :デフォルトの名無しさん:03/05/19 00:20
>>704
一部のメンバーをってのは無理だろ?
構造体変数全体を。

706 :デフォルトの名無しさん:03/05/19 00:21
メンバにvolatile付いてるのは何か間違ってる可能性が高いと思われ。

707 :デフォルトの名無しさん:03/05/19 00:22
>>702
一番試しやすいのはシグナルによって呼び出される関数かな。

708 :デフォルトの名無しさん:03/05/19 00:25
>>707
すいません。まったくわかりません。
まだまだ初心者ですね>俺
Cはじめて1ヶ月なのでまだまだ勉強しないと。
出なおしてきます。答えてくださったみなさんありがと。


709 :デフォルトの名無しさん:03/05/19 00:28
プロでも分野によっては全然使わないと思う。

710 :デフォルトの名無しさん:03/05/19 00:28
>>702
対象のオブジェクトが、ハード的に変化するようなレジスタとかな。

711 :704:03/05/19 00:32
>>705-706
なるほど、機械語レベルの話はよく分からないのですが、メンバが
最適化される可能性はないと考えていいのですよね。

712 :706:03/05/19 00:34
>>711
そんなことは言ってない。

713 :デフォルトの名無しさん:03/05/19 00:36
すいません。消えたはずの>>708です
ぐぐってみたのですが、英語ばっかだったので無理でした。
英語力も重要ですね。
>>709
そうですか。使わない分野に進みたいです。
>>710
すいません。PC内部?的なことはさっぱりです

714 :デフォルトの名無しさん:03/05/19 00:37
>>711
メンバーには型しか指定できず、記憶域などは指定できないんじゃないかということ。


715 :714:03/05/19 00:40
ちなみに、C++のクラスは知らない。C++しらないから・・・

716 :711:03/05/19 00:41
>>711,>>714
volatile を根本的に誤解していました。宣言時ではなく定義時に
どこに取るかということなんですね。

717 :706:03/05/19 00:41
>>714
volatileは記憶域の指定じゃない。

718 :714:03/05/19 00:42
>>717
記憶域"など"だってば。

719 :デフォルトの名無しさん:03/05/19 00:44
>>705
今し方、VC でテストプログラムを組んだ所、
問題なくコンパイル出来ますた…。(;´Д`)

720 :デフォルトの名無しさん:03/05/19 00:47
>>719
まじだ(;´Д`)
gccで-ansi -pedanticつけても通る(;´Д`)

意味上ではどうなるんだろ。

721 :デフォルトの名無しさん:03/05/19 00:49
staticはだめか。
記憶域指定だけがだめなのかな。

722 :719:03/05/19 00:51
>>721
VC では通ったぞ?(;´Д`)

723 :デフォルトの名無しさん:03/05/19 00:52
>>722
gccではパースエラーになったよ。

struct testkozotai{
int n;
static int c;
};

724 :デフォルトの名無しさん:03/05/19 00:54
>>722
c++でコンパイルしてるんじゃない?

725 :706:03/05/19 00:57
volatile修辞された変数へのアクセスは省略されず、
シーケンスポイントをまたいで順序変更されないことが保証される。

構造体メンバを修辞しても意味は同じ。

ってことでよろしいか?

726 :719:03/05/19 00:57
>>723
そう言う意味か…。
static に volatile 宣言だと(ry

727 :デフォルトの名無しさん:03/05/19 01:14
>>702
>>469

728 :デフォルトの名無しさん:03/05/19 02:06
分岐命令で次の命令の先頭アドレスを基準に分岐先を
指定しているアドレス指定方式はなんて呼ぶんだ?

729 :デフォルトの名無しさん:03/05/19 02:14
相対アドレス指定か?
すれ違いだ

730 :728:03/05/19 02:27
>>729
どこで聞けばいいか分かんなかったから
とりあえず分かる人がいそうなここに書いちまったスマソ


気が向いたらこっちも教えてくれ
出力ポート・入力ポートのアドレスを指定しているアドレス指定方式は?

731 :デフォルトの名無しさん:03/05/19 02:32
情報処理の勉強したほうが早いぞ

732 :728:03/05/19 02:35
>>731
情報処理の勉強中なわけなんだが_| ̄|○

733 :デフォルトの名無しさん:03/05/19 02:39
>>732
プログラマ板にスレがあるぞ

734 :デフォルトの名無しさん:03/05/19 04:02
>>730
「相対」とくれば、「絶対」だろうに。

735 :デフォルトの名無しさん:03/05/19 12:51
ちがうよ

736 :デフォルトの名無しさん:03/05/19 13:08
いいえ、その通りです

737 :デフォルトの名無しさん:03/05/19 14:10
main 関数で、
main(int argc, char **argv)

main(int argc, char *argv[])
の2つがありますが、好きなほうをつかっていいのですか?

738 :デフォルトの名無しさん:03/05/19 14:22
main(int argc, char *argv[])で
argc argvはなんて読めば良いのですか?

739 :デフォルトの名無しさん:03/05/19 14:27
>>737
相互に置き換え可能。
同様に、
char *strfunc(char *s);
と言う関数宣言があったとすると、
char *strfunc(char s[]);
と宣言しても構わない。
まぁ、混ぜると読みにくいから適当に統一しとこうや。

>>738
ぐぐればいろいろ出てくると思うぞ。
私は「アーグシー、アーグヴイ」と読んでるが。

740 :デフォルトの名無しさん:03/05/19 14:46
>>739
> 同様に、
> char *strfunc(char *s);
> と言う関数宣言があったとすると、
> char *strfunc(char s[]);
> と宣言しても構わない。

宣言も置き換え可能なのですか。
知りませんでした。

ありがとうございます。

741 :デフォルトの名無しさん:03/05/19 14:58
>>738
アーグシー、アーグブイ

742 :デフォルトの名無しさん:03/05/19 15:16
>>740
念のために付け加えるけど、宣言で置き換え可能なのは
関数のパラメータの場合だけだからな。

関数の戻り型は置き換えできない
char *strfunc(char *s); → char strfunc(char *s)[];(できない)

し、大域変数も置き換えできない
char *str; → char str[]; (できない)

743 :デフォルトの名無しさん:03/05/19 15:51
>>742
補足しとこう。

> 関数の戻り型は置き換えできない
> char *strfunc(char *s); → char strfunc(char *s)[];(できない)
これは宣言自体ができない(syntax error)。

> し、大域変数も置き換えできない
> char *str; → char str[]; (できない)
この二つは意味が異なる。


744 :デフォルトの名無しさん:03/05/19 18:31
struct aho{
struct x xx;
struct y yy;
}*baka;
struct hoge{
struct x xx;
struct y yy;
}piyo;
上記のような構造体があり
bakaをpiyoにコピーしたいんですが
memcpyはキケンと耳にしました。
ホカに方法があるのでしょうか?
ごきょうじゅおねがいいたします。

745 :デフォルトの名無しさん:03/05/19 18:35
>>744
piyo.xx = baka -> xx;
piyo.yy = baka -> yy;


746 :デフォルトの名無しさん:03/05/19 18:36
bakaをpiyoにはコピーできないと思うが。
#彼方ポインタ、此方実体。

また、全く同じ構造の違った名前の構造体を設計するのを止めた方がいい。

747 :デフォルトの名無しさん:03/05/19 19:47
piyo = *baka;

じゃだめなの? bakaが何指してるかは置いといて。

748 :デフォルトの名無しさん:03/05/19 19:51
>>747
全然ダメ。

749 :デフォルトの名無しさん:03/05/19 20:00
memcpyも >>747 もOKと思うんだが。
比較と間違えてない? >>744

750 :747:03/05/19 20:13
あ、typedefしといてキャストすればいいのか! ついうっかり。

751 :デフォルトの名無しさん:03/05/19 20:22
>>749
一応memcpyでも大丈夫ではあるけど、
いくらメンバが同じでも違う構造体をメモリコピーするのはあまりよろしくない
過去ログにあったと思うが、メンバの変更とかが容易に出来なくなるから

752 :デフォルトの名無しさん:03/05/19 20:23
質問スレでそういう無作法を堂々と教えないように。

753 :デフォルトの名無しさん:03/05/19 20:29
そもそも何で同じ構造の二つの構造体があるのかと
聞くほうが大切ではないかね?

754 :デフォルトの名無しさん:03/05/19 20:36
そりゃそうだ。

755 :デフォルトの名無しさん:03/05/19 20:44
自分自身のexeのパスを取得するにはどうしたらいいですか?

756 :デフォルトの名無しさん:03/05/19 20:58
>>755
そういうのはWin32API質問箱スレのがいいんじゃないかな。。
一応GetModuleFileNameとかで取得できたと思うけど

757 :デフォルトの名無しさん:03/05/19 21:00
>>756
Win32API使わないと無理でしたか・・・。
ありがとうございました。

758 :デフォルトの名無しさん:03/05/19 21:24
フルパスで起動してくれればargv[0]を参照することで調べられるんだけどな(^_^;)

759 :デフォルトの名無しさん:03/05/19 21:33
>>374
デフォルトコンストラクタは呼ばれるけど、
int とかだと「何もしない」んで値は未定。

ただ、変数が静的だと 0 で初期化される。
これは C と同じ。

あと、1 つでも初期化したら後ろは全部 0 で初期化される。
だから、
 int vec[100] = { 0 };
ってやったら全部 0 で初期化される。
これも C と同じ。

int new したときは fill_n でも使って初期化汁。

760 :デフォルトの名無しさん:03/05/19 21:47
C++スレからの誤爆か?

761 :デフォルトの名無しさん:03/05/19 22:17
犬の糞みたいな名前のOSが死滅するって本当ですか?


762 :デフォルトの名無しさん:03/05/19 23:26
>>756
正直、環境も聞かずにそう答えるのもどうかと思われ。

763 :デフォルトの名無しさん:03/05/19 23:44
>>762
exeと言ったら(ry

764 :デフォルトの名無しさん:03/05/20 00:03
>>763
OSの察しはつくかもしれんが、コンパイラが(ry

765 :デフォルトの名無しさん:03/05/20 06:00
>>764
コンパイラが何?

766 :デフォルトの名無しさん:03/05/20 06:21
>>765
WIN32API等がつかえるコンパイラかどうか判断できない、ということでわ

767 :デフォルトの名無しさん:03/05/20 06:29
地球のみんな、オラに少しだけC言語の知識を分けてくれ。

768 :デフォルトの名無しさん:03/05/20 06:43
  ○

  火

769 :こうだろ:03/05/20 08:57
  C

  火

770 :がんばってあつめたんだが:03/05/20 09:17
   c

  火

771 :デフォルトの名無しさん:03/05/20 09:31
%lu は 符号なしの long 型ということでOKですか?
変換指定子が2つ続くのははじめてみたので。

772 :デフォルトの名無しさん:03/05/20 09:49
%ldってのもあるし。

773 :デフォルトの名無しさん:03/05/20 09:53
%ld hoge.o -o hoge
%./hoge

774 :デフォルトの名無しさん:03/05/20 10:42
リンカ〜かよ

775 :デフォルトの名無しさん:03/05/20 12:42
DOS窓のサイズは機種依存ですか?僕のは25X80ですが。

776 :デフォルトの名無しさん:03/05/20 12:44
>>775
25桁しかないとは窮屈だな。
うちのは80*1000あるぞ。

777 :デフォルトの名無しさん:03/05/20 12:45
>>775
スレ違い

778 :デフォルトの名無しさん:03/05/20 12:57
>>776
すごいですね。Win32APIを使えばサイズを変えられるのは知っていたの
ですが、画面に収まり切らないような気もするけど。
>>777
C言語のコードを書いて実行するとDOS窓がでるので、ココでいいのかなと。
すみません。

779 :デフォルトの名無しさん:03/05/20 12:57
>>775
PC/AT互換機のテキストモードは
25x80
43x80
50x80
が使えるが、日本語は表示できない(当然)。
多分おまいはテキストモードを使ってない。
DOS「窓」なら機種依存ではなくOS依存だ。


780 :デフォルトの名無しさん:03/05/20 13:00
>>778
スクロールバー・・・
多分、横が80で、縦が1000なんだよ。


781 :775:03/05/20 13:11
>>779
教えてくれてありがとう。調べないで質問したので、サイズにパターンが
ある、テキストモードのことを知りませんでした。調べてきます。
>>780
なるほど。そうですよね。

782 :デフォルトの名無しさん:03/05/20 14:16
つーか、どこが言語の質問だよ。

783 :デフォルトの名無しさん:03/05/20 15:21
今日の流れはホノボノなのか殺伐なのか・・・

784 :775:03/05/20 16:20
>>782
ほんと勘違いしてました。すみません。
>>783
ああっ、僕のせいです。すみません。

785 :デフォルトの名無しさん:03/05/20 16:55
enum LENGTH{
LONG, MIDDLE, SHORT
};
enum SIZE{
LARGE, MIDDLE, SMALL
};

"MIDDLE"はかち合ってしまいますか?


786 :デフォルトの名無しさん:03/05/20 16:58
>>785
かちあってしまいます。MIDDLE単体で使用するから。そうなるとenumの
名前はプログラム的には別に必要ないような気が。識別するための物かな。

787 :デフォルトの名無しさん:03/05/20 17:01
プログラムで再帰的関数を使うと
なぜ処理が遅くなってしまうんですか?
論理を教えてくださいまし

788 :デフォルトの名無しさん:03/05/20 17:02
>>785
Cのenumは使い勝手が悪い。
enum LENGTH{
LENGTH_LONG, LENGTH_MIDDLE, LENGTH_SHORT
};
とでもしれ。

しかし、それくらい試してから聞けよ。

789 :デフォルトの名無しさん:03/05/20 17:07
>>787
関数を呼ぶのに(スタック)時間がかかるから。

790 :動画直リン:03/05/20 17:11
http://homepage.mac.com/hitomi18/

791 :デフォルトの名無しさん:03/05/20 17:11
その関数を呼ぶのにスタックがかかってしまうのは再帰的関数だからですか?
再帰的関数の中では何が起こってしまうのでしょうか。
おせーてくださいまし


792 :デフォルトの名無しさん:03/05/20 17:18
後再帰とかは、逐次的(いわゆるループ)に書き直せる。
この場合、逐次的に処理した方が処理が速い。

で、なんでかというとだね、関数呼び出しを
「パラメータと結果の返信先を手紙に書いて相手に渡す」
ようなもんだと考えるとわかりやすい。

結局自分で処理をするのに、いちいち自分宛の手紙を書いて自分で受け取る。
手紙の指示に従って処理をして次の手紙を書いて、自分で受け取る。

手間がかかるだろ?

でも、パラメータを一覧表(ループ)にして、順に処理していくだけなら
手紙を書く手間が省けるってもんだ。


793 :デフォルトの名無しさん:03/05/20 17:22
神よありがとうございますたー。
助かります。

794 :デフォルトの名無しさん:03/05/20 17:23
手紙を書く、と書いたのを実際の内部処理に置き換えてみると
1.パラメータをスタックっていう、メモリにコピーする
2.処理が終わった後の戻り先を、スタックっていうメモリにコピーする
になる。

ついでに手紙を受け取る先では、今まで処理してた内容を忘れないように
スタックっていうメモリに作業用のメモ書き(変数)をおいておいて、
2度目に再帰的に呼ばれた場合でも前の作業内容が消えないように
保存する必要がある。

再帰せずに一つのループで処理するように書くと、
スタックの利用が最小限で済むし、スタックへのコピーも最小限で済むし、
作業領域もメモにいちいち書かず頭の中(レジスタ)だけで処理できる場合がある
から、結果的に速くなるんだ。


795 :デフォルトの名無しさん:03/05/20 17:47
bessel関数を計算する方法を教えて下さい
無限和を足していく方法が上手くいかなかったんです

796 :デフォルトの名無しさん:03/05/20 18:04
enum EN1{ XX=0 };
enum EN2{ XX=1 };

int main()
{
enum EN1 hoge;
enum EN2 ho;
hoge = XX;
ho = XX;
printf("%d%d", hoge, ho);
return 0;
}

これなら問題ないでしゃうか?


797 :デフォルトの名無しさん:03/05/20 18:25
>>796
>>788
> しかし、それくらい試してから聞けよ。
実際に試してみて、期待した動作になればそれでいいだろ。

798 :デフォルトの名無しさん:03/05/20 18:28
>>794
遅くなる根本原因はスタック退避ではなくて呼び出し手続きのほうにあると思うのだが。
#パイプラインは壊れるし、デバッグオプションをつけていればスタックの監視も入るしね。

799 :デフォルトの名無しさん:03/05/20 19:37
質問です。
forまたはwhileの繰り返しを使って(たとえ配列を知っててもつかわずに)、ある指定した数以下の
素数を全て出力するプログラムを作成しなさい。
また、作成したプログラムで指定した数をnとしたとき、プログラムでどのくらい繰り返しが
行われるを考察する
ということです。

具体的には前半部分では2〜100の素数を出力したいです。
後半部分では、適当な仮定をおいて、繰り返し回数をnの関数で与える
事(nが十分大きいとき、n以下の素数π(n)⇒n/lognという素数定理
を用いて考えたいです。

お願いします


800 :デフォルトの名無しさん:03/05/20 19:40
800げっと

>>799
primeで検索

801 :デフォルトの名無しさん:03/05/20 19:42
素数 "列挙" アルゴリズムを極めるスレ
http://pc2.2ch.net/test/read.cgi/tech/1018657457/

802 :デフォルトの名無しさん:03/05/20 19:48
>>799
↓のスレに同じ問題と思われる書き込みがあるから、そっちにいってくれ。

C/C++の宿題やらせてください。6代目。
http://pc2.2ch.net/test/read.cgi/tech/1053045530/l50

803 :デフォルトの名無しさん:03/05/20 21:42
C言語で文字列をコピーする方法を教えてくださいませ。

804 :デフォルトの名無しさん:03/05/20 21:45
strcpy

805 :デフォルトの名無しさん:03/05/20 21:47
>>802
もれ、プログラム組んで教えてあげたんだけど... 鬱だ...
マルチポストかよ...

806 :デフォルトの名無しさん:03/05/20 21:54
>>805
そして見たら、プログラム間違えてて更に欝だ...


807 :デフォルトの名無しさん:03/05/20 22:01
fopenでファイルを開いたあとはどうすればいいんでしょうか。

808 :デフォルトの名無しさん:03/05/20 22:03
再帰関数を利用してのパスカルの三角形を作りたいんですが、
三角形の形までは作れましたが、nCrの計算の部分がわかりません。
どなたか軽い見本でも見せてくれればうれしいです

809 :デフォルトの名無しさん:03/05/20 22:05
>>807
何かする必要性を感じないないなら、
何もしなければいいんじゃない?

810 :デフォルトの名無しさん:03/05/20 22:06
中学数学も忘れちまった・・・
コンビネーションはn!/r!だっけ?

811 :デフォルトの名無しさん:03/05/20 22:06
>>807
正常に開けたのなら、fcloseで閉じる

812 :デフォルトの名無しさん:03/05/20 22:13
>>810
コンビネーションは n!/(n-r)!r!

とおもったらここは数学スレじゃねえな。

813 :デフォルトの名無しさん:03/05/20 22:15
malloc(0);
場合は、何が返るんでしょうか?
freeしても安全ですか?


814 :デフォルトの名無しさん:03/05/20 22:16
>>813
何が返るって、戻り値を調べればよいのでは?

815 :デフォルトの名無しさん:03/05/20 22:17
C FAQ嫁

816 :デフォルトの名無しさん:03/05/20 22:17
いつもNULLが返ってくるという保証はありますか?

817 :デフォルトの名無しさん:03/05/20 22:18
>再帰関数を利用してのパスカルの三角形を作りたいんですが、
>三角形の形までは作れましたが、nCrの計算の部分がわかりません。
>どなたか軽い見本でも見せてくれればうれしいです
coco.
www.geocities.co.jp/SiliconValley-Oakland/1680/memo0012.html


818 :デフォルトの名無しさん:03/05/20 22:19
心配なら0を渡すことがあるようなコードを書くなYO

819 :デフォルトの名無しさん:03/05/20 22:20
>>818
0というケースがあるんです。
あんまり例外を作りたくないので。


820 :デフォルトの名無しさん:03/05/20 22:22
malloc(sz ? sz : 1)

くらいの知恵は使おう。

MFCのソースあるならCStringの実装を真似てみてもいいかも。

821 :808:03/05/20 22:25
>>817
ありがとうございましった

822 :デフォルトの名無しさん:03/05/20 22:31
ファイル名の変更はどうやるの?

823 :デフォルトの名無しさん:03/05/20 22:33
http://www.google.com/search?hl=ja&ie=Shift_JIS&q=C%8C%BE%8C%EA+%83t%83@%83C%83%8B%96%BC%82%CC%95%CF%8DX&lr=


824 :デフォルトの名無しさん:03/05/20 22:34
rename


825 :デフォルトの名無しさん:03/05/20 22:36
>>823
悲しいな。
一番上がPerlの話題だ。

826 :デフォルトの名無しさん:03/05/20 23:01
Cでマルチタスクにする方法ってあるでしょうか?

827 :デフォルトの名無しさん:03/05/20 23:04
>>826
環境依存じゃなかったかな
_beginthreadとかforkとか

828 :デフォルトの名無しさん:03/05/20 23:20
すいません
UNIX-Cの標準関数が載ってるサイト知りませんか?
今までANCI-Cしか使った事なくて。
system系の関数とか詳細に載ってるとこあれば教えて欲しいです

829 :デフォルトの名無しさん:03/05/20 23:23
Linuxだが、http://www.linux.or.jp/JM/

UNIXならmanで調べられると思うんだけど。

830 :r:03/05/20 23:26
>>829
manだと目的から探すのが無理っぽいと思われ。


831 :デフォルトの名無しさん:03/05/20 23:31
目的から探すなら本を買えよ・・・・
なんでも只で済まそうとするな

832 :デフォルトの名無しさん:03/05/20 23:35
>>820
ありがとうございました。
無駄が増えますが、簡単で確実な方法はそれしかなさそうです。

833 :デフォルトの名無しさん:03/05/20 23:55
webだと検索が楽な場合もあるんだよね

834 :デフォルトの名無しさん:03/05/20 23:57
infoのlibcなら目的から探せそう

835 :デフォルトの名無しさん:03/05/21 01:46
C言語を始めて三日目の厨房なんですが
早くも躓きました。

#include <stdio.h>

int main()

{
int i=2;
while(++i<15){
if(i%3==0){continue;}
printf("%3d",i);
}
return(0);
}

のプログラムはiが15以下の時で
iを3で割ったときの剰余が0の時
iを出力すると言うプログラムではないのですか?
実行すると

4 5 7 8 10 11 13 14

となり、どれも3で割った時の剰余が0ではなくて
理解できません。どなたかご教授お願いします。

836 :デフォルトの名無しさん:03/05/21 01:50
>>835
すばらしい解釈だ

837 :デフォルトの名無しさん:03/05/21 01:51
>>835
> iを3で割ったときの剰余が0の時
> iを出力すると言うプログラムではないのですか?

違います。剰余が0でない時にiを出力するプログラムです。

838 :デフォルトの名無しさん:03/05/21 01:52
>>835
continue は「以下続ける」じゃ無くて、
「次のループ制御まで処理をすっ飛ばす」って意味なんで、逆です。

839 :835:03/05/21 01:56
早速のご回答ありがとうございました。
逆に捉えていたとはまだまだ理解度不足のようなので
また1から勉強しなおします。

840 :デフォルトの名無しさん:03/05/21 04:35
int i;
for(i = 2; i < 15; i++){
if((i % 3) == 0){ printf("%d\n", i); }
}

841 :デフォルトの名無しさん:03/05/21 11:25
>>830
man -k 使えば?

842 :デフォルトの名無しさん:03/05/21 12:03
マンコ

843 :デフォルトの名無しさん:03/05/21 13:15
ついでに言うと i<15 は

15未満
  ~~~~~

844 :デフォルトの名無しさん:03/05/21 18:26
15ミマンコ

845 :デフォルトの名無しさん:03/05/21 18:40
a=((1-2*(r%2))*pow((r/2),2r)*cos((n+2r)*s))/(kai(r)*kai(n+r));

※int kai(int n)はあらかじめ定義された関数

この表現って間違ってるでしょうか?
次のようなエラーが出てくるんですが、どこがおかしいのかわかりません

関数呼び出しに ) がない(関数 main )

846 :デフォルトの名無しさん:03/05/21 18:46
2r → 2*r

847 :デフォルトの名無しさん:03/05/21 18:47
2rが変

848 :デフォルトの名無しさん:03/05/21 18:54
>846-847
上手くいきました、有難うございます

849 :デフォルトの名無しさん:03/05/21 20:55
初心者てかこれから初心者になろうと思ってるものですが
C言語でプログラムを作ったり走らせたりするにはどんなツールが必要ですが
教えてください。
初めに何を用意すればいいのかまったくわからなくて^^;ホントくだらない事
聞いてすみません、どなたか教えてください


850 :デフォルトの名無しさん:03/05/21 21:04
>>849
Windows なら LSI-C 試食版 と Windows 付属のメモ帳があれば
とりあえずプログラムできる。
Borland C++ Compiler 5.5 でもいい。
こっちの方が本格的(というか、本格)。

UNIX なら cc か GCC が入ってるのが普通。
Linux なら GCC が入ってる。
これ使えば問題ない。

Mac OS X でも入ってるけど、
インストールパッケージになってるのでインストールが必要。
アプリケーション/Installers/Developer Tools/Developer.mpkg がそれで、
これ実行すればいい。
Project Builder って開発環境も一緒に入ってるよ。

Mac のクラシック環境なら...ごめん。知らない。

851 :デフォルトの名無しさん:03/05/21 21:48
>>850
ありがとうございます
Windowsを使ってるのでBorland C++Compiler5.5を使ってみます


852 :851:03/05/21 22:09
Borland C++Compiler5.5ってフリーソフトなんですよね?
同意文章に返金とかなんたらかんたらって書いてあってちょっと不安になったもので・・・

853 :デフォルトの名無しさん:03/05/21 22:26
int kai(int n){
int k,res=1;

for(k=1;k<=n;k++){
res=res*k;
}
return res;}

int main(){
double s,a;
int n,r;
int sum=0;
int m=100,k=0;

s=(M_PI/m)*k;
for(r=0;-0.001<a&&a<0.001;r++){
a=((1-2*(r%2))*pow((r/2),2*r)*cos((n+2*r)*s))/(kai(r)*kai(n+r));
sum=sum+a;
}
printf("%1f",sum);
return 0;
}

854 :853:03/05/21 22:27
pow: DOMAIN error
と出てきます
どこがおかしいか教えて下さい

855 :超初心者:03/05/21 22:46
質問させて頂きます。
Visual C++で
#include
<stdio.h>
main()
{printf("abc");}と入力してみたら
(error C2006: #include ディレクティブに指定されている
'newline' はファイル名ではありません。)と表示されました。
どういう意味でしょうか?教えてください。よろしくお願いします。

856 :デフォルトの名無しさん:03/05/21 22:49
>>853
#include <math.h>
して、ビルド時に-lmオプションつけれ
>>854
#includeや#defineなどのcpp処理部分は改行区切りなので
#include と <stdio.h>は同じ行じゃないと駄目

857 :デフォルトの名無しさん:03/05/21 22:51
>>852
ダウンロードした本人がコンパイラを使う分には何も問題ないですよ。
作った実行ファイルの配布にも特に制限はないです。
ただ、Borland C++ Compiler 内のファイルの再配布については
いろいろ制限があるので注意して下さい。

>>854
そらあぁた、0の0乗は未定義やがな。

858 :超初心者:03/05/21 22:54
>>856
助かりました。ありがとうございます。

859 :853:03/05/21 23:24
>857
有難うございます

860 :デフォルトの名無しさん:03/05/22 00:10
#define ぬるぽ ((void *)0)

がエラーにならない処理系はありますか?

861 :デフォルトの名無しさん:03/05/22 00:37
Perlとか w

862 :デフォルトの名無しさん:03/05/22 01:07
メンバーがたったひとつの構造体にはどんな意味があるんですか?

863 :デフォルトの名無しさん:03/05/22 01:08
「将来の拡張」ができる。

864 :デフォルトの名無しさん:03/05/22 01:09
教えて下さい。

ポインタ配列の例題で以下のプログラムがありました。

#include <stdio.h>

void main(void)
{
   char *w[] = { "SUN", "MON","TUE","WED","THU","FRI","SAT",};
   int k;

   for( k = 0; k < sizeof w /sizeof w[0]; k++)
     (void)printf( " %d:%s", k,w[k]);
   printf("\n");
}

質問
(void)printf( " %d:%s", k,w[k]); の(void)とは何故つけるのですか?

お願いします。

865 :デフォルトの名無しさん:03/05/22 01:13
>>864
printf()の戻り値を使用しないことを明示するためのキャスト。

866 :デフォルトの名無しさん:03/05/22 01:14
>>863
なるほど・・・・

>>864
voidにキャストして戻り値を明示的に破棄しないと、lintという文法チェックプログラムが文句を言うと聞いたことがあるよ。

867 :デフォルトの名無しさん:03/05/22 01:20
>865,866
ありがとう。

でも、何で明示するの?

確かに、printfはint型を返すよう定義されているけど、、。

普通、

int a = 5;

printf("a = %d\n",a);

というように使いますよね。

どう違うのですか?


868 :デフォルトの名無しさん:03/05/22 01:34
>>866も言っているように、lintを騙すために明示する必要がある。
古き悪しき(とまでは言い過ぎか)習慣だ。

869 :867:03/05/22 01:46
>868
ありがとう。

そういうことですか、、、。

しかし、私の環境
win2000+cygwin(恐らく最新 バージョンはどうやってみる?)
で同じくlint(Slint 3.1.1)を使ってみましたが、そのような
警告はでませんでした。

lint list3_16.c(>864で(void)をコメントアウト))

Splint 3.1.1 --- 02 May 2003

list3_16.c:5:6: Function main declared to return void, should return int
The function main does not match the expected type. (Use -maintype to inhibit
warning)
list3_16.c: (in function main)
list3_16.c:10:15: Operands of < have incompatible types (int, arbitrary
unsigned integral type): k < sizeof(w) / sizeof(w[0])
To allow arbitrary integral types to match any integral type, use
+matchanyintegral.

Finished checking --- 2 code warnings

警告が出ないよう、修正されているのですか?

870 :デフォルトの名無しさん:03/05/22 04:16
>>869
おまいのlintで警告が出るか出ないかにどれほどの意味があるってんだ?
警告出ようが出まいが元のソース書いたやつが書いちまったんだからしょうがないだろ。

871 :山崎渉:03/05/22 04:25
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―

872 :デフォルトの名無しさん:03/05/22 07:18
>>870
なぜおこっているのですか?

873 :デフォルトの名無しさん:03/05/22 10:56
FAQを執拗に聞くからじゃない?

874 :デフォルトの名無しさん:03/05/22 12:07
先生
CTypedPtrListを2重に格納したいのですが
以下のソースではpListを格納しようとするとエラーになります
誰か助けて

typedef CTypedPtrList <CPtrList, CPoint*> CPointList;
typedef CTypedPtrList <CPtrList, CPointList*> CPointListList;

CPointListList pointlistlist;

CPointList* pList = new CPointList;
pList->AddTail(new CPoint(100,100));

pointlistlist.AddTail(pList);

875 :デフォルトの名無しさん:03/05/22 12:08
>>874
C++スレがあるよ。

http://pc2.2ch.net/test/read.cgi/tech/1052625846/

876 :デフォルトの名無しさん:03/05/22 12:20
>>875
誘導が間違ってる。
こっちだろ。
http://pc2.2ch.net/test/read.cgi/tech/1047949606/

877 :デフォルトの名無しさん:03/05/22 12:45
#include<stdio.h>main()
{
double x=1;
int i;
for(i=1;i<10;i++){
x=2+1/x;
printf("%f\n",x);
}
}

このソースのx=2+1/xの部分を(2+1/x)の平方根を求める
プログラムにしたいんですが、
どのようにすればよいでしょうか?

本見ても、それらしいのが乗ってません。教えて下さい。

878 :デフォルトの名無しさん:03/05/22 12:51
>>877
1行目、分割しないとエラーになる。
で、#include <math.h>を追加。
6行目、x = sqrt(2 + 1 / x);に変更。

879 :デフォルトの名無しさん:03/05/22 12:53
>>878
ありがとうございます。

sqrtで漏れの本を牽引したけど、やっぱり載ってない(´Д`)
本を買いなおさないと。。。

880 :デフォルトの名無しさん:03/05/22 13:13
ここでGUIの質問をしてよろしいでしょうか。

881 :デフォルトの名無しさん:03/05/22 13:15
駄目駄目駄目駄目人間

882 :>>880:03/05/22 13:27
やってしまいました…
どうか無視してください。
でも、どこに行けば…

883 :デフォルトの名無しさん:03/05/22 13:35
>>882
GUIつってもいろいろあるだろーが。
windowsなのかaquaなのかGTKなのかQtなのかその他なのか。
んでCの話題ではないのでここはふさわしくない。合ったスレを探しなさい。

884 :デフォルトの名無しさん:03/05/22 14:10
スレ立てるまでもない質問スレで、
「どこのスレが相応しいですか?」って聞けばいいんでないの?

885 :デフォルトの名無しさん:03/05/22 17:15
スレ立てるまでもない〜で直接質問すれば?

886 :デフォルトの名無しさん:03/05/22 18:24
昔見た状態遷移のコードがどうしても思い出せません。
どなたか補間してもらえないでしょうか?

以下記憶から引っ張り出したものです。

typedef struct __func_t { struct __func_t (*f)(); } func_t;

func_t stat1(void) {
func_t next = {NULL};
return next;
}

func_t stat0(void) {
func_t next = {&stat1};
return next;
}

int main(void) {
func_t s = {&stat0};
do
s = (*s.f)();
while (NULL != s.f);
}

887 :デフォルトの名無しさん:03/05/22 18:57
>>886
状態遷移だったら普通、状態(state)と事象(event)があるんじゃないの?
こんな感じでやるけど。
typedef struct {
  enum{eventa, eventb} e;
  /* いろいろ */
} event_t;
typedef enum {
  state0, state1, state_end,
} state_t;
extern event_t getevent(void);
state_t func0a(event_t e) {/* なんか */}
state_t func0b(event_t e) {/* なんか */}
state_t func1a(event_t e) {/* なんか */}
state_t func1b(event_t e) {/* なんか */}
int main(int argc, char * argv[])
{
  state_t state = state0;
  event_t event;
  static state_t (*func[][state_end])(event_t) = {
    {func0a, func1a}, {func0b, func1b},
  };
  do {
    event = getevent();
    state = (*func[event.e][state])(event);
  } while (state != state_end);
  return 0;
}

888 :デフォルトの名無しさん:03/05/22 20:24
すいません質問させてください。

int num;
この変数をwhileループの中で
加算させつつ
printfしているのですが
4000あたりまでは順調に表示してくれるのですが
突然
num = 538976288
と、表示されてしまいますた・・・

原因がよーわからんですし
538976288という桁数ってintで表現できる
数を超えているような気がするのですが・・・

こういった現象がどのようにして
起こるのか教えていただきたいです。
お願い致します。

889 :デフォルトの名無しさん:03/05/22 20:28
intは32bitだから4000でオーバーフローするわけはないし・・・
コードを貼り付けてくれ

890 :デフォルトの名無しさん:03/05/22 20:29
環境が良くわかんないけど、一般的な環境だとintは±21億くらいまでなら表現できるよ。
有効桁数10桁までと覚えとくといいかも。

途中でかけ算とかしてるなら、桁あふれの可能性有り。
そうじゃなきゃ、メモリを壊してるんじゃないかな。


891 :デフォルトの名無しさん:03/05/22 20:29
>>888
初期化してなくて、そういう値になることはあるけど、加算させてて
いきなりは見たことが無いです。

892 :デフォルトの名無しさん:03/05/22 20:46
sizeof(short)は処理系に依存するのでしょうか?
それとも、ANSI規格で2バイトに定められているのでしょうか?

893 :デフォルトの名無しさん:03/05/22 20:47
short は int 以下としか。

894 :デフォルトの名無しさん:03/05/22 20:48
>>888
スタック壊してない?

895 :デフォルトの名無しさん:03/05/22 20:49
2 バイト固定で使いたければ、
typedef でもしてそれ使って、
環境によって定義を切り替えれば良し。

896 :デフォルトの名無しさん:03/05/22 20:54
>>893, >>895

ありがとうございます。
てことは、移植性を考慮すると、ハードコーディングしないで、

#if sizeof(short) == ......(略)

とした方が無難ということですね。

897 :デフォルトの名無しさん:03/05/22 20:56
上下左右のASCIIコード教えてください。

898 :デフォルトの名無しさん:03/05/22 21:13
文字配列の初期化で

char str1[20] = "abc"; /*うまく動くかもしれないがお薦めできない*/
char str2[] = "abc";   /*OK*/

と言う人がいました。
これってC言語の定義ではどうなってるんですか?

899 :888:03/05/22 21:17
皆様ありがとうございます。

環境はSUN Soralis SPARAC3
です。

メモリを破壊しているということは

ほかの部分、例えばmemcpyなどで
スタックをおこしていて
printfに影響を及ぼしている可能性も
ありますか?

再度の質問ですみませんが
ご教授お願い致します。

900 :デフォルトの名無しさん:03/05/22 21:19
>>899
基本的に自動変数はスタックに並んで入るから、
例えばnumの前にある変数の領域をオーバーしてmemcpyすれば当然スタックは
破壊されてnumの値が書き換わる。


901 :899:03/05/22 21:29
>>900サソ
ありがとうございます!

あやしいmemcpy()のオンパレードなので
そいつが原因かもしれません。

ヒントになります。
どうもありがとーございました。

902 :デフォルトの名無しさん:03/05/22 22:03
>>888
ていうか、

> 538976288という桁数ってintで表現できる
> 数を超えているような気がするのですが・・・

気がするだけでデバッグしていたらいつまでたっても終わらないよ。
きちんと確認しなきゃ。

538976288 = 0x20202020

これだけでも大きなヒントだと思うぞ。

>>897
上下左右は ASCII コートでは表現できない。
JIS/EUC/S-JIS とかにしろ。

>>898
別に両方とも間違っていないと思うけど...。
ただ、char a[4] = "ABCD"; なんて書くアフォがたまにいるので、文字列を格納する配列なら、文字数はコンパイラに数えさせた方が間違いがないというだけのことだと思う。

903 :デフォルトの名無しさん:03/05/22 22:11
0x20202020ってことはスペースだな

904 :デフォルトの名無しさん:03/05/22 22:22
ASCII コート
(・∀・)イイ!!!

905 :デフォルトの名無しさん:03/05/22 23:37
>>898
> char str1[20] = "abc";
str1 という char 型要素数 20 の配列が
"abc" という文字列で初期化される。

> char str2[] = "abc";
"abc" という文字列を入れられる
最低限の要素数を持った char 型の配列が
"abc" という文字列で初期化される。

1. 前者は初期化する文字列の数を数えて、
 そこから配列のサイズを決めなければならないため、
 人為的なミスが起こる危険性を孕んでいる。
 良いコンパイラであればエラーを出してくれるかもしれないが、
 そのことを期待する事はやめた方が良い。
 その点後者はそのようなミスとは無縁である。
2. ミスを防ぐためにと前者で大きめにサイズを指定しても、
 無駄にメモリを消費してしまう。
3. もし文字列(の長さ)を変更する予定があり、
 "abc" があくまで初期値でしかないのであれば、
 取り得る文字列の最大長を指定しておく必要がある。
 この目的のために前者を使う事は可能である。
 しかし、初期値がその最大長を超えない事をチェックする必要があるため、
 一応初期化をするのは置いておいて、
 assert で長さのチェックをしてからコピーするのが安全である。

906 :888:03/05/23 00:35
>>902サソ

まじありがとうございます!!

0x20がスペースってことはしってましたが・・・
まさかこんなことになっているとは
思いもよりませんでした。。。

少し新しい道が開けました!!

ありがとうございます!!

907 :デフォルトの名無しさん:03/05/23 01:42
>>888
つまり、スペースが暴走してスタック上の変数領域を侵食してしまったわけやね。

908 :デフォルトの名無しさん:03/05/23 03:03
WizOnline開発中!プログラマ緊急募集(C,Java)
http://219.96.231.242/wizonline/
2chスレ
http://game3.2ch.net/mmominor/dat/1053536167.dat

909 :デフォルトの名無しさん:03/05/23 03:52
>>827
本当にそんなことが言えるの?
根拠を示してから書き込むように。
おまぃ、最近落ち着きがないようだが、せめてCくらい勉強してから人にアドバイスしようね。
昔よくsourcerとか使ってたけどwindowsでは無理かな?
mochaはよくお世話になったからあると便利なのは確かだね。
実力つけたいなら、 自力で構築しなおすのがいいと思う。

910 :デフォルトの名無しさん:03/05/23 04:23
少し悩んでます。どうかご教授お願いします。
あるデータ群から、任意のデータを抜き出して配列なりなんなりの
テーブル等に格納したいのですが、データ数が分らない場合、

"一度データ数をカウントしてテーブルを制作、その後に格納"

これしか思いつきません。
これだと二度データ群を走査するやり方しか自分は出来ません。

なにか定番のやり方、
一度のデータ走査でデータ格納領域を確保しながら格納ってやり方なんてあるのでしょうか?
少し頭をよぎったのは、データヒット毎にリアロケートなんですが
さすがに却下しました。

911 :デフォルトの名無しさん:03/05/23 04:50
大き目にmallocしてrealloc。

912 :デフォルトの名無しさん:03/05/23 04:51
配列ならreallocとか
配列以外ならリンクリストとか
じゃあダメってこと?

913 :デフォルトの名無しさん:03/05/23 05:27
>>879
本を「牽引」して何の意味が?

914 :デフォルトの名無しさん:03/05/23 06:14
>>910
テーブルと同サイズのメモリを用意し、格納していく。
格納した数はカウントしておいて、最後にreallocで小さくする。

915 :デフォルトの名無しさん:03/05/23 09:13
データヒットごとじゃなくて一定サイズ確保であふれたらreallocとか
reallocじゃなくて新たに確保してリンクさせるとか?

元テーブルのサイズによるね
小さければ>914でいいし大きかったら動的に何かするしかないかと

916 :915:03/05/23 09:19
でも結局全件ヒットしたらそれだけいるんだ(´・ω・`)


917 :デフォルトの名無しさん:03/05/23 12:37
>>896
#ifでsizeofは参照できないよ。
定義済マクロから適当なのを使って判断するしかない。


918 :デフォルトの名無しさん:03/05/23 13:29
CでPerlのeval関数のようなことをしたいのですが、
何かいい方法はないでしょうか?
int hoge = 1;
char buf[] = "hoge";
int foo = eval(buf);
とやると、fooに1が代入されるような感じです。

919 :デフォルトの名無しさん:03/05/23 13:32
コンパイル後に変数名からたどるのは無理だと思うけどな。

920 :デフォルトの名無しさん:03/05/23 13:44
グローバル変数なら可能でしょ

921 :デフォルトの名無しさん:03/05/23 14:05
Unixで関数名を辿るのはやったことあるけど面倒だった。
同じ手法でグローバル変数も可能なのは確認済み。

でも、一般的には不可能って答えるしか。

922 :デフォルトの名無しさん:03/05/23 14:32
どっちにしろないんだから自分で簡易インタプリタでも書け。

923 :デフォルトの名無しさん:03/05/23 15:52
>>918
>>922
Pikeなんてどうかと
http://pike.ida.liu.se/
http://pike.ida.liu.se/generated/manual/modref/ex/predef_3A_3A/Perl/Perl/eval.html

924 :デフォルトの名無しさん:03/05/23 17:34
>>902
サンクス

925 :デフォルトの名無しさん:03/05/23 18:06
while文に使われる !=EOF は、使わなくてもちゃんとプログラムは動くのですが、いろんなサイトとかでは使ってるのがほとんどです。
!=EOF を使うのと使わないのとでは何が違うのでしょうか?

926 :デフォルトの名無しさん:03/05/23 18:15
>>925 意味の通る文章を書いてください。

927 :デフォルトの名無しさん:03/05/23 18:18
>>925
動いたソース見してくれ

928 :デフォルトの名無しさん:03/05/23 18:19
EOFはstdio.hで-1に定義されてたりする。
その場合、「値」と「値!=EOF」は意味が違う。
使っても使わなくても動くと言うことは、エラー処理などをきちんとしてないのだろう。

929 :デフォルトの名無しさん:03/05/23 18:42
#include <stdio.h>
#include <ctype.h>

main()
{
char c;

while ( ( c = getchar() ) !=EOF )
if(islower(c))
putchar( toupper(c) );
else
putchar(c);

}


です

930 :デフォルトの名無しさん:03/05/23 18:55
>>929
それで!=EOF抜いたら止まらなくなるだろが。ヴォケ。

931 :デフォルトの名無しさん:03/05/23 18:55
>>929
EOFとの比較を行わないと、正しく終了しない。

932 :デフォルトの名無しさん:03/05/23 18:57
EOFの入力の仕方がわからないというオチだと見た。

933 :デフォルトの名無しさん:03/05/23 19:14
リダイレクトも知らないってか。

934 :デフォルトの名無しさん:03/05/23 19:22
char c;
whie ((c = getchar()) != EOF)
戻り値の上位ビットが捨てられた結果がintに拡張されてから、EOFと
比較されるんだっけか。charが符号なしだとまずいような。

935 :デフォルトの名無しさん:03/05/23 19:25
>>933
リダイレクトと、 EOF の入力の仕方、に直接関係があるのかね?

936 :デフォルトの名無しさん:03/05/23 19:26
>>934
確かにintにするべきだね。

937 :デフォルトの名無しさん:03/05/23 19:27
>>935
大蟻。
ファイルからリダイレクトしたときに、ファイルの最後はどうやって検出すると思う?


938 :デフォルトの名無しさん:03/05/23 19:35
>>937
ここでいっているのは、コマンドラインでCtrl-Z,Ctrl-Dで入力するEOFでは?

939 :デフォルトの名無しさん:03/05/23 19:36
>>936
コンパイラが馬鹿でないかぎり大丈夫だろ。

940 :デフォルトの名無しさん:03/05/23 19:38
>>938
Ctrl-Z はねぇだろ・・・

941 :デフォルトの名無しさん:03/05/23 19:38
大丈夫とかいう問題なの?

942 :デフォルトの名無しさん:03/05/23 19:39
>>940
MS-DOS,WindowsだとCtrl-Z

943 :デフォルトの名無しさん:03/05/23 19:41
VAX(VMS)もCtrl-Z

944 :デフォルトの名無しさん:03/05/23 19:43
>>Ctrl-Z
まじで!? プロセスも続行でつか??

945 :デフォルトの名無しさん:03/05/23 19:44
>>944
馬鹿

946 :944:03/05/23 19:49
続行っていうかその後も入出力可能なん???

947 :デフォルトの名無しさん:03/05/23 19:52
Winのコンソールはバグがあったような記憶が < Ctrl-Z
MXや2000はどうなのだろう。

948 :デフォルトの名無しさん:03/05/23 19:59
MX?

949 :デフォルトの名無しさん:03/05/23 20:01
>>946
UNIXのSuspendとごっちゃになってるんでねーの?

950 :デフォルトの名無しさん:03/05/23 20:01
nyはどうなの?

951 :デフォルトの名無しさん:03/05/23 20:01
>>948
XP(汗

952 :デフォルトの名無しさん:03/05/23 20:03
割れ厨発見( ・∀)人(∀・ )通報しますた!

953 :逆コンパイラ:03/05/23 20:14
EXEのファイルをCに戻る逆コンパイラソフトがあるかなぁ、おしえてもらえませんか。

954 :デフォルトの名無しさん:03/05/23 20:21
おまえら2chのCのFAQ作れよ。馬鹿ですか?

955 :カーニハン三世:03/05/23 20:49
>>953
「Cソースコード」⇔「実行形式ファイル」 の関係は、不可逆です。

956 :デフォルトの名無しさん:03/05/23 21:02
>>954
1.ネタニマジレスカコワルイ

957 :デフォルトの名無しさん:03/05/23 21:33
>>955
不可逆だが、逆コンパイラがないわけではない。
ttp://www.itee.uq.edu.au/~cristina/dcc.html

958 :デフォルトの名無しさん:03/05/23 22:18
C言語勉強し始めたばかりのものですが
#include<stdio.h>

int main()
{
printf("ABC\n");
}

というプログラムをBorlandのC++ Compilerでコンパイルしようとしたのですが
bcc32 ファイル名(拡張子はc)っと打ったら
bcc32は内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません
と出るのですがどうしたらコンパイルできるのですか?
なにぶん初心者なのでこんな事も解らず困ってますどなたか教えてください。

959 :デフォルトの名無しさん:03/05/23 22:23
2chの人員で、可逆Cコンパイラ作るというのはどうだろうか。

960 :デフォルトの名無しさん:03/05/23 22:27
>>959が主導して、2chの人員で、可逆Cコンパイラ作るならいいんじゃない?


961 :デフォルトの名無しさん:03/05/23 22:35
>>958
http://www.borland.co.jp/cppbuilder/freecompiler/faq/bccfaq4.html

962 :958:03/05/23 22:49
>>961
むむ??
どれが自分の症状か解りません・・・
どれを設定すればいいのですが?
ちなみにOSはxpです

963 :デフォルトの名無しさん:03/05/23 23:03
>>962
IDE環境買え。もしくは専用スレに逝け。

964 :デフォルトの名無しさん:03/05/23 23:03
>>905
>  良いコンパイラであればエラーを出してくれるかもしれないが、

エラーはないやろ。正しい文なんだから。
警告ぐらいはあるかも知れんが。

> しかし、初期値がその最大長を超えない事をチェックする必要があるため、

VC++ は、char a[4] = "abcd"; でエラーになるな。
でも、gcc 2.59.4 は、char a[4] = "abcde"; は警告出すのに、char a[4] = "abcd" だと何も言わない。
バグか ?

>>909
何わけわかのこと書いてんだ ?
マルチタスクと逆アセンブラ/デコンパイラってどうやったら混同できるのか知りたいもんだ。

>>916
ヒットしなかったらいらないでしょ ?
一旦確保したら (プログラムが終了しないと) OS にメモリーを返却しない処理系もあるし。

>>920-921
ハァ ? って感じなんだが...。
ホントにできるのか ?
ちょっとやり方書いてみてくれ。
それとも処理系依存のことを言ってるのか ?

965 :デフォルトの名無しさん:03/05/23 23:08
>>960,962
Windowsには95系とNT系があって、
95系・・・95,98,Me
NT系・・・NT,2000,XP
と分類される。つまり、XPはNT系。
だから、XPの説明がなければ、NTか2000の説明を読め。


966 :デフォルトの名無しさん:03/05/23 23:17
main(){
FILE *fp;char *file;char *str;

file=(char *)malloc(BUFSIZ*sizeof(char));

puts("File name?");
gets(file);
fp=fopen(file,"r");
if(fp==NULL){
puts("No such a file!");
}
else {
str=(char *)malloc(BUFSIZ*sizeof(char));
while(fgets(str,BUFSIZ,fp)!=EOF){puts(str);}
}
}

fgetsのところで、「移植性のないポインタ」と警告が出ます
どうすれば上手くいくか教えて下さい!

967 :デフォルトの名無しさん:03/05/23 23:22
>>966
fgetsの戻り値が何か調べてみ

968 :デフォルトの名無しさん:03/05/23 23:23
>>964
unix(Sun-OS)の話だけれど。
nmコマンドで変数のマッピングされているアドレスが得られる。
そこを巧く実アドレス(実際には仮想アドレス名訳だが)に変換すれば、
変数領域が得られる。

同じ理屈を使って関数アドレスを得、その関数をコールするのは実装した。


969 :デフォルトの名無しさん:03/05/23 23:25
>967
有難うございます、上手く出来ました

970 :デフォルトの名無しさん:03/05/23 23:52
>>968
それを処理系依存という。Cでもなんでもねーだろ

971 :デフォルトの名無しさん:03/05/23 23:54
>>968
思いっきり実装依存と言うことは、理解してるよね ?

972 :971:03/05/23 23:55
かぶった...。

973 :デフォルトの名無しさん:03/05/23 23:55
>>964
> >  良いコンパイラであればエラーを出してくれるかもしれないが、
>
> エラーはないやろ。正しい文なんだから。
> 警告ぐらいはあるかも知れんが。

長い時は正しいけど、
短い時はエラー出ることが多いでしょ。

>>962
システムのプロパティの詳細設定内にある
環境変数ってボタンを押すべし。
あとは Windows 2000 とほぼ同じ。だった筈。

974 :デフォルトの名無しさん:03/05/24 00:07
>>970-971
処理系依存でもやりたいことができればいいだけだろ。
>>919 が無理じゃなくて >>918 がやれる処理系はある。

975 :デフォルトの名無しさん:03/05/24 00:42
>>974
その精神は立派なのだが、スレ違いだから言ってんの。
>>1読もうね。
『GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo!』

976 :デフォルトの名無しさん:03/05/24 00:47
次スレヨ炉↓

977 :デフォルトの名無しさん:03/05/24 00:56
>>974
> 処理系依存でもやりたいことができればいいだけだろ。

はぁ ? >>918 が Unix 使ってなかったら意味ないだろ。
あと >>918 はグローバル変数だけ扱えればいいなんて書いてないだろ。

まあ、こう言うことができるって言いたかったんだよな。

978 :デフォルトの名無しさん:03/05/24 01:12
>>918
Python.h 使えばできそうな気もするけど、
詳しくないのでどこまでできるのか分からん。

979 :デフォルトの名無しさん:03/05/24 02:34
>>918
C言語では eval は無理。

変数を動的に参照したいだけなら、ポインターを使えばよい。
プログラマーが使いたいだけなら、無理なので諦めるか別の言語にする。
ユーザーの入力を解釈実行したいのなら、インタプリターをリンクすればよい。


>>970 >>971

921 は 918 に答えて Unix でやったことがある。でも、一般的には不可能と書いている。
これに対して、 964 はやり方を書いて欲しいとレス
その回答が 968

スレの流れから処理系依存の話になっただけで、968 が非難されるいわれはない。

980 :デフォルトの名無しさん:03/05/24 06:27
次スレ
http://pc2.2ch.net/test/read.cgi/tech/1053725121/

981 :デフォルトの名無しさん:03/05/24 08:39
>>979
キティニマジレスカコワルイ

982 :964:03/05/24 10:25
>>979
> これに対して、 964 はやり方を書いて欲しいとレス

>>964 の最後の行見てる ?
基本的に処理系依存の話題は避けるのはここの常識と思う。(嫌と言うほど言われてる。)
まあ、>>968 を責めると言うよりも、処理系依存のことを書いた >>920-921 の時点で責められるべきもんだと思うよ。
しかも、実現内容は不完全だし、>>974 で逆切れしてるし。

普通の Unix プログラマなら >>968 ぐらいの内容は思いつくし、他の環境でも map ファイルとかから同じようなことはできる。
デバッグ情報にアクセスできれば、ローカル変数だって可能のはず。(デバッガはやってるからね。)

>>968 が責められるは、処理系依存云々もあるけど、そんなあたりまえの事を得意げに書いてると言うところにあるんじゃないの ?

983 :デフォルトの名無しさん:03/05/24 10:32
>>982も当たり前のことを得意げに書いているように見える。

984 :デフォルトの名無しさん:03/05/24 10:37
「はいはい、分かったから次スレで同じ話題で議論すんなよ」ということでファイナルアンサー?

985 :979:03/05/24 11:12
>>981
タシカニカコワルカタ

986 :デフォルトの名無しさん:03/05/24 11:14
>>920は認識不足。
>>921はそれに対するフォロー。一般的に無理と答を出している。
>>964は得意げな煽り。
>>968は調子に乗りすぎ。
>>974>>968でもないのに突っ込む阿呆。
>>979が折角丸く収めようとしているのに更に得意げに書く>>982


987 :デフォルトの名無しさん:03/05/24 11:16
>>986の分析をお願いします。

988 :デフォルトの名無しさん:03/05/24 11:37
>>986は分析厨

989 :デフォルトの名無しさん:03/05/24 11:44
>>986=>>968

990 :デフォルトの名無しさん:03/05/24 11:55
最近、1000獲り合戦もなく、寂しい終わり方が多いですね・・・。

991 :デフォルトの名無しさん:03/05/24 11:57
記念カキコ

992 :.ある被害者:03/05/24 12:25
脳の「物理的」拘束から催される体感的自殺衝動に耐え、
常に歯をくいしばっていなければならず、シャワーを浴び
る事さえ困難で日常生活を送ることができません。一年と
三か月続いています。
脳の「物理的」拘束においては、脳を機能停止にすること
など簡単で、何百回と機能を停止され、殺害されかけまし
た。こんなことが許されてもよいのでしょうか?

993 :デフォルトの名無しさん:03/05/24 12:52






























994 :デフォルトの名無しさん:03/05/24 16:17
ここからはVBの質問を受け付けます。
でも、スレの残りが少ないから答えられないな。

995 :デフォルトの名無しさん:03/05/24 17:00
おお、VB、VB。あなたはどうしてVBなの?よりによってM$家の方だなんて。

996 :デフォルトの名無しさん:03/05/24 17:07
VBは元々Borland社が開発・販売を行っていたんだけど、今ではM$に乗っ取られてM$から発売されるようになったの。

997 :964:03/05/24 18:14
997

998 :デフォルトの名無しさん:03/05/24 18:15
お(=^o^=) や(=^O^=) す(=^。^=) みぃ(=^-^)/~~

999 :デフォルトの名無しさん:03/05/24 18:20
999

1000 :デフォルトの名無しさん:03/05/24 18:23
1000

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

216 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)