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

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

C言語のことは漏れに聞け!!<41>

1 :デフォルトの名無しさん:02/11/10 06:19
C言語ならオレに聞け。

問題をちゃんと切り分けて、Cの話かそうでないか洗ってから質問してくれ。
というより、聞く前に一応 Web で検索しろ。
コンパイラを探してるなら >>2 を見ろ。

GUIとか、C標準でできない事の質問は使ってる開発環境のスレに逝ってくれ。
ソース丸投げ、宿題、書籍 は専門の別スレがあるからそこへ逝ってくれ。

上記を守らない書き込みをした場合、その結果は禿しく未定義とする。


C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
comp.lang.c FAQ(英語の原文)
http://www.eskimo.com/~scs/C-faq/top.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
推薦図書/必読書のためのスレッド PART6
http://pc3.2ch.net/test/read.cgi/tech/1033207156/


前スレ <40>
http://pc3.2ch.net/test/read.cgi/tech/1036673739/
前々スレ<39>
http://pc3.2ch.net/test/read.cgi/tech/1036409391/

2 :デフォルトの名無しさん:02/11/10 06:20
>>1
おつ!

3 :2:02/11/10 06:21
やっべ!
2はコンパイラ用だった、、スマソ

4 :デフォルトの名無しさん:02/11/10 06:21
【コンパイラ】
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

5 :デフォルトの名無しさん:02/11/10 06:21
>>1
聞けを訊けにしろとあれほど......

6 :デフォルトの名無しさん:02/11/10 06:21
        まもなくここは 乂1000取り合戦場乂 となります。

      \∧_ヘ     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ,,、,、,,, / \〇ノゝ∩ < 1000取り合戦、いくぞゴルァ!!       ,,、,、,,,
    /三√ ゚Д゚) /   \____________  ,,、,、,,,
     /三/| ゚U゚|\      ,,、,、,,,                       ,,、,、,,,
 ,,、,、,,, U (:::::::::::)  ,,、,、,,,         \オーーーーーーーッ!!/
      //三/|三|\     ∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ∪  ∪       (    )    (     )   (    )    )
 ,,、,、,,,       ,,、,、,,,  ∧_∧∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ,,、,、,,,       (    )    (    )    (    )    (    )

http://big.freett.com/scheme_a/num1000.swf

7 :デフォルトの名無しさん:02/11/10 06:22
>>2
ワラタ

8 :デフォルトの名無しさん:02/11/10 06:22
1000!

9 :1:02/11/10 06:23
>>5
前スレの >>990 に「訊け」を「聞け」にしてくれと
言われたからそうしたんだが。

10 :デフォルトの名無しさん:02/11/10 06:26
>>8
二進数かよ!

11 :1:02/11/10 06:26

誰か過去スレ一覧を取得できる人がいたら載せてちょ。

12 :デフォルトの名無しさん:02/11/10 06:27
>>9=1
なにぃっ!おいっ、責任者(前スレ990)出てこいっ!

13 :デフォルトの名無しさん:02/11/10 06:27
誰だよ前スレの 990 は・・・。
1 も、漢字の意味を考えてくれ。

つーか、前スレを凄い勢いで終了させたのは誰だ。

14 :2:02/11/10 06:27
>>12-13
なぁに?
訊←この漢字が格好悪いから。

15 :デフォルトの名無しさん:02/11/10 06:28
次からスレ立てる人は、>>6 の AA デフォな。

16 :デフォルトの名無しさん:02/11/10 06:29
>>14=2
ばかもんがぁ!しかも2getするという失態までおかしおって!

17 :デフォルトの名無しさん:02/11/10 06:30
そろそろC言語の話題をしよう。

18 :デフォルトの名無しさん:02/11/10 06:30
>>14 は、死ね・くたばれ・消えろ・失せろ・潰れろ・馬鹿・あほ・間抜け・ドジ。
ポンコツ・トンチキ・ガラクタ・クズ・ゴミ・カス・最低以下の下劣・下等種族。
劣等種族・下衆野郎・腐れ外道・邪道・外道・非道・ウジ虫・害虫・ガン細胞。
ウィルス・ばい菌・疫病神・病原体・汚染源・公害・ダイオキシン・有毒物質。
廃棄物・発ガン物質・猛毒・毒物・アメーバ・ダニ・ゴキブリ・シラミ・ノミ。
毛虫・蠅・蚊・ボウフラ・芋虫・掃き溜め・汚物・糞・ゲロ・糞虫野郎・ほら吹き。
基地外・デタラメ・ハッタリ・穀潰し・ろくでなし・ごろつき・ヤクザ者。
社会の敵・犯罪者・反乱者・前科者・インチキ・エロ・痴漢・ゴミ・シデムシ。
ゴミ虫・毒虫・便所コオロギ・詐欺師・ペテン師・道化師・危険分子・痴呆・白痴。
魔物・妖怪・悪霊・怨霊・死神・貧乏神・奇天烈・奇人・変人・毒ガス・サリン。
ソマン・マスタードガス・イペリット・クソブタ・ブタ野郎・畜生・鬼畜・悪鬼。
邪気・邪鬼・ストーカー・クレイジー・ファッキン・サノバビッチ・シット・ガッデム。
小便・便所の落書き・不要物・障害物・邪魔者・除け者・不良品・カビ・腐ったミカン。
土左衛門・腐乱・腐臭・落伍者・犯人・ならず者・チンカス・膿・垢・フケ・化膿菌。
放射能・放射線・鬼っ子・異端者・妄想・邪宗・異教徒・恥垢・陰毛・白ブタ。

19 :デフォルトの名無しさん:02/11/10 06:30
ケダモノ・ボッコ・ろくでなし・VXガス・ヒ素・青酸・監獄・獄門・さらし首。
打ち首・市中引きずり回し・戦犯・絞首刑・斬首・乞食・浮浪者・ルンペン・物乞い。
放射性廃棄物・余命1年・アク・割れたコップ・精神年齢7歳・3審は必要なし。
不良品、規格外、欠陥品、不要物、埃、掃き溜め、吹き溜まり、塵埃、インチキ、居直り。
ふてぶてしい、盗人、盗賊、残忍、残酷、冷酷、非情、薄情者、ガキ、クソガキ。
ファッキン、ガッデム、サノバビッチ、シット、ブルシット、ボロ、ボッコ、妄信。
狂信者、有害物質、毒薬、猛毒、発ガン物質、誇大妄想狂。
他人の悪口は山ほどほざくが反省は一切しないガキ根性野郎、腐れ根性。
腐って歪んだプライドの持ち主、狭量、ボケ、ボケナス、アホンダラ、たわけ。
怠け者、無能、無脳、脳軟化症、思考停止、アメーバ、単細胞、蠅、蚊、カビ。
腐敗、膿、下劣、下等生物、劣等種族、クレイジー、マッド、ストーカー。
人格障害、守銭奴、見栄っ張り、ええ格好しい、粗製濫造品、偽物、似非
イカレ、乞食、浮浪者、ルンペン、狼藉者、放蕩息子、道楽息子、極道息子。
迷惑、困りもの、厄介者、村八分、異端者、アウトサイダー
大虐殺者。ナチスドイツ、731部隊、ポルポト派らと同類。

そして、こんな悪口を言うために労力を使う価値もないクズ

20 :2:02/11/10 06:31
>>16
スマソ
リッチーとともに逝ってくる

21 :デフォルトの名無しさん:02/11/10 06:32
>>20
ダイクストラによろしくな。

22 :2:02/11/10 06:35
>>19
> ふてぶてしい、

これは正解

23 :デフォルトの名無しさん:02/11/10 06:36
>>20
まさにカーニ犯
なんちゃって

24 :18-19:02/11/10 06:37
>>22
まあ、お約束の AA (?) という事で。

25 :デフォルトの名無しさん:02/11/10 06:38
インフォシークの国語辞典を「聞く」で調べたら

 (4)(「訊く」とも書く)たずねて、答えを求める。問う。
   「名前を―・く」「自分の胸に―・く」

とあったぞ。
「訊く」ではヒットしなかったし、別にいいんでない?

26 :2:02/11/10 06:39
>>24
分かっているよ。
随分とまた懐かしいコピペだ。

27 :デフォルトの名無しさん:02/11/10 06:40
きく、なんてややこしい言葉使うからダメなんだ
次から
「C言語のことなら朕に尋ねよ」
にしよう

28 :デフォルトの名無しさん:02/11/10 06:41
(・ロ・)ホ,('ロ')ホ--ッッ!!!… C言語質問スレ PartX

これがいい。

29 :デフォルトの名無しさん:02/11/10 06:43
つーか周りに合わせて、「C 相談室」 でいいやん。
元々のスレタイが、ビルジョブスの好き勝手で付けたものだし。

30 :デフォルトの名無しさん:02/11/10 06:46
「C (゚д゚)ウマ-」 「C (゚Д゚)ハァ?」 「C (・∀・)イイ!!」 「C ( ´,_ゝ`)フーン」 「C ヽ(´ー`)ノ ヤレヤレ」 「C (゚∀゚) アヒャ」

31 :デフォルトの名無しさん:02/11/10 06:47
いっそシンプルに「C」だけでいいんじゃない?

32 :デフォルトの名無しさん:02/11/10 06:48
見つけにくいだろ

33 :デフォルトの名無しさん:02/11/10 06:50
C, or not C. That's the question.

34 :デフォルトの名無しさん:02/11/10 06:59
「Cと、土曜深夜の愉快な仲間たち」

35 :デフォルトの名無しさん:02/11/10 07:20
>>11
40 http://pc3.2ch.net/test/read.cgi/tech/1036673739/
39 http://pc3.2ch.net/test/read.cgi/tech/1036409391/
38 http://pc3.2ch.net/test/read.cgi/tech/1035729526/ (待機中)
37 http://pc3.2ch.net/test/read.cgi/tech/1035623265/ (待機中)
36 http://pc3.2ch.net/test/read.cgi/tech/1035211039/ (待機中)
35 http://pc3.2ch.net/test/read.cgi/tech/1034337064/ (待機中)
34 http://pc3.2ch.net/test/read.cgi/tech/1033240509/ (待機中)
33 http://pc3.2ch.net/test/read.cgi/tech/1032606064/ (待機中)
32
31
30
29
28
27
26 http://pc.2ch.net/tech/kako/1026/10260/1026048820.html
25 http://pc.2ch.net/tech/kako/1024/10249/1024918442.html
24 http://pc.2ch.net/tech/kako/1024/10240/1024033400.html
23 http://pc.2ch.net/tech/kako/1022/10224/1022402165.html
22 http://pc.2ch.net/tech/kako/1022/10224/1022402165.html
21 http://pc.2ch.net/tech/kako/1022/10220/1022045622.html

36 :デフォルトの名無しさん:02/11/10 07:20
20 http://pc.2ch.net/tech/kako/1021/10214/1021459016.html
19 http://pc.2ch.net/tech/kako/1020/10207/1020756993.html
18 http://pc.2ch.net/tech/kako/1020/10202/1020260813.html
17 http://pc.2ch.net/tech/kako/1019/10193/1019372139.html
16 http://pc.2ch.net/tech/kako/1018/10184/1018453690.html
15 http://pc.2ch.net/tech/kako/1016/10165/1016519243.html
14 http://pc.2ch.net/tech/kako/1015/10152/1015286974.html
13 http://pc.2ch.net/tech/kako/1013/10139/1013990673.html
12 http://pc.2ch.net/tech/kako/1012/10123/1012348974.html
11 http://pc.2ch.net/tech/kako/1009/10094/1009499565.html
10 http://pc.2ch.net/tech/kako/1008/10083/1008300863.html
9 http://pc.2ch.net/tech/kako/1007/10072/1007272267.html
8 http://pc.2ch.net/tech/kako/1005/10058/1005811510.html
7 http://pc.2ch.net/tech/kako/1005/10058/1005811510.html
6 http://piza2.2ch.net/tech/kako/999/999617524.html
5 http://piza2.2ch.net/tech/kako/994/994908590.html
4 http://piza.2ch.net/tech/kako/992/992357382.html
3 http://piza.2ch.net/tech/kako/989/989929288.html
2 http://piza.2ch.net/tech/kako/979/979529893.html
1 http://piza.2ch.net/tech/kako/967/967985026.html

27 〜 32 がどうしても見つけられなかった。

37 :1:02/11/10 07:24
>>35-36
おお!どうもありがとう。

38 :デフォルトの名無しさん:02/11/10 07:30
http://piza.2ch.net/tech/kako/967/967985026.html

Part1の>>1って痛いな、、、

39 :デフォルトの名無しさん:02/11/10 07:31
20 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/09/04(月) 00:50
悲惨な1スレの予感…

40 :デフォルトの名無しさん:02/11/10 07:34
まだ起きてるのか・・・

41 :デフォルトの名無しさん:02/11/10 07:35
今は何してるんだろう・・・
93 名前: ビル・ジョブス 投稿日: 2000/09/09(土) 16:17
>91
おぅ!そりゃ知ってるよ!おまえみたいなおバカなクソガキに
言われるまでもない。
ちなみに今は、CEがメインだからUnicodeオンリーだけどな!

42 :デフォルトの名無しさん:02/11/10 07:54
誰か 35-36 のサマリー作る勇気のある奴いないか?

43 :デフォルトの名無しさん:02/11/10 09:40
アサートすると、標準出力にメッセージを出しますよね? ね?
でも、クロス環境などで、ターゲットに標準出力がないばあい、やっぱ
アサートさんを書き換えないとだめ? ですよねえ、きっと....

44 :Booleanなら:02/11/10 12:03
if(BOOL)、
if(!BOOL) or if(!(BOOL))
だよ!==は絶対変だよ!

45 :デフォルトの名無しさん:02/11/10 12:04
またコテハン考えなきゃだめってことか・・・

46 :デフォルトの名無しさん:02/11/10 12:31
>>44
一生やってろ!

47 :デフォルトの名無しさん:02/11/10 13:36
math.hのpow()ってどういうアルゴリズムになってるんでしょうか?
ググったんですが、いいサイトが見つからなくて…


48 :デフォルトの名無しさん:02/11/10 13:38
ソース見ればよい

49 :デフォルトの名無しさん:02/11/10 13:38
前スレにでてたと思うが。

50 :デフォルトの名無しさん:02/11/10 13:45
>>49
あ、そうなんですか。見てみます。

>>48
そう思ったんですが、どうやって見るのか分からなかったので…
すみません。

51 :デフォルトの名無しさん:02/11/10 13:47
>>47
アホなりに考えてループ作ってその中でかけ算。

52 :デフォルトの名無しさん:02/11/10 13:48
>>51
脳みそ入ってるか?

53 :デフォルトの名無しさん:02/11/10 13:49
http://gcc.gnu.org/
gccってこっからダウンロードするの?
英語ばっかで意味わかんないんだけど・・・
だれか教えて!


54 :デフォルトの名無しさん:02/11/10 13:52
>>53
glibc じゃなくって?

55 :デフォルトの名無しさん:02/11/10 13:54
>>54
それは何者!?

56 :53:02/11/10 13:57
なんか色々やってみたら、gcc-3.2.tar.gzってファイルをダウンロードできたんだけど
これ違う?

57 :デフォルトの名無しさん:02/11/10 14:01
http://nemesis.sourceforge.net/browse/mod/venimpl/c/math/pow.c.html
これは?

58 :47:02/11/10 14:04
exp(y * log(x))
って感じで計算してるみたいですね。

ソースいろいろ探してみたんですが、見つかりませんでした。
VC++のMATH.H見てみましたが、意味が分からなかったです…


59 :デフォルトの名無しさん:02/11/10 14:06
>>53
英語わからんのだったらbccにしとけ。

60 :47:02/11/10 14:07
>>57
ありがとうございます。
これだけ複雑だとやっぱりpow(x,3.0)よりもx*x*xの方がアルゴリズム的に優れてそうですかね?


61 :デフォルトの名無しさん:02/11/10 14:12
>>60
アルゴリズム的に、ってのが分からんが速いのは確か

62 :47:02/11/10 14:19
>>61
分かりました。サンクスです!

63 :デフォルトの名無しさん:02/11/10 14:23
>>60
乗算の繰り返しだと有効数字の大きい実数で桁落ち起こすんじゃないか?
log使うのは精度保つためだと思ったな。

スピード的にも3乗くらいならそれでもいいがな。

64 :53:02/11/10 14:33
>>59
今BCC使ってるんだけど、gccの方がいいかなあって。
学校はGCCとVC++なんだよねー。
あー・・・

65 :デフォルトの名無しさん:02/11/10 14:34
今ビット演算を勉強してるんですけど、
こんなこといったいどういう時に使うんでつか?

66 :デフォルトの名無しさん:02/11/10 14:38
>>65
バイトより細かいレベルでデータを処理したいとき。

67 :デフォルトの名無しさん:02/11/10 14:52
集合としてあつかうとき


68 :デフォルトの名無しさん:02/11/10 14:56
フラグ

69 :デフォルトの名無しさん:02/11/10 15:04
ブラクラ

70 :デフォルトの名無しさん:02/11/10 15:05
通報しますた

71 :デフォルトの名無しさん:02/11/10 15:08
>>63
なんで精度が良くなるの?
詳細キボンヌ

72 :47:02/11/10 15:40
すみません。最後にひとつ。

pow(x,y)のyがdoubleの時はlog介してるため、powは遅くなりますが、
yがintの時ってどうなるんでしょうか?

double ipower(double x, int n)
{
int abs_n; double k = 1.0;
abs_n = abs(n);

while(abs_n != 0){
if (abs_n & 1){
k *= x;
}
x *=x;abs_n >>=1:
}
if (n>=0) return k;
else return 1/k;
}

って、感じだと思うんですが…やはり、直接やるよりはどっちにしても遅いですかね?

73 :デフォルトの名無しさん:02/11/10 17:15
>>72
直接って何だ
ソースはglibcやBSDのを探して嫁
一般的なアルゴリズムの解析はKnuthの本とかにある
これ以上はアルゴリズムスレか数値計算スレにいくべし Cとは関係ない


74 :デフォルトの名無しさん:02/11/10 17:16
それとアルゴリズム事典丸写ししたら、ひとことそう書け


75 :那由多 ◆F4E74ZBQPA :02/11/10 17:30
>65
低位レイヤーのアプリ作るとき、回線のデータから必要なデータを
取得したりするのにマスクしたビットをシフトさせて使うよ。

マジレスしてしまった。

76 : :02/11/10 17:30
.NET Framework SDKをダウソしたらCコンパイラも付いてきた。
(こちらもコンパイルはコマンドラインからだが)

VB、C#しかついてこないと思っていたから、ちょっとトクした気分。

160MBのダウソはつらかったが・・・。


77 :デフォルトの名無しさん:02/11/10 17:33
恐れ巣だが…
pow(x, y)がexp(y, log(x))を計算している理由は、
yが整数でない場合を考えれば明らかだろう。

78 : :02/11/10 17:33
>>65
2倍、4倍、8倍などしたいときや、1/2、1/4、1/8したいとき、
通常の掛け算/割り算命令より早くできる。

例:左に1ビットシフト:2倍
右に1ビットシフト:1/2


79 :デフォルトの名無しさん:02/11/10 17:43
>>72
logはきわめて多項式で近似しやすい関数として知られている。
expもそう難しくない。
powの演算回数は、キミが書いたものより平均では少ないかも。

80 :JPS ◆M0LaMzf5rY :02/11/10 18:14
これ何処まちがってる?
#include <stdio.h>
#include <math.h>
int main(void)
{
unsigned x;
int s;

printf("自然数を入力してください:");
scanf("%u",&x);
printf("何ビットシフトしますか:");
scanf("%d",&s);

printf("%uを左に%dビットシフトした値は%uです。\n",x,s,x<<s);
printf("%uと2^%d乗の積は%uです。\n",x,s,x*(pow(2,s)));
printf("%uを右に%dビットシフトした値は%uです。\n",x,s,x>>s);
printf("%uを2^%d乗で割った商の整数部分は%uです。\n",x,s,x/(pow(2,s)));

return(0);
}

81 :デフォルトの名無しさん:02/11/10 18:17
>>56
OS は?
Redhat 系 Linux だったら rpm でインストールすればいいし、
Windows なら mingw や cygwin が楽。

82 :デフォルトの名無しさん:02/11/10 18:18
powはdoubleを返す。
printf("%uを左に%dビットシフトした値は%uです。\n",x,s,x<<s);
printf("%uと2^%d乗の積は%uです。\n",x,s,x*(1<<s)));
printf("%uを右に%dビットシフトした値は%uです。\n",x,s,x>>s);
printf("%uを2^%d乗で割った商の整数部分は%uです。\n",x,s,x/(1<<s));

83 :デフォルトの名無しさん:02/11/10 18:18
>>81
cygwinはインストールしたけど
意味不明

84 :JPS ◆M0LaMzf5rY :02/11/10 18:19
>>82
doubleか。
そうじゃなくて、ビット演算と2のべき乗で同じ値が出ることを
確かめるプログラムを作ろうとしてた

85 :デフォルトの名無しさん:02/11/10 18:20
>>80
> printf("%uと2^%d乗の積は%uです。\n",x,s,x*(pow(2,s)));
> printf("%uを2^%d乗で割った商の整数部分は%uです。\n",x,s,x/(pow(2,s)));
%uじゃdoubleを正しく表示できないダロー


86 :デフォルトの名無しさん:02/11/10 18:21
printf("%uと2^%d乗の積は%uです。\n",x,s,x*(int)(pow(2,s)));
printf("%uを2^%d乗で割った商の整数部分は%uです。\n",x,s,x/(int)(pow(2,s)));

87 :JPS ◆M0LaMzf5rY :02/11/10 18:21
>>85
知らんかったから。doubleは%fだべ。
またひとつ賢くなった

88 :デフォルトの名無しさん:02/11/10 18:22
>>83
インストーラ(setup.exe)に devel というカテゴリがあるので、
そこにあるのを全部選択してインストールすべし。

89 :デフォルトの名無しさん:02/11/10 18:23
>>88
なんかさ、DOS窓見たいのが出てきたんだけど
それ使う?

90 :デフォルトの名無しさん:02/11/10 18:24
同じC言語をやっている仲間としてお願いがあります。
構文解析木について教えてください。出来ればサンプルプログラムと簡単な解説もお願いします。
よろしく。

91 :デフォルトの名無しさん:02/11/10 18:25
ぐぐって自分で有益な情報を探そう。

92 :デフォルトの名無しさん:02/11/10 18:27
ビットシフトが2のべき乗倍になるのはあたりまえだよね。
n進法で1桁ずらせばn倍(n分の1)したことになる。
x桁ずらせばnのx乗倍(nの-x乗倍)したことになる。
10進で考えてわからんならくそして寝たほうが良い。

93 :デフォルトの名無しさん:02/11/10 18:29
>>90
教科書1章分の内容をここに書けってか?

94 :デフォルトの名無しさん:02/11/10 18:30
>>89
そ。Cygwin Bash Shell というタイトルのウインドウで作業をする。
gcc -v と打ってみな。

95 :90:02/11/10 18:31
>>93
同じ仲間じゃあないですか。
ここに書いておけば次に同じ質問がきたらここをみろ、っていえるし。
よろしくブラザー。

96 :デフォルトの名無しさん:02/11/10 18:32
>>92
(病理学的なぐらい)厳密には、C89 の規格ではそうとは限らない。

97 :デフォルトの名無しさん:02/11/10 18:33
>>95
やったら荒らしに近い行為になるぞ。

98 :JPS ◆M0LaMzf5rY :02/11/10 18:35
>>92
わからないとでも思ってんのか?
本に載ってたのをpow()を使ってやってるだけだよ
分からないやつがいるかもって思うお前のほうが寝たほうがいいよw

99 :デフォルトの名無しさん:02/11/10 18:38
>>98
やってみないとわからないようなやつはくしして寝たほうが良い

100 :デフォルトの名無しさん:02/11/10 18:38
すまんな、s++もわからん人が多いもんでな。

101 :デフォルトの名無しさん:02/11/10 18:39
>>98
すぐ煽りにつられるようなアフォは糞して…

102 :デフォルトの名無しさん:02/11/10 18:39
C++はわからない

103 :デフォルトの名無しさん:02/11/10 18:40
構文解析木とは、構文を解析した結果できる木構造のこと。
これで良いだろ。

104 :デフォルトの名無しさん:02/11/10 18:41
>>102
あれは覚えようとする気力をなくす言語だ。

105 :デフォルトの名無しさん:02/11/10 18:41
C言語やってるだけでブラザー呼ばわりされても…

106 :JPS ◆M0LaMzf5rY :02/11/10 18:45
>>99
日本語理解できない香具師は死んだほうが(・∀・)イイ!
>本に載ってたのをpow()を使ってやってるだけ

107 :デフォルトの名無しさん:02/11/10 18:46
>>106
DQNなプログラムをコテハンでさらす厨房のくせに態度でかいよ(w

108 :JPS ◆M0LaMzf5rY :02/11/10 18:47
>>107
お前も昔はこうだったんだろうが。
態度のでかさに経験なんか関係ないよ。
才能だけ。さ・い・の・う。わかる?

109 :デフォルトの名無しさん:02/11/10 18:48
で、>>80のプログラムはちゃんと動くようになったのか?

110 :デフォルトの名無しさん:02/11/10 18:49
コテハンのネタレスと厨房の煽りのみで続いてるスレはここですか?

111 :デフォルトの名無しさん:02/11/10 18:49
>>108
たしかにその態度のでかさは才能だろうがウザイ。
少なくとも漏れはお前みたいな間違いをして、人に聞かないとわからない
なんて間抜けな経験はない。

112 :デフォルトの名無しさん:02/11/10 18:49
>>111
ネタですた。

113 :デフォルトの名無しさん:02/11/10 18:51
次のDQNなプログラムはまだかい?

114 :デフォルトの名無しさん:02/11/10 18:51
次はどんな恥さらしプログラムの相談かな?

115 :JPS ◆M0LaMzf5rY :02/11/10 18:51
>>109
なったよ。doubleだって知らんかったけど%fで解決した。
まあ>>111みたいな中途半端な煽りはつまんねーけど
またここに来てやるよ。お前らを使ってやってるんだから
ありがたく思え。


116 :デフォルトの名無しさん:02/11/10 18:53
>>115
こっちがありがたく思うんかい。

117 :デフォルトの名無しさん:02/11/10 18:53
               ,,,,,,,,,,,,_,, ,,,,
            ,,、‐'"~    'i.゙i''i,ヽ...,
          ,.r'''       i''゙ノ ゙゙,ニ''く
         /         r‐'''''i i, (" ヾ,
         ,'       ,   ゙~´゙ー ゙´  .',
        ,'  ,: _,/,,_:;.;l ,l i   .!.l.l',.i.l:.. , l ,i,l
        i l l .::/.,rツ=リ,ji'!;|:.:j;rl≦ト、;' j:. lj'
        l,. l.l.::/-'〃i'''i, ',ソ!ンシr'i.゙'リ|/://:リ    異議あり!
        ,' 'ivl/" lゝ'l  '"'゙ l'r'! ィンシ /'
       ,'  :::{ r,  ''゙‐゙   ..iソ {ノ"             ,、‐''""''、
        /  .:::゙'‐-、.   --    ノ           ,、‐゙     ',
.      /,r''''''ー‐--、:'i‐ 、、,,,,,.、 -''゙ ゙、         ,、-'"       j
      //   、 ,,,_ヾ、    ト、;;;;;::. ゙、、-'" ̄~~~゙゙゙"          /
    //   、` ~  ~゙''''''''''"~´  ゙'ソ.      ',        ....::::::::::::/
.    //   ... ´        .::::;/       ゙、..... ........:::::::::::::::::::::/
   / '、:....:::::",         .:;rj゙         ゙、;;;;::::::::::::::::::;;;;、-''゙
.  /   ヽ;:::::"._      .:::i';/     ゙、      ゙、`~~~゙゙~‐- 、、、..,,_
. ,'   .:::::ヽ、;;;;;>、:::...  ::::r'        ゙、     ゙、::::::         ヽ
 i  ,: ::::::;:::::l:::',:::::::::゙i'r、;:::::::!.  ヽ      ゙、    .::〉::::::....      }
. l  i::.:::::i::::::l:::::',::  l:/;;;::゙'ーr゙、   ヽ    ゙.、.:::::;/'ー 、、;;;;____;;::、-'"
|l :!::::::i:::::::l:::::::}、 l:::::::~゙''''! i .........ヽ........:::::;r゙''"
. l l l::::::i::::;;;、、、/.  l::::::::::::::l  .〉、;;;;;;::、-'rーi''゙
 l,l l:::::l:::::i,:::::;;;;;ヽ,ri;;;;;;;;;;;;;j::::/;;;;;;;;ノ:..  |: j

118 :デフォルトの名無しさん:02/11/10 18:53
ありがたく思うからさっさとDQNプログラムで笑わしてくれ。

119 :JPS ◆M0LaMzf5rY :02/11/10 18:55
ていうかよ、malloc()の仕様がよくわかんねーんだよ。
先頭のアドレスを返すってことはさ、
int *vc;
vc=malloc(sizeof()int*size)ってやるとさ、vcにはsizeof()int*size分の確保された
メモリの先頭アドレスが返ってくるんだろ?
したらvcは配列になるってことだろ?
これが可変長配列ってもんだろ?

120 :JPS ◆M0LaMzf5rY :02/11/10 18:57
あ、プログラムか。ちょっと待ってて。

121 :デフォルトの名無しさん:02/11/10 18:57
>>119
違うけど、そう思ってプログラム書いても大丈夫といえば大丈夫。

122 :デフォルトの名無しさん:02/11/10 18:57
vc=malloc(sizeof(int)*size)

123 :JPS ◆M0LaMzf5rY :02/11/10 18:57
>>121
どこが違う?

124 :121:02/11/10 18:57
ちょっとまて、sizeof()intってなんだ?sizeof(int)だろ

125 :JPS ◆M0LaMzf5rY :02/11/10 18:58
>>122
( ̄□ ̄;)!!
DQNさらしちまった

126 :121:02/11/10 18:58
>>123
vcはあくまでもポインタ。配列じゃない。

127 :JPS ◆M0LaMzf5rY :02/11/10 18:58
おkおk。間違っただけだから。
で、121よ、どこが違う?

128 :デフォルトの名無しさん:02/11/10 18:59
>>119
考え方としては合ってるけど、可変長配列というと
別のものと紛らわしい。


129 :121:02/11/10 18:59
>>128
reallocで大きさを変えられるから可変長配列でもいいんじゃない?(笑)
俺はそうは呼びたくないけど、、、

130 :JPS ◆M0LaMzf5rY :02/11/10 18:59
>>126
お。分かった気がする。
可変長なのはvcの先にあるものね。
vcは常に、その先にある配列の先頭のアドレスが入ってるから・・・
んー。わかったかも。

131 :JPS ◆M0LaMzf5rY :02/11/10 19:00
>>128
別のものってなんだあ?
ちなみに可変長配列は前橋の影響ですた。

132 :デフォルトの名無しさん:02/11/10 19:01
vcの指すもの(mallocの返したメモリブロック)は
配列だといってまちがいあるまい。

133 :デフォルトの名無しさん:02/11/10 19:01
前橋・・・

134 :デフォルトの名無しさん:02/11/10 19:02
可変長配列って言ったら
void foo(n)
{ int a[n];
...
みたいなやつのことだろ。

135 :デフォルトの名無しさん:02/11/10 19:03
>>134
最近のCだけだな。それできるの。

136 :121:02/11/10 19:05
可変長って途中で長さを変えられるという意味じゃないの?

137 :121:02/11/10 19:07
時と場合によって確保する大きさがかわる配列という意味か、、、


138 :デフォルトの名無しさん:02/11/10 19:08
規格でvariable length arrayといえば>>134の指すようなものだな。
あとは、
void f(int m, int c[m][m])
みたいなのとか。

139 :デフォルトの名無しさん:02/11/10 19:08
すみません、 >>1 さんに質問なのですが、
未定義と禿しく未定義の違いを教えてください。
あれ以来夜も眠れません。今朝だけど。

140 :121:02/11/10 19:09
>>138
OK
そういえばint a[10]は固定長配列って言われるしね。

141 :JPS ◆M0LaMzf5rY :02/11/10 19:11
>>134
void foo(n)って関数でしょ。
仮引数のnの型指定しは?
そんなのみたことない・・・

142 :JPS ◆M0LaMzf5rY :02/11/10 19:13
はっ!またDQNだったな。
void foo(int n)
{
   int vc[n],i;
   for(i=0;i<n;i++)

みたいな感じか!?

143 :デフォルトの名無しさん:02/11/10 19:13
>>141
そんなとこつっこむなよ

144 :JPS ◆M0LaMzf5rY :02/11/10 19:14
>>143
いや、マジレスだった。なんだこれは!?って。
厨でスマソ。

145 :134:02/11/10 19:14
>>141
int書き忘れただけだよ。
でもちゃんとコンパイルして動かせるけどな。

146 :JPS ◆M0LaMzf5rY :02/11/10 19:14
>>145
マジで!?やってみる

147 :デフォルトの名無しさん:02/11/10 19:16
>>146
コンパイラがC99に対応していないとだめだぞ。
VC++6.0なんかは対応していない(1998年発売だから当たり前だけど)

148 :デフォルトの名無しさん:02/11/10 19:18
そうかー、昔風の
void foo(n)
int n;
{
のint n;は略してもいいんだっけ。

149 :JPS ◆M0LaMzf5rY :02/11/10 19:21
てゆーか、>>134ってこういう事?
#include <stdio.h>

void foo(int n)
{
int vc[n],i;

for(i=0;i<n;i++)
vc[i]=i;

for(i=0;i<n;i++)
printf("%d\n",vc[i]);
}

int main(void)
{
int n;

scanf("%d",&n);

foo(n);

return(0);
}
コンパイル不可能なんだけど。

150 :デフォルトの名無しさん:02/11/10 19:21
>>149
>>147

151 :デフォルトの名無しさん:02/11/10 19:23
int *ip = malloc(sizeof(int));
*ip=100;
はわかるのですが、
int *arrayp = malloc(sizeof(int)*n);
arrayp[n-1]=-1;
で、なぜipとarraypが同じ型なのかわかりません。
1つの変数も配列も同じものなんでしょうか?


152 :デフォルトの名無しさん:02/11/10 19:24
>>151
なぜって同じint *で宣言しているじゃん
それと、mallocで得た領域を配列と見なすのならば、前者は要素1の配列、後者は要素nの配列

153 :JPS ◆M0LaMzf5rY :02/11/10 19:26
>>151
ipとarraypは両方ともintへのポインタ型だべ?
mallocは確保した領域のアドレスの先頭へのポインタを返すから
ポインタ型じゃないと代入できない。


154 :JPS ◆M0LaMzf5rY :02/11/10 19:28
>>150
それだけの問題なんすか。
ちなみにbcc5.5がどうかわからん?

155 :デフォルトの名無しさん:02/11/10 19:32
>>152-153
「なぜ同じint *で宣言すべきなのか」が聞きたいのです。
片方は整数1個へのポインタ、
もう一方は整数の配列へのポインタなのに。

156 :デフォルトの名無しさん:02/11/10 19:33
>>154
.cppという拡張子にすればコンパイルできるのでは。

157 :デフォルトの名無しさん:02/11/10 19:34
>>155
一個でも配列は配列だ。
mallocはポインタを返す。だからポインタで受け取るべきだろ。

158 :デフォルトの名無しさん:02/11/10 19:38
>>155
ひとつ聞くが、
int i[1];と宣言した場合、i=4;なんてできると思うか?

159 :デフォルトの名無しさん:02/11/10 19:50
>>157
ipは配列へのポインタなのですか?intへのポインタだからint *だと思ってました。
>>158
いいえ。


160 :デフォルトの名無しさん:02/11/10 19:50
>>155
どちらも整数配列へのポインタとみなしてかまわない。
ipの方は要素数=1 の配列(の先頭アドレス)とみなす。従って、
ip[0] = 100;
という操作も可能。

161 :デフォルトの名無しさん:02/11/10 19:51
>>158
なに言ってるんだ?大丈夫か?

162 :デフォルトの名無しさん:02/11/10 19:53
>>161
>>155が要素数1のint配列を単なるint型変数と同じだと思っているみたいだから言ったまでですが。

163 :デフォルトの名無しさん:02/11/10 19:54
なぜ「整数へのポインタ」と「整数配列へのポインタ」が
同じ型なのか、という点がまだわからないんですが…

164 :デフォルトの名無しさん:02/11/10 19:55
int *ip,i,ia[1];

ip=&i;
ip[0]=10; /* OK */
ip=ia;
ip[0]=10; /* OK */

これが分かれば理解できると思う。

165 :デフォルトの名無しさん:02/11/10 19:56
>>162

int i;は整数1個が入る変数で、配列ではありませんよね。
それは最初からわかってます。

166 :デフォルトの名無しさん:02/11/10 19:57
>>164
整数と、整数1個の配列は同じということですか?

167 :デフォルトの名無しさん:02/11/10 19:59
>>166
int iとint ia[1]は確保する領域の大きさは同じ。
int *はそのアドレスを入れる変数だから、、、

168 :デフォルトの名無しさん:02/11/10 20:00
>>167
じゃあ、整数10個の配列へのポインタは別の型なんですか?

169 :デフォルトの名無しさん:02/11/10 20:00
int *ip , i , ia[1];

ia = &i;
*ia = 3;
printf("%d\n",i) => 3
ってことですね。


170 :デフォルトの名無しさん:02/11/10 20:01
char array[sizeof(int)];
int *ip=(int *)array;

*array=10; /* こういうのもできるはず */


171 :170:02/11/10 20:01
*array=10;じゃなくて、*ip=10;

172 :デフォルトの名無しさん:02/11/10 20:02
>>170
コンパイラ依存(arrayがintと同じアドレス境界に整列されている保証はない)。

173 :デフォルトの名無しさん:02/11/10 20:02
>>170
メリットは?

174 :デフォルトの名無しさん:02/11/10 20:02
素直にmallocしろって

175 :デフォルトの名無しさん:02/11/10 20:02
>>170
なんのメリットがあるか書いてください。
メリットが無いことを教えないでください。

176 :170:02/11/10 20:03
>>173
メリットなんかねーよ。
必要な領域さえあればそれをint型とみなして扱えると言いたいだけ。

177 :デフォルトの名無しさん:02/11/10 20:04
>>172
あんた何いってんの?

178 :デフォルトの名無しさん:02/11/10 20:04
「整数へのポインタ」と「整数の配列へのポインタ」に区別がないのに、
「整数の配列の配列へのポインタ」とは違う型なのはなぜですか?

179 :デフォルトの名無しさん:02/11/10 20:05
>>177
170で「できる」と書いているのは嘘だということ。
「できる環境もある」が正しい。

180 :デフォルトの名無しさん:02/11/10 20:05
#sizeof(int) = 4と仮定して考える。

p = malloc(sizeof(int))では
[<- 4 byte ->]
というメモリが確保されるとしよう。

p = malloc(sizeof(int)*n)では
[<- 4*n byte ->]
というメモリが確保される。Cでは、これを配列とみなして
[<- 4 byte ->][<- 4 byte ->].....[<- 4 byte ->] (=要素数n個)
という「n個の要素をもつint型の配列」として使うことができる。

で、最初の例に戻ると、p = malloc(sizeof(int))で
[<- 4*1 byte ->]
というメモリが確保され、これは
[<- 4 byte ->] (=要素数1個)
と等価なので、pを「一つの要素をもつint型の配列」として使うことができる。

181 :デフォルトの名無しさん:02/11/10 20:05
>>176
そんなこたー無い。

182 :デフォルトの名無しさん:02/11/10 20:06
>>175
お前さぁ、知識はあればあるほど得なんだよ。たとえどんなものでも。
情報の取捨選択も出来ずにごちゃごちゃほざいてるお前、才能無いと思う。

183 :デフォルトの名無しさん:02/11/10 20:06
>>179
なんでよ!?
sizeof(int)分配列を確保すればそこにint型の値を入れられるだろ

184 :デフォルトの名無しさん:02/11/10 20:08
>>183
「アドレス境界」と「アドレスの整列」という言葉を理解しているか?

185 :デフォルトの名無しさん:02/11/10 20:09
>>184
配列(mallocは除く)は連続した領域だってわかっている?

186 :デフォルトの名無しさん:02/11/10 20:09
>>180
最初の質問者です。なんとなくわかってきました。
区別できないから同じ型とみなすということですね。
では>>178にも書きましたが、配列の配列も同じ並びかただと思うのですが
なぜ型が違うのでしょう?

187 :デフォルトの名無しさん:02/11/10 20:09
























188 :デフォルトの名無しさん:02/11/10 20:09





























189 :デフォルトの名無しさん:02/11/10 20:10






























190 :デフォルトの名無しさん:02/11/10 20:10
>>185
あたりまえのこと聞いてごまかすな。
境界と整列について知らないなら知らないといえ。

191 :デフォルトの名無しさん:02/11/10 20:10
>>184の言うとおりだとしたらmemsetやmemcpyはどうやって実装すればいいんだろ(ワラ

192 :デフォルトの名無しさん:02/11/10 20:11























193 :デフォルトの名無しさん:02/11/10 20:11
言い負かされたからって荒らすなよ。
小学生か(w

194 :デフォルトの名無しさん:02/11/10 20:11































195 :デフォルトの名無しさん:02/11/10 20:11
>>193
誰のこと?

196 :デフォルトの名無しさん:02/11/10 20:12
このDQNぶりはどうみてもJPS

197 :デフォルトの名無しさん:02/11/10 20:13
配列に詰め物があるとでも言いたいのかな。
構造体じゃあるまいし・・・

198 :デフォルトの名無しさん:02/11/10 20:14
























199 :デフォルトの名無しさん:02/11/10 20:14
>>191
おいおい…charは整列する必要がない。
char単位でコピーなり比較なりすればよい。
たとえば1/sizeof(int)回で住むからといって
memcpyやmemchrをintを使って読み書きするように書くか?

200 :デフォルトの名無しさん:02/11/10 20:15
>>197
char配列の先頭アドレスがint境界に整列してる保証があるわきゃねーだろ
ヴォケが。
自分の無知を棚に上げてよく言うよ。

201 :デフォルトの名無しさん:02/11/10 20:16
暴れるなよ >>170=>>197=JPS

202 :デフォルトの名無しさん:02/11/10 20:16
>>199
memcpyは複数バイト単位で転送してると思うぞ。

203 :デフォルトの名無しさん:02/11/10 20:18
いつのまにか荒れてるな…
alignment bouncaryを知らない厨房が1人、大勢のふりして暴れてるのか。

204 : ◆JWPaeN65Rw :02/11/10 20:18
>186
> では>>178にも書きましたが、配列の配列も同じ並びかただと思うのですが
> なぜ型が違うのでしょう?

とは・・・・

>「整数へのポインタ」と「整数の配列」
=>int a;(int a[1];)
==>int *a_p;

>「整数の配列の配列」
=>int b[10][10];
==>int **b_p;

a_pとb_pの違いのことを言っているのか??

205 :デフォルトの名無しさん:02/11/10 20:20
>>202
ああ、なるほど。最初と最後の未整列のところだけcharで書けば
できるかもね。でもホントか? 
数十バイト程度だと、かえって遅くなりそうな気がするが。

206 :デフォルトの名無しさん:02/11/10 20:23
>>205
memcpy(or strcpy)の実装についてつい最近この板で議論されていたと思う
のだが、どこだったか見つからない。

207 :JPS ◆M0LaMzf5rY :02/11/10 20:23
俺じゃねーよ。
おれはちゃんと説明したし・・・
153 :JPS ◆M0LaMzf5rY :02/11/10 19:26
>>151
ipとarraypは両方ともintへのポインタ型だべ?
mallocは確保した領域のアドレスの先頭へのポインタを返すから
ポインタ型じゃないと代入できない。

しかも今ボンバーマンやってたしw

208 :デフォルトの名無しさん:02/11/10 20:24
>>170 プ
char c[sizeof(int)];
がint型として扱えるだって(w
なんちゅーDQNだ(禿藁


209 :JPS ◆M0LaMzf5rY :02/11/10 20:24
俺もこの論争に参加していいでつか?

210 :デフォルトの名無しさん:02/11/10 20:25
>>208
なんで扱えないんだったっけ?

211 :デフォルトの名無しさん:02/11/10 20:26
できるかぎりlongバイトごとコピーして、あまりを1バイトずつコピーするってものじゃなかったか?>この前のmemcpy

212 :デフォルトの名無しさん:02/11/10 20:26
memcpyをインライン展開するコンパイラもあるよね。
複数バイト単位で転送してたらかなり大きいコードになりそうだが。

213 :JPS ◆M0LaMzf5rY :02/11/10 20:28
memcpyってなんだ?
なんてヘッダで定義されてんの?

214 :JPS ◆M0LaMzf5rY :02/11/10 20:29
stringか・・・
これと似たやつでさ、strなんとかってなかった?
どう違うの?

215 :デフォルトの名無しさん:02/11/10 20:31
>>214
燃料注入してるつもりか?

216 :デフォルトの名無しさん:02/11/10 20:32



























217 :JPS ◆M0LaMzf5rY :02/11/10 20:32
>>215
やべー意味わかんねーよ
どういう事?

218 :デフォルトの名無しさん:02/11/10 20:34
void func(void *p1,void *p2)
{
int i;
long *lp1=p1,*lp2=lp2;
for(i=0;i<4;i++,lp1++,lp2++)
*lp1=*lp2;
}

きちんとコピーされる保証はない?


219 :218:02/11/10 20:36
元データ示した方がいいか。
long = 4バイトとして、
char p1[1024],p2[]="aaaaaaaaaaaaaaa";
これでfunc(p1,p2);を呼ぶ

220 :デフォルトの名無しさん:02/11/10 20:37
>>218
いったい何をやりたいコードなのか?

221 :218:02/11/10 20:37
*lp2=lp2;のところは*lp2=p2;に修正

222 :デフォルトの名無しさん:02/11/10 20:38
>>218
保証はないね。

223 :218:02/11/10 20:38
>>220
long=4バイトとして、p1にp2を16バイトコピー

224 :218:02/11/10 20:39
この前のmemcpy論争はこういうものだったはずなんだが・・・

225 :JPS ◆M0LaMzf5rY :02/11/10 20:39
なんでvoid*?
きゃらにしとけや
あとなんでforの条件が<4なの?
さらに*lp1++=*lp2++;
これでいいんでない?

226 :デフォルトの名無しさん:02/11/10 20:40
>>222
どのあたりが?

227 :デフォルトの名無しさん:02/11/10 20:40
x86のglibcのmemcpyのソースを見てみた。
32バイト以下、またはsrc, dstどちらかが4バイト境界に整列して
いないならば、バイト単位でコピーしてる。
32バイトより大きくて、両方が4バイト境界にそろっている場合のみ
ワード単位でコピーしてる。

228 :デフォルトの名無しさん:02/11/10 20:41
>>226
char配列の先頭番地が、long境界に整列しているという保証はない。

229 :デフォルトの名無しさん:02/11/10 20:48
アライメント違反例外が発生してもOSが対処してくれるかもしれないが、
いずれにしても処理系依存だな。

230 :デフォルトの名無しさん:02/11/10 20:49
>>229
そうだね。
あと、もし1回の読み書きごとに例外が起きてOSに落ちたら、
恐ろしく遅くなるね。

231 :デフォルトの名無しさん:02/11/10 20:49
>>229
そう言う処理系ではコンパイラがwarning出すと思うよ。

232 :デフォルトの名無しさん:02/11/10 20:50
ととと.


233 :デフォルトの名無しさん:02/11/10 20:51
つーつーつー.

234 :デフォルトの名無しさん:02/11/10 20:51
ととと.



235 :デフォルトの名無しさん:02/11/10 20:51
>>231
void *との間のキャストでは警告の出しようがないだろう。

236 :デフォルトの名無しさん:02/11/10 20:51
>>170見て思ったけど、
char一文字の領域のアドレスが整列化で語アドレスになるのは分かるが
charの連続した領域はバイト単位で詰め込まれるんじゃないの?
(alignment restrictionがあったとしても。)
少なくとも俺の環境ではバイト毎だった。
そうならないアーキテクチャがあるってこと?
それとも全く別の理由で>>170は叩かれてるの?
ちょっと教えて欲しい。


237 :デフォルトの名無しさん:02/11/10 20:52
>>236
ひとめで知ったかとわかる(w

238 :デフォルトの名無しさん:02/11/10 20:55
>>236
もちろん
char array[sizeof(int)];
で、array[0], ..., array[3]は連続したアドレスに割り当てられる。
それは規格で保証されている。
問題は、たとえばintを4の倍数アドレスに置かないとロードやストアが
できないCPUで、array[0]が4の倍数アドレスに置かれる保証がないことだ。

239 :デフォルトの名無しさん:02/11/10 20:56
>>236=>>170

240 :デフォルトの名無しさん:02/11/10 20:57
>>238
じゃあint *ip=malloc(sizeof(int));ってやって、ipが4の倍数のアドレスじゃなかったら、*ip=1024;とかできないってこと?
そういう処理系では必ずmallocは4の倍数のアドレスを返してくれるとか?

241 :デフォルトの名無しさん:02/11/10 20:57
>JPS
わからないんだったら、とりあえず、見とけ。
議論をさえぎらないでくれ。

215の「燃料注入してるつもりか?」は火に油を注ぐと言う意味だ。

#・・あとで、ゆっくりググルか、落ち着いた頃にスレを読みなおせば
#わかるはずです。




242 :デフォルトの名無しさん:02/11/10 20:58
>>240
mallocは常に適切に整列された結果を返す。
そうでない処理系は規格違反。

243 :デフォルトの名無しさん:02/11/10 21:01
こ、これが週末のCスレというものなのか・・・・!!

244 :デフォルトの名無しさん:02/11/10 21:01
>>238
じゃあint iと宣言した領域をcharの配列として使うのはOK?

245 :デフォルトの名無しさん:02/11/10 21:01
>>237
氏ね。

>>239
違うよ。

>>238
なるほど。


246 :デフォルトの名無しさん:02/11/10 21:04
ということはmemcpyに与えたアドレスが4の倍数じゃなかったら、いきなりlongバイトごとコピーすることはできないってわけか。

247 :デフォルトの名無しさん:02/11/10 21:04
>>244
それはOK。でないとmemcpy等にint *を渡せなくなる。

248 :JPS ◆M0LaMzf5rY :02/11/10 21:05
>>245
ワロタ
傍観者JPSです。すぱーーーー

249 :デフォルトの名無しさん:02/11/10 21:06
>>246
できない。
x86では境界に整列していなくても読み書きできるが、激しく遅くなるので
やらないほうが良い。

250 :デフォルトの名無しさん:02/11/10 21:08
volatile
大活躍。

251 :デフォルトの名無しさん:02/11/10 21:09
>>249
そうか。またひとつ賢くなったよ。ありがとう。
>>170はchar配列じゃなくてchar *にmalloc(sizeof(int))を入れるようにすればOKなんだろうな。

252 :デフォルトの名無しさん:02/11/10 21:11
(ちょっと見ない間にこんなにスレが伸びてしまった。)
>>204
>>「整数へのポインタ」と「整数の配列」
>=>int a;(int a[1];)
>==>int *a_p;
>
>>「整数の配列の配列」
>=>int b[10][10];
>==>int **b_p;
>
>a_pとb_pの違いのことを言っているのか??

そうです。b_pはなぜint *じゃないのでしょう?
あれ、でもint **とするとコンパイラに怒られますが。

253 :JPS ◆M0LaMzf5rY :02/11/10 21:15
>>252
配列は式の中ではポインタに読み替えられる!
三つの例外を除いて・・・。


254 :JPS ◆M0LaMzf5rY :02/11/10 21:16
でも配列とポインタは違う・・・
ここが難しい!!

255 :デフォルトの名無しさん:02/11/10 21:17
くいず:
for (i=0;i<N;i++) for (j=0;j<N;j++) a[i][j]=0;
こうすると、a[i][j]の全体(N*N個の整数)がきちんとクリアされるという。
なのに、a[i][N-1]とa[i+1][0]の番地は並んでいないという。
なぜか?

256 :デフォルトの名無しさん:02/11/10 21:18
>>「整数の配列の配列」
>=>int b[10][10];
>==>int **b_p;

bの型はint **じゃないだろう。

257 :デフォルトの名無しさん:02/11/10 21:18
int **ってすると「int型へのポインタの配列」へのポインタになるの。
配列とは限らんが。

258 :デフォルトの名無しさん:02/11/10 21:20
>>255
コンパイラが並ばないようにしたから

259 :JPS ◆M0LaMzf5rY :02/11/10 21:21
>>256
>>252はb_pのことを言ってるんだろ?

260 :デフォルトの名無しさん:02/11/10 21:21
>>258
ぶぶー、はずれ。

261 :JPS ◆M0LaMzf5rY :02/11/10 21:22
>>255
んなこたーない

262 :デフォルトの名無しさん:02/11/10 21:24
コンパイラじゃなかったら誰がそうするんだろ・・・・

263 :デフォルトの名無しさん:02/11/10 21:24
答:
int *a[N];
for (i=N-1;i>=0;i--) a[i]=calloc(N, sizeof(int));


264 :デフォルトの名無しさん:02/11/10 21:25
>261
a[i]がポインタで別々のところのポインタが入っていればそうなるよ。

265 :デフォルトの名無しさん:02/11/10 21:26
>>263
そのコードを実行できる形にするのはコンパイラだろ?
>>258で合っているじゃん。まともな回答じゃないが。

266 :デフォルトの名無しさん:02/11/10 21:26
えーと^_^;)
指している先が「整数の箱(1つ)」でも「整数の配列」でも
int *だというのは何となくわかりました。
でも、そうすると「整数の配列の配列」も同じ理屈で
int *でよいと思うんですが、なぜ違うのでしょう?

267 :JPS ◆M0LaMzf5rY :02/11/10 21:27
俺の環境じゃ、配列の添え字は定数でないとだめなんだよ・・

268 :デフォルトの名無しさん:02/11/10 21:27
>>263
calloc使うなら0に初期化する処理は無駄だね。

269 :デフォルトの名無しさん:02/11/10 21:27
>>265
コンパイラはa[i][N-1]やa[i+1][0]のメモリを割り付けていない。

270 :デフォルトの名無しさん:02/11/10 21:27
整数の配列 a[N];
って宣言するの。

271 :デフォルトの名無しさん:02/11/10 21:28
>>264
a[i]がポインタじゃないときってどんな時なんですか?

272 :デフォルトの名無しさん:02/11/10 21:28
>>260
ただの仕様だろ。並べなきゃいけないってしちゃったら、メモリを連続させて確保するコストがかかるから。


273 :デフォルトの名無しさん:02/11/10 21:29
>>268
途中でクリアすることもあるんでは?
…ってそういうことを問題にしたわけじゃない(w

274 :デフォルトの名無しさん:02/11/10 21:29
>>272
ポインタ配列を用意して、そこにmalloc,callocで得た領域を入れるんだってさ・・・

275 :デフォルトの名無しさん:02/11/10 21:29
>>271
int a[N][N];
この場合はa[i]は使えないのかな。

276 :JPS ◆M0LaMzf5rY :02/11/10 21:31
てかこんな話つまんないYO!

277 :デフォルトの名無しさん:02/11/10 21:32
typedef int hoge[N];
hoge a[N];

278 :デフォルトの名無しさん:02/11/10 21:33
int a[N][N];
と宣言したら、必ずa[i-1][N-1]の次にa[i][0]が並ぶ(i=1..N-2)。
int *a[N];
で、a[i]を動的に確保したら、a[i-1][N-1]とa[i][0]の間は
(重なっていないということを除いて)どういう関係があるかわからない。

ちなみに、確保するのはcalloc(またはcallocから呼び出される下位ルーチン)だ。
コンパイラじゃない。

279 :デフォルトの名無しさん:02/11/10 21:34
>>278
callocのソースをコンパイルするのはコンパイラ

280 :279:02/11/10 21:35
まあ別にCで書かなくてもいいが

281 :デフォルトの名無しさん:02/11/10 21:35
>>279
コンパイルするのはコンパイラだな。
でもコンパイラが確保するわけじゃない。

282 :279:02/11/10 21:36
>>281
まあいいか。
ところで、さっきのクイズはオリジナル?

283 : ◆JWPaeN65Rw :02/11/10 21:38
こんな感じの説明で、どうでしょう?

「【整数 int a 】の配列」
int a[10];
int *a_p;

「【整数の配列 int b[5] 】の配列」
int b[5][10]
int *(b_p[5]);

とうぜん、b_pの型は、int *だから、

int *(*b_p);

ってなる。






284 :デフォルトの名無しさん:02/11/10 21:39
く〜いず!
void mult(double a[N][N], double b[N][N], double c[N][N]) {
int i, j, k;

for (i = 0; i < N; i++) for (j = 0; j < N; j++) {
a[i][j]=0.0;
for (k = 0; k < N; k++)a[i][j] += b[i][k] * c[k][j];
}
}
これを速くしようと、
void mult(double a[N][N], double b[N][N], double c[N][N]) {
int i, j, k;

for (i = 0; i < N; i++) for (j = 0; j < N; j++) {
double sum = 0.0;
for (k = 0; k < N; k++) sum += b[i][k] * c[k][j];
a[i][j] = sum;
}
}
と書き換えたら、実行結果が変わってしまったという。なぜ?

285 :283 ◆JWPaeN65Rw :02/11/10 21:39
>266
です。

286 :デフォルトの名無しさん:02/11/10 21:40
>>283
b_pはint [5]の大きさをもつ配列へのポインタでしょ?int **b_pにはならないでしょ。


287 :デフォルトの名無しさん:02/11/10 21:41
>>283
ちょっとまて。
*b_p は整数だと思うんだが。

288 :デフォルトの名無しさん:02/11/10 21:41
>>284
Nってなんだよ?マクロか?

289 :284:02/11/10 21:42
>>288
あー、はい。
#define N 100
くらいの適当な定数と思ってくらさい。

290 :デフォルトの名無しさん:02/11/10 21:42
int a[N][N];
って宣言したらスタック上に確保されるだろうが。
どうしてcallocが関係あるんだ?

291 :デフォルトの名無しさん:02/11/10 21:43
int *(b_p[5]);はint型のポインタの配列じゃない?

292 :デフォルトの名無しさん:02/11/10 21:43
>>289
こういうところしっかりしておかないとな。つっこみ問題は。
まあ定数じゃなかったらコンパイルエラーになるが

293 :292:02/11/10 21:43
つっこみ問題ってなんだよ。
引っかけ問題だな。

294 :デフォルトの名無しさん:02/11/10 21:43
>>290
ネタなのか真正DQNなのかはっきりしる!

295 :286:02/11/10 21:44
>>291
あーint (*b_p[5])と見間違えた。
うん、ポインタ配列だね。int **にいれられる。

296 :295:02/11/10 21:45
ポインタ配列なら括弧をつけるなヴォケェ
まぎらわしいんじゃ!

297 :JPS ◆M0LaMzf5rY :02/11/10 21:45
>>286
int b[5]={1,2,3,4,5};
int *b_p=b;

この時、*b_pもb_p[0]も式の中では1となるしょ?
int **b_pになるべ。あら・・・

298 :295:02/11/10 21:46
s/int (*b_p[5])/int (*b_p)[5]/

299 :JPS ◆M0LaMzf5rY :02/11/10 21:47
>>296
わかりやすくしてんだろヴォケェ

300 :295:02/11/10 21:48
>>299
でも
int b[5][10]
int *(b_p[5]);
とやったら
b_p=bってのはできないよ。

301 :デフォルトの名無しさん:02/11/10 21:50
>>284
mult(a, a, c);ってやってたくらいしか思いつかんな。

302 :266:02/11/10 21:50
よくわかりません。
int *ip, i;
int *ap, array[10];
ip = &i; ap = array;
*ipも*apも整数の値が出てきますよね。

int b[5][5];
のとき
int *bp1 = b;も int **bp2 = b;もコンパイラに怒られます。
*bp1とすると整数が取り出せるんだから、int *で良いような気がするのですが。
それとも、*bp2とすると、どこかへのポインタが得られるんでしょうか?

303 :デフォルトの名無しさん:02/11/10 21:51
>>301
正解!
bかcがaと重なっていた。

304 :デフォルトの名無しさん:02/11/10 21:59
>>302
hogeのポインタ = hogeの配列 はできると思ってくれ。
intの配列の配列 が b。
intのポインタ にも
intのポインタのポインタ にも 代入できない。

305 :デフォルトの名無しさん:02/11/10 22:00
>>238
しかしどうしてそう言う風になってるんだろう。


306 :デフォルトの名無しさん:02/11/10 22:03
くーーーいーーーーず!
あるプログラムでは、大量のunsigned longの配列を
calloc(N, sizeof(unsigned long))で確保している。

プログラマが、配列の内容は実は全てunsigned charで十分あらわせる
範囲だと気づき、unsigned longを全部unsigned charに直したが、
消費するデータ領域はちっとも減らなかったという。なぜ?

307 :デフォルトの名無しさん:02/11/10 22:04
>>302
int (*bp3)[5];

一つ言えるのは、こんな重箱の隅な知識覚えても何の役にも立たないということだ。

308 :デフォルトの名無しさん:02/11/10 22:05
sizeof(unsigned long) == sizeof(unsigned char)

309 :デフォルトの名無しさん:02/11/10 22:06
>>305
char の配列を宣言してるからでしょ。サイズはintだけどintじゃないから

310 :デフォルトの名無しさん:02/11/10 22:06
>>305
doubleとして扱われるかもしれないからって、char配列を全て
double境界に整列する仕様のほうが良いか?
「そんな使い方しないから詰めて割り当ててくれ」という人も
多いんじゃないか?

311 :デフォルトの名無しさん:02/11/10 22:07
>>308
……正解。簡単すぎたか。

312 :デフォルトの名無しさん:02/11/10 22:08
>>308
そんな処理系あんのか?charはちっちゃくしとけよ。

313 :デフォルトの名無しさん:02/11/10 22:09
>>308
実際に存在するのか?

314 :デフォルトの名無しさん:02/11/10 22:10
>>312
intは16bit以上だと規格で決まっていると言っている人が何人かいたけど、1バイト=16bitならsizeof(long)==sizeof(char)になってもおかしくはないよな。

315 :308:02/11/10 22:11
ないと思う。規格上は可能ってだけで。

316 :デフォルトの名無しさん:02/11/10 22:11
お前らの悪いところは

規格、仕様と言いながらソースを示さないこと

だろうな。
おかげでアホな間違いとかも散見される。

317 :デフォルトの名無しさん:02/11/10 22:11
TM320x0シリーズでは、メモリは32ビット単位でしかアクセスできない。
番地も32ビットごとについている。
なので、Cではsizeof(char) == sizeof(int) == sizeof(long)

318 :デフォルトの名無しさん:02/11/10 22:12
>>317
それか!
以前charだろうがintだろうがみんな32bitの環境でプログラミングしていると言っている人がいた。

319 :デフォルトの名無しさん:02/11/10 22:13
>>314
longは32bit以上じゃなかったっけ?

320 :317:02/11/10 22:15
まちがいた
×TM320x0シリーズ
○TMS320シリーズ

321 :デフォルトの名無しさん:02/11/10 22:15
みんなで64bitになって幸せになろう。

322 :317:02/11/10 22:16
charが32ビットなら多言語対応も楽そうだ。

323 :デフォルトの名無しさん:02/11/10 22:23
age

324 :デフォルトの名無しさん:02/11/10 22:24
>>322
当面16bitでいいじゃん。どうせUnicodeは当分BMPしかつかわんでしょ。

325 :デフォルトの名無しさん:02/11/10 22:26
(゜∀゜)ビトマーップ


326 :デフォルトの名無しさん:02/11/10 22:27
(゜∀゜)ビトマーップ

327 :那由多 ◆F4E74ZBQPA :02/11/10 22:28
>302
@配列ってのは、アドレス順にあるもんが並んでいることを言います。
A[整数]の配列といったら、下のようなイメージです。
a[4]={14,15,16,17};
aのアドレス->値
100     ->14
101     ->15
102     ->16
103     ->17
B[整数の配列]の配列といったら、下のようなイメージです。
b[2][3]={{10,20}.{11,21},{12,22}};
bのアドレス->値
200     ->100
201     ->102
202     ->104
#2個飛びのアドレスが格納される。
ちなみに、次のアドレスには
100     ->10
101     ->20
102     ->11
103     ->21
104     ->12
105     ->22
Cint **というのは、ポインタの配列を表していますが、2個飛びのアドレスが
入るということまで、わからないのです。
したがって、int **bp2=bとするエラーになる。
D>307のように書けば、いくつ飛びのアドレスが入るかが、わかるので、
うまくいくはず。
#手元にコンパイラが無いので、確認できん、スマソ。

328 :デフォルトの名無しさん:02/11/10 22:34
>>327
まて、多次元配列はメモリー上に直行的に並ぶはずだぞ。

329 :デフォルトの名無しさん:02/11/10 22:39
>>327
そんな無茶な。
いつから勝手にポインタ配列にしてくれるようになった?

330 :デフォルトの名無しさん:02/11/10 22:39
なぜコテハンに限ってDQNなんだろう…

331 :那由多 ◆F4E74ZBQPA :02/11/10 22:41
スマン、逝ってくる。

332 :デフォルトの名無しさん:02/11/10 22:44
>319
そだな。
charは8bit
intは16bit
longは32bit
が最低保証されているから CHAR_BIT = 16ならば
sizeof(char) = sizeof(int) までだな。

ちなみに、charは参照可能な最小単位を定義しているので、sizeof(char)は必ず1を返す。
他の型のsizeofはcharの何倍かを返すんだとさ。

333 :デフォルトの名無しさん:02/11/10 22:46
> charは8bit
ダウト。

334 :デフォルトの名無しさん:02/11/10 22:47
>>333
じゃあ正解は?

335 :デフォルトの名無しさん:02/11/10 22:50
sizeof(char)=1って事だけだろ。

336 :デフォルトの名無しさん:02/11/10 22:52
char:1バイト


337 :デフォルトの名無しさん:02/11/10 23:02
>>335
SCHAR_MINは-127以下SCHAR_MAXは127以上が保証されているハズだぞ。
他の型も同様にビット数ではなくて値の範囲で定義されているのだが。
-側が128でないのは1の補数マシンへの配慮だと思われる。


338 :デフォルトの名無しさん:02/11/10 23:10
すいませんがちょっと教えてください。
見ていたPGの中にこのような処理があったのですが、これはどのくらい値に差があるときに成り立つのでしょうか?
10倍ぐらいでしょうか?

if(num >> 4) {
}

339 :デフォルトの名無しさん:02/11/10 23:12
2^4=16


340 :デフォルトの名無しさん:02/11/10 23:14
num >> 4 は右シフト
num / 16 16以上ってこと。

341 :デフォルトの名無しさん:02/11/10 23:14
>>338

>>が何の演算子かまず調べたまえ。
比較演算子ではないぞ。

342 :338:02/11/10 23:20
>>340 , 341
>>は16以上のときなのでしょうか?
300 >> 4
だったらTRUEで、

15 >> 4
だったらFALSEと考えていいのでしょうか?

343 :デフォルトの名無しさん:02/11/10 23:21
>>342
だから、比較じゃないって。数学の>>とは別の意味。
手元の参考書に載ってなければ、すぐさま別の本を買ってきて読め。

344 :デフォルトの名無しさん:02/11/10 23:23
>>342
比較じゃないってば。
300 >> 4 は 30/16 で
15 >> 4 は 15/16 だ。

345 :デフォルトの名無しさん:02/11/10 23:27
>>338

「>>」は超比較演算子と言って上級者でも殆ど使わない演算子だから
覚えなくても良いよ。
実は2chで相手の番号をレス番号を指す時の「>>」も、この演算子が由来なんだよ。


346 :デフォルトの名無しさん:02/11/10 23:28
338はnetaっぽいな.

347 :デフォルトの名無しさん:02/11/10 23:42
処理系依存をうるさく言うやつがいるけどさ、
コンパイラが規格に準拠しているかどうかということ自体、処理系依存だよな。


348 :338:02/11/10 23:47
>>343 , 344
わかりました。割り算ということですか?
300 >> 4 => 30 /16
15 >> 4 => 15/16

左辺は2乗したもので割ればいいのでしょうか?
右辺の法則がちょっとわからないのですが。

349 :JPS ◆M0LaMzf5rY :02/11/10 23:48
>>344
300>>4
300/2^4ではないんでつか?

350 :デフォルトの名無しさん:02/11/10 23:49
ビットをシフトさせるの。
11110000 >> 4 だったら
00001111 になる。
00001111 >> 4 だったら
00000000 になる。

351 :デフォルトの名無しさん:02/11/10 23:50
>>348
4ビット右シフトは1/2^4
2進の環境下で4桁右にずらすんだからね。
あ、アンダーフローは考えないで



352 :351:02/11/10 23:51
違う違う、、、
あ、アンダーフローは考えないで ←これは間違いだ

353 :デフォルトの名無しさん:02/11/10 23:52
多分、348は 2進数を知らないんだと思う。

354 :338:02/11/10 23:52
>>350 , 351
わかってきました。
右にビットをずらしていくのですね。ぜんぜんイメージと違っていました。
一番左のビットには必ず0がくると考えていいのでしょうか?

355 :351:02/11/10 23:53
>>354
論理シフトなら0で埋められる。
算術シフトの場合は符号ビットとおなじもので埋められる

356 :JPS ◆M0LaMzf5rY :02/11/10 23:55
>>355
その二つで決定的な違いってある?
実際プログラムつくるときに

357 :デフォルトの名無しさん:02/11/10 23:59
論理シフトって繰り返しやれば最終的に元の値は必ず0になるよね?

358 :デフォルトの名無しさん:02/11/11 00:02
bit数やればなるんじゃない?

359 :デフォルトの名無しさん:02/11/11 00:04
>>358
さんきゅ

>>356
例えばwhile(a<<=1) ;とかwhile(a>>=1) ;なんてやった場合、論理シフトじゃないと無限ループになる可能性がある

360 :338:02/11/11 00:05
>>355
算術シフトと論理シフトの違いってなんでしょうか?
算術シフトが符号で埋められるというのは、
10001001 >> 2 => 11100010
00001001 >> 2 => 00000010
ってことでしょうか?

361 :デフォルトの名無しさん:02/11/11 00:06
signedの右シフトは処理系定義。


362 :デフォルトの名無しさん:02/11/11 00:08
算術シフトって「1の補数」をと取るんでしょ。

363 :デフォルトの名無しさん:02/11/11 00:08
>>360
そう。
算術左シフトは符号ビットは変わらず他のビットが左にずれる。空いたところには0が入る。
論理左シフトは全ビット左にずれる。空いた領域には0が。

364 :デフォルトの名無しさん:02/11/11 00:09
>>361
そうだね。算術シフトになるか論理シフトになるかは処理系による。
Javaだとそれぞれ別の演算子がある。

365 :デフォルトの名無しさん:02/11/11 00:09
>>361
論理シフトや算術左シフトは?

366 :365:02/11/11 00:11
なんか変だな。
unsignedのシフトや、signedの左シフトは?

367 :デフォルトの名無しさん:02/11/11 00:11
>>362 ネタか?突っ込んでやらない。

>>365 左シフトに論理も算術もない。

368 :デフォルトの名無しさん:02/11/11 00:12
ビットソートについて教えてください。

369 :デフォルトの名無しさん:02/11/11 00:12
>>367
> 左シフトに論理も算術もない。

???

370 :デフォルトの名無しさん:02/11/11 00:13
左シフトは2の羃乗の乗算に等しい。
オーバーフローは無視。


371 :デフォルトの名無しさん:02/11/11 00:14
>>369
初心者か? ならわかりやすく説明しよう。
左シフトだと右から新たなビットが入ってくる。
論理シフトだと考えれば0が入ってくる。
算術シフト(2倍)だと考えれば、正負によらず常に0が入ってくる。
どちらでも同じ。

372 :363:02/11/11 00:14
もしかして>>363は間違っているのか?

373 :363:02/11/11 00:15
>>371
入るのは0だが、算術か論理によって符号ビットがずれるかずれないか変わると思っていたんだけど。

374 :デフォルトの名無しさん:02/11/11 00:18
>>363
やってみれば。
そういう動作は聞いたことがない。

375 :デフォルトの名無しさん:02/11/11 00:19
実際、javaには>>>(算術右シフト)はあっても<<<は存在しない。

376 :デフォルトの名無しさん:02/11/11 00:31
signedかつnegativeな整数に対する左シフトの振る舞いは未定義。
signedかつnegativeな整数に対する右シフトの振る舞いは実装定義。


377 :376:02/11/11 00:32
あ、上の一行は間違い。失礼。


378 :デフォルトの名無しさん:02/11/11 00:33
算術シフトは最上位ビットが1のとき、右シフトすると1が入ってくるよ。

379 :デフォルトの名無しさん:02/11/11 00:33
ttp://www.jtw.zaq.ne.jp/kayakaya/new/kihon/text/shift.htm

380 :デフォルトの名無しさん:02/11/11 00:34
#include <stdio.h>
void main() {
int n = 0x80ffffff;
printf("%d\n", n);
printf("%x\n", n);
printf("%d\n", n << 4);
printf("%x\n", n << 4);
printf("%d\n", n >> 4);
printf("%x\n", n >> 4);
}

381 :デフォルトの名無しさん:02/11/11 00:40
>>377
signedつーか負数だろ

382 :デフォルトの名無しさん:02/11/11 00:41
だからnegativeって書いてあるだろ。

383 :もまずにパピコ:02/11/11 00:42
>>379
その算術左シフトおかしいぞ。
8ビットの-128(10000000B)を左シフトしたら、その説明では-128のままになってしまう。

384 :デフォルトの名無しさん:02/11/11 00:42
ああ、nativeと読み間違えてた。スマソ

385 :デフォルトの名無しさん:02/11/11 00:43
>>383
0をいくらシフトしても変わらないのと同じじゃないの?

386 :デフォルトの名無しさん:02/11/11 00:44
int i, a1[10], a2[10][5];

int へのポインター
*(&i) = 1;
*(&a1[0]) = 1;
*(&a2[0][0]) = 1;

int[] へのポインター
*(&a1) = 1; → NG:配列に整数は代入できない
*(&a2[0]) = 1; → NG:配列に整数は代入できない

int[][5] へのポインター
*(&a2) = 1; → NG:5つの要素を持つ配列の配列に整数は代入できない

関数呼び出しの引数に現れた場合
a2 == &a2[0][0] 
a1 == &a1[0]


387 :デフォルトの名無しさん:02/11/11 00:46
nを4bit左シフトしたらnはn*2^4になるんだよね?
負の数の場合、符号ビットが変わったらまずいと思うんだけど。
負の数に正の数をかけても負の数のままのはずなのに、符号ビットまでうごいたら正の数になってしまう

388 :デフォルトの名無しさん:02/11/11 00:46
>>363
やってみろよ?

11111111 << 1 = 1111110 だな。論理シフトでも同じだな。
10000001 << 1 = 1000010 になるとしたらこれは算術的に正しいのか?

因みにx86のアセンブラレベルでも論理左シフトと算術右シフトは同じものだぞ。

389 :JPS ◆M0LaMzf5rY :02/11/11 00:47
要するに負の整数にはビット演算するなって事だよね。
自分の処理系が論理か算術か確かめる方法ある?

390 :デフォルトの名無しさん:02/11/11 00:47
スマン。
算術左シフトな。

391 :JPS ◆M0LaMzf5rY :02/11/11 00:47
あ、やってみりゃいいんだw


392 :デフォルトの名無しさん:02/11/11 00:48
>>383
それが算術シフトだろ。

393 :387:02/11/11 00:49
正の数になってしまう"ことがある"

394 :JPS ◆M0LaMzf5rY :02/11/11 00:50
今日で前橋歴10日だよ・・・
ぜんぜんわかんないけどさ。

395 :デフォルトの名無しさん:02/11/11 00:51
皆さんすみません、何度か質問させていただいているものですが、
またひとつ質問させてください。
変数の宣言はコードブロックの先頭でできますから、たとえば
int main(void) {
int i;
for (i = 0; i < 100; i++)
{
int k; <--これ
処理〜;
}
return 0;
}
なんて書き方や、
int main(void) {
int i;
処理〜
{
int k; <--これ
処理〜
}
return 0;
}
なんて書き方ができますよね。
これって、そもそも一般に通用するものなのでしょうか?
通用するとしたら、「良い書き方」「悪い書き方」なのでしょうか?教えてください。


396 :JPS ◆M0LaMzf5rY :02/11/11 00:53
そういやさ、Cで8進表記は012とか0をつけるんだよね?
O(オウ)じゃないよね?
でもprintfの型指定市は%oだよね?
ちがったけ?

397 :デフォルトの名無しさん:02/11/11 00:54
>>397
O12とやったら変数などと見分けがつかなくなるだろ。

398 :397:02/11/11 00:54
レス先間違えた
>>396

399 :JPS ◆M0LaMzf5rY :02/11/11 00:55
>>395
余裕で通用する。でも俺はあんましない。宣言はとりあえず関数の直後でやっちゃう。
でもたとえばwhileの2重ループとかで、毎回値を初期化する必要があるときとかはやるかな。
まあそれもfor使えばいいし。

400 :デフォルトの名無しさん:02/11/11 00:55
悪い書き方でしょ。
for(〜){int k;〜}for(〜){int k;〜}
とプログラム書いてみ。エラー出すこともある。


401 :JPS ◆M0LaMzf5rY :02/11/11 00:56
>>397
そうだね。サンクス

402 :デフォルトの名無しさん:02/11/11 00:56
>>400
なんで?

403 :JPS ◆M0LaMzf5rY :02/11/11 00:56
>>400
エラー出すことあんの!?

404 :デフォルトの名無しさん:02/11/11 00:56
算術シフトと論理シフトの勉強し直した方が良いよ!

405 :JPS ◆M0LaMzf5rY :02/11/11 00:57
>>404
俺にいってるんでつか?

406 :デフォルトの名無しさん:02/11/11 00:57
>>396
8進数→octal

407 :デフォルトの名無しさん:02/11/11 00:58
>>395
そんなに悪いとも思わないけど。
範囲がわかるし。長いんなら別関数にすれば?

408 :JPS ◆M0LaMzf5rY :02/11/11 00:59
>>406
そうだったのか!なにげに英語分かったら覚えやすいよね。
おれなんかstdio.hのことステディオとか言ってたから・・・
スタンダードインプットアウトプットだよね?

409 :デフォルトの名無しさん:02/11/11 00:59
基本情報処理試験のCASLIIには左シフトにも論理と算術があるな。

410 :デフォルトの名無しさん:02/11/11 00:59
左シフトについて、規格を確かめたら:
E1 << E2でE1がunsigned typeなら、
シフトの結果は(E1 * (2のE2乗)) mod (E1が表せる最大の値 + 1)

E1がsignedかつ非負かつE1 * (2のE2乗)が元の型で表現できるならこの値。

それいがいの場合は(なんと)未定義動作だと。

よって、負の数を左シフトしたら間違い。


411 :デフォルトの名無しさん:02/11/11 01:00
>>408
え?ストゥドゥアイオーじゃないの?

412 :デフォルトの名無しさん:02/11/11 01:00
Standard I(input)/O(output).
Octopus.(image)

413 :JPS ◆M0LaMzf5rY :02/11/11 01:00
>>409
まじ!?俺春受けるんだけど・・・
でも選択でCとればいいよね?
てかさ、秋用の参考書買ったんだけど、これ来春にも通用する?

414 :デフォルトの名無しさん:02/11/11 01:01
>>410
>>376で既出

415 :デフォルトの名無しさん:02/11/11 01:01
すまん、やっぱこれで良い。
signed_negative左シフトは未定義
signed_negative右シフトは処理系定義



416 :デフォルトの名無しさん:02/11/11 01:01
>>408
日本語では標準入出力

417 :JPS ◆M0LaMzf5rY :02/11/11 01:02
>>411
( ̄□ ̄;)!!
俺は「スタンダード・アイ・オー」って言ってる・・・
はずかちい・・・

418 :デフォルトの名無しさん:02/11/11 01:02
>>395
賛否両論あるね。というより、一長一短か。
短所は、コードを読んだ時に変数をどこで
定義しているかわかりにくい。

419 :JPS ◆M0LaMzf5rY :02/11/11 01:03
>>411
ていうかストゥドゥってなに?
スペルは?

420 :デフォルトの名無しさん:02/11/11 01:03
>>415
> signed_negative左シフトは未定義

これホントなの?



421 :デフォルトの名無しさん:02/11/11 01:03
>>410
俺も未定義って見て驚いたので間違ってないか何度も読み直したが
どうやら本当らしい。


422 :デフォルトの名無しさん:02/11/11 01:04
october

423 :デフォルトの名無しさん:02/11/11 01:04
>>421
どこで見たの?

424 :JPS ◆M0LaMzf5rY :02/11/11 01:04
>>418
でもこういう書き方しなきゃ出来ないことってある?
for使えば出来ると思うんだけど。
プログラムの中身じゃなくて、見た目の問題?

425 :デフォルトの名無しさん:02/11/11 01:05
>>424
変数のスコープは最小限に絞るべきっていう考え方もあるから...

426 :デフォルトの名無しさん:02/11/11 01:05
>>420
そりゃそうさ。
処理系によって
負数の表現が2の補数とは限らない。

427 :デフォルトの名無しさん:02/11/11 01:05
>>423
俺はc99で見た。


428 :デフォルトの名無しさん:02/11/11 01:06
白熱しておりますな

429 :もまずにパピコ:02/11/11 01:06
>>409
ゲーーーーーッ! ほんとだ!
さっきのページはシスアドだったからあれで合ってるんだ……

でも80x86もZ80もそんな動きしないよな…

430 :デフォルトの名無しさん:02/11/11 01:06
じゃあ負数へのかけ算はシフトをつかって実現してはならないの?

431 :デフォルトの名無しさん:02/11/11 01:06
ttp://vlsilab.ics.es.osaka-u.ac.jp/~k-ueda/memo/memo.html

432 :JPS ◆M0LaMzf5rY :02/11/11 01:09
>>430
俺の持ってる本にはそう書いてあるぞ。
まあ、俺の場合それ以前にシフト演算なんてしないわけだが

433 :デフォルトの名無しさん:02/11/11 01:09
>>430それだけじゃなくsigned使うときにはsign心の注意を払わないといけない。

434 :デフォルトの名無しさん:02/11/11 01:09
ttp://black.sakura.ne.jp/~third/assembly19.html

435 :JPS ◆M0LaMzf5rY :02/11/11 01:09
>>433
(゚д゚)ウマー

436 :デフォルトの名無しさん:02/11/11 01:10
>>432>>433
まじかよ・・・
じゃあループで足し込むしかないの?

437 :デフォルトの名無しさん:02/11/11 01:10
>>431
左シフトは算術も論理も一緒になってるな。

438 :420:02/11/11 01:10
うひゃー、未定義知らんかった〜。
とりあえず左シフトはunsignedまたは定数
でしかやった覚えないけど。勉強になりますた。

439 :JPS ◆M0LaMzf5rY :02/11/11 01:11
なんだなんだ!?お勧めサイトの紹介か!
コソコソ・・http://kuroneko22.cool.ne.jp/

440 :デフォルトの名無しさん:02/11/11 01:11
掛けたあとが範囲内ならシフトしていいんじゃないの?

441 :デフォルトの名無しさん:02/11/11 01:12
>>437
どこに目をつけてんだYO!

442 :JPS ◆M0LaMzf5rY :02/11/11 01:12
>>413
誰か答えて・・・

443 :デフォルトの名無しさん:02/11/11 01:12
掛け算をシフトで?
規格準拠にしたければ、絶対値を取って正の数に対してやればよいじゃん。

2の補数を仮定してよいならunsignedにキャストしてやれば良い。

444 :デフォルトの名無しさん:02/11/11 01:13
>>413
スレ違い。


445 :JPS ◆M0LaMzf5rY :02/11/11 01:14
>>444
( ̄□ ̄;)!!
( ̄□ ̄;)!!
( ̄□ ̄;)!!

446 :デフォルトの名無しさん:02/11/11 01:18
>>443
unsignedにキャストしてシフト演算したらどうなるか分かる?


447 :デフォルトの名無しさん:02/11/11 01:19
>>446
倍になる。

448 :デフォルトの名無しさん:02/11/11 01:19
1の補数表現の場合、8bitだと11111111は0になるの?

449 :395:02/11/11 01:20
皆さんレスありがとうございます。
自分もレス書きたかったのですが、
白熱した論議に割り込むこともできない未熟者ですのでご勘弁を……。

結論としては、そう書くこともできるが賛否両論(あんまりやらない)、
関数分けなどうまく使えばそうする必要もない、ということですよね?
ありがとうございました。

450 :443:02/11/11 01:20
>>446
わかるけど?

451 :デフォルトの名無しさん:02/11/11 01:22
きのうはBOOLで、今日はシフトですか?

452 :デフォルトの名無しさん:02/11/11 01:22
昨日もシフトやったよ。

453 :デフォルトの名無しさん:02/11/11 01:25
>>447
2の補数で(signed int)1011111111111111
これをunsigned intにキャストして>>1してsigned intにキャストしたら?


454 :デフォルトの名無しさん:02/11/11 01:26
たった 1 日でレスがこんなに・・・。

でも、クイズ厨うぜぇ。
ここは基本的に質問スレなんだから別スレ立ててやってくれよ。

ところで、>>284 のコードは、前者も後者も結局何も仕事をしないと思うのだがどうよ?

455 :もまずにパピコ:02/11/11 01:27
>>453
おーい… 横入りするけど右シフトは別に、未定義じゃないので、キャストしなくても、いいんじゃ、ないの。

456 :デフォルトの名無しさん:02/11/11 01:27
454=284


457 :デフォルトの名無しさん:02/11/11 01:28
>>455
処理系依存なのだが。

458 :JPS ◆M0LaMzf5rY :02/11/11 01:31
>>457
コンパイラによっちゃ負の右シフトも未定義!?

459 :デフォルトの名無しさん:02/11/11 01:32
右シフトが論理シフトになるか算術シフトになるか未定義なんじゃない?

460 :デフォルトの名無しさん:02/11/11 01:33
>>458
未定義と処理系依存をごっちゃにするなよ。
処理系依存は、処理系が確定すれば必ず動作は一定。
未定義は、本当に何が起こるかわからない。

461 :デフォルトの名無しさん:02/11/11 01:33
>>457
signed を unsigned にしたときにどうなるかも処理系依存でしょ?

462 :デフォルトの名無しさん:02/11/11 01:34
>>460
本当に何が起こるのかわからないのは不定。
未定義はその名のとおり定義されていないだけ。

463 :462:02/11/11 01:34
規格では定義されていないという意味ね

464 :454:02/11/11 01:34
>>456
死ね。

どうして誰も、284 の引数が値渡しである事に気付いていないんだ。
前者と後者のコードはまったく同じ結果になるから、クイズとして成り立っていない。

465 :デフォルトの名無しさん:02/11/11 01:35
>>462
もうネタはいいよ。

466 :JPS ◆M0LaMzf5rY :02/11/11 01:37
>>460
なるほど。あふぉですまそ。
でも右シフトの場合、論理でも算術でも結果は一緒でない?
>>459は?

467 :デフォルトの名無しさん:02/11/11 01:37
>>464
了解。はいクイズの件は終了。

468 :デフォルトの名無しさん:02/11/11 01:38
>>464
284は正解者いたよね。

469 :デフォルトの名無しさん:02/11/11 01:39
>>462
アホ。適当な事言うな。

implementation-defined,unspecifiedは実装選択の義務がある。
undefinedは無い。


470 :デフォルトの名無しさん:02/11/11 01:40
10000000 >> 4が
11111000 になるのが算術シフトで
00001000 になるのが論理シフトじゃない?

471 :デフォルトの名無しさん:02/11/11 01:41
>>462
処理系依存は、動作が確かめられればいつでも用いて良い。
未定義は、絶対に用いてはならない。

>>468
クイズとして成り立っていないなら、正解もクソも無いだろうに。

472 :デフォルトの名無しさん:02/11/11 01:41
http://www.st.rim.or.jp/~phinloda/cqa/cqa7.html

>>460>>462も間違っているようだが。

473 :JPS ◆M0LaMzf5rY :02/11/11 01:42
>>470
ごめん。左シフトだった。

474 :デフォルトの名無しさん:02/11/11 01:42
>>472
462は十分間違ってるぞ。

475 :474:02/11/11 01:43
ごめん、472を読み間違えてた。

476 :JPS ◆M0LaMzf5rY :02/11/11 01:44
>>470
ほんとだ。でもまあ>>460に近いし。
だいたい未定義なんてつくんなよ。規格できめろよANSI

477 :デフォルトの名無しさん:02/11/11 01:44
>>472
Uncertain (不定) なんて言葉が規格書にあっただろうか。

478 :デフォルトの名無しさん:02/11/11 01:44
未定義といっても処理系によっては定義されている可能性があるんじゃないの?

479 :JPS ◆M0LaMzf5rY :02/11/11 01:45
>>478
処理系によってはってとこが未定義なんだべ?

480 :デフォルトの名無しさん:02/11/11 01:45
11111000 << 4 は
10000000 になればそれでいいのだが。

481 :デフォルトの名無しさん:02/11/11 01:45
>>478
鼻から悪魔が出る処理系もあるので、うかつに使えませんが・・・

482 :デフォルトの名無しさん:02/11/11 01:46
>>479
規格では未定義でも処理系によっては定義されていることもあるんじゃないかと

483 :デフォルトの名無しさん:02/11/11 01:47
>>480
気持ちはわかるが、それは本論とは関係無い。

484 :474:02/11/11 01:47
>>472
460も間違ってる?
(処理系依存=処理系定義とすると)間違ってるとは思えないんだが。

485 :JPS ◆M0LaMzf5rY :02/11/11 01:47
っていうかさF&Aの
>未定義とは、その結果どうなるかが、言語仕様として決められていないことを意味します。
>そして、その結果がどうなっても、そのC言語の処理系はは規格に合致しているとみなされます。
ってのとさ、
>不定と未定義の最も大きな違いは、不定のコードはプログラムとしては正しいが、未定義のコードは間違いであり、
>動作する保証すらないという所にあります。
ってなんか違わない?

486 :デフォルトの名無しさん:02/11/11 01:48
>>485
F&A?藤子不二雄か?

487 :デフォルトの名無しさん:02/11/11 01:48
>>485
「動作する保証すらない」という結果になってもC言語処理系としては正しい

488 :JPS ◆M0LaMzf5rY :02/11/11 01:48
>>482
それは分かるけど。
結局移植性低いプログラムは書くなってことで。

489 :デフォルトの名無しさん:02/11/11 01:48
>>485
規格にさえ反しなければ何をしようと規格に合致していると言えるだろ
ただそれでどうなってもしらないよ。と。

490 :デフォルトの名無しさん:02/11/11 01:49
未定義とか処理系依存な命令なんか使わなきゃいいじゃん。使わないでいいし。

491 :デフォルトの名無しさん:02/11/11 01:49
何だか、JPSっつー香具師=荒らし、っつー感じなんだが

492 :デフォルトの名無しさん:02/11/11 01:50
シフトくらい使わせてくれ。

493 :JPS ◆M0LaMzf5rY :02/11/11 01:50
>>489
未定義のコードが間違いって言ってるのに、規格には準じてるって・・・
なんかすげー曖昧。これじゃ移植性がどうこうって話でなくない?

494 :JPS ◆M0LaMzf5rY :02/11/11 01:51
>>491
荒らしじゃねーよ!香具師だけど。
頭わるいけどがんばってるんだYO!

495 :デフォルトの名無しさん:02/11/11 01:51
>>493
間違いってのはプログラマが使うことが間違っているという意味だろ。
規格に反するという意味ではなく。

496 :デフォルトの名無しさん:02/11/11 01:51
>>493
逆だ。
昔のCは互換性がないほどバラバラだった。
それを無理矢理一つの企画に纏めたため、無理な動作が未定義となった。

497 :デフォルトの名無しさん:02/11/11 01:52
>>493
プログラマーが使うかとコンパイラが実装してるかどうかは別ものだろ。

498 :デフォルトの名無しさん:02/11/11 01:52
未定義は使えないが、処理系依存は使うわな。
特にその処理系に特化したカスタマイズしたい場合は。


499 :デフォルトの名無しさん:02/11/11 01:52
> これじゃ移植性がどうこうって話でなくない?

未定義のコードを書くこと自体が間違ってるんだから。
Cではそういうコードを書いてはいけないのよ。

500 :デフォルトの名無しさん:02/11/11 01:52
>>496
それもそうだし、あまりガチガチにすると様々な環境で使えなくなるんだろうね。

501 :デフォルトの名無しさん:02/11/11 01:52
プレステ2のCPUって2の補数表現じゃないって本当?

502 :デフォルトの名無しさん:02/11/11 01:53
>>498
処理系依存は使えないと、Cそのものがほとんど使えないよね。

503 :JPS ◆M0LaMzf5rY :02/11/11 01:53
>>495
でもしたらさ、結局処理系で定義してあったってそれ使うのは違うんじゃねーの?
ってかんじだべ?
そしたら処理系ごとでそれぞれ定義する必要ゼロじゃん?
でも定義してんのは使うからでしょ?
だったら規格でちゃんと決めろや( ゚Д゚)ゴルァ!

504 :デフォルトの名無しさん:02/11/11 01:53
>>490
それは間違っている。
x86 + VC++ で、ポインタや浮動小数点数の集合を ZeroMemory() を使わないで
項目事ので移入によって初期化するのは馬鹿げている。

505 :デフォルトの名無しさん:02/11/11 01:53
>>502
命令はいいとして、標準以外のライブラリを使えないとかなりきついね。

506 :デフォルトの名無しさん:02/11/11 01:54
24時間経たずに500か・・・お前ら仕事や学校あるんだろ?
俺、今朝は5時におきなきゃならんのに、


・・・回線切らずに氏ねそうです

507 :デフォルトの名無しさん:02/11/11 01:55
>>503
決められんこともあると思うが・・・

508 :JPS ◆M0LaMzf5rY :02/11/11 01:55
>>496
そうだったんでつか。ちょっとその辺の話はまだまだなんで・・・
ってことはやっぱ負の右シフトはすんなと?
算術で。

509 :デフォルトの名無しさん:02/11/11 01:56
なんか今日は低レベルで面白くないな。


510 :デフォルトの名無しさん:02/11/11 01:56
>>494
つもりが無くても荒らしは荒らしだから、そこのところ理解しておいてくれ。
ちなみに、>>491 のような煽りも荒らしに分類される。

511 :JPS ◆M0LaMzf5rY :02/11/11 01:57
>>506
明日は学校10時はんから・・・
今、徹夜という文字が浮かんだYO!
この論争に加わっていれてるのかな・・・おれ・・・

512 :デフォルトの名無しさん:02/11/11 01:57
>>509
質問ないときはこんなもんだろ。

513 :デフォルトの名無しさん:02/11/11 01:57
>>506
仕事や学校に逝かなければ良い。

514 :デフォルトの名無しさん:02/11/11 01:57
>>509
昨日の方が低レベルだったけどな。

515 :デフォルトの名無しさん:02/11/11 01:57
>>509
さっさと寝ろ

516 :JPS ◆M0LaMzf5rY :02/11/11 01:58
>>510
俺のどこが荒らしだ( ゚Д゚)ゴルァ!
>>491が荒らしなら、おめーもだろ
煽られてるぞおれはああ

517 :デフォルトの名無しさん:02/11/11 01:58
一部の環境でうまく動けばそれでいいや。
あらゆる場面で動くプログラムなんて書こうとは思わないし。

518 :デフォルトの名無しさん:02/11/11 01:59
>>508
ビットシフトを使う側に論理、算術の選択の余地は無いんだよ。


519 :デフォルトの名無しさん:02/11/11 01:59
>>503
なるべく処理系を殺さないという C の設計思想を理解しろ。
そうでなければ自分で言語を定義せよ。 

520 :デフォルトの名無しさん:02/11/11 01:59
>>516
もう寝とけ。
明日、またここに来たときには、すでに今の議論は忘れ去れているだろうから。



・・・そしてまた同じことが一から議論されているという罠

521 :デフォルトの名無しさん:02/11/11 01:59
C言語って未定義の命令を使えてしかも警告すら出ないのな。
いやC言語というか処理系の問題か。ろくな処理系がないな。

522 :デフォルトの名無しさん:02/11/11 02:00
>>516
516 のどこが荒らしじゃないのか説明してもらおうか。

523 :JPS ◆M0LaMzf5rY :02/11/11 02:00
>>518
そうだね。じゃあ負の数自体やんなってことか・・・

>>517
俺は学校でやるからそういうわけにはいかないんだYO!

524 :デフォルトの名無しさん:02/11/11 02:00
>>519
激しく同意。
未定義や不定が気に入らないなら、JavaかC#を使うがいいさ。

525 :デフォルトの名無しさん:02/11/11 02:00
>>516
荒らしだよ。もう寝るよおれは。おやすみ。

526 :デフォルトの名無しさん:02/11/11 02:00
昨日何を議論したのかなあ。
忘れてしもうた。

527 :JPS ◆M0LaMzf5rY :02/11/11 02:01
>>516は荒らしですた。すまそ。

528 :デフォルトの名無しさん:02/11/11 02:01
>>454
ところで>>284が「値渡し」ってどういう意味だ?
(またDQN登場か?)

529 :デフォルトの名無しさん:02/11/11 02:01
>>517
こうやって糞プログラマーが大量生産されます。


530 :デフォルトの名無しさん:02/11/11 02:01
>>526
NULL, bool(_Bool), 未定義, ... 最近はこのどれかだな。

531 :デフォルトの名無しさん:02/11/11 02:02
intを文字列にしたいのですが、どうしたらいいか
分かりません。簡単にできる関数はないのでしょうか?

532 :デフォルトの名無しさん:02/11/11 02:02
>>284の引数は3つともポインタだよな。

533 :JPS ◆M0LaMzf5rY :02/11/11 02:02
俺にはCしかないんだが・・・
未定義はだめだとして、不定を使う可能性は?
あり?

534 :デフォルトの名無しさん:02/11/11 02:02
>>531
sprintf

535 :デフォルトの名無しさん:02/11/11 02:02
>>528
ポインタが渡されることを知らんのだろう。

536 :デフォルトの名無しさん:02/11/11 02:03
>>528
試してみればわかるよ。
呼び出し元の配列は、決して変更されない。

537 :デフォルトの名無しさん:02/11/11 02:03
>>533
int i;
printf("%d\n",i);

不定ってこういうのだろ?

538 :デフォルトの名無しさん:02/11/11 02:03
>>521
それを言ったらアセンブラの立場はどうなる。
それだけ自由度が高くて実装する側に委ねられている
言語っちゅーこった。



539 :デフォルトの名無しさん:02/11/11 02:03
>>533
使わざるをえない状況になってから考えろ。


540 :デフォルトの名無しさん:02/11/11 02:03
>>531
sprintf()

541 :デフォルトの名無しさん:02/11/11 02:04
ポインタの値渡しじゃん(笑)
Cには参照渡しなんてないでしょ

542 :デフォルトの名無しさん:02/11/11 02:04
>>536
呼び出してみたし、ちゃんと変わるが?
(ネタだとしたら地味すぎるな…)

543 :デフォルトの名無しさん:02/11/11 02:04
香具師って何.

544 :JPS ◆M0LaMzf5rY :02/11/11 02:04
>>539
わかりますた。そしたらまたここでレスします。

おい、お前ら!不定と未定義って(略

545 :JPS ◆M0LaMzf5rY :02/11/11 02:05
>>543
俺のことですが、何か?

546 :デフォルトの名無しさん:02/11/11 02:05
>>528
454はどう見てもネタだろ。

547 :デフォルトの名無しさん:02/11/11 02:05
Q.C言語の好きな所はなんですか?


A.未定義や不定であることを知らなくても自由に使えるところです。




548 :デフォルトの名無しさん:02/11/11 02:06
>>543
***すれ立てるまでもない質問はここで 第25刷***
http://pc3.2ch.net/test/read.cgi/tech/1036597434/l50

いや、むしろイタ違い・・・サイト違い・・・2ちゃん語辞書引け

549 :JPS ◆M0LaMzf5rY :02/11/11 02:06
でも>>537とか絶対やらんよな。
普通に書こう、ごく普通に・・・

そうして未定義を使う罠

550 :デフォルトの名無しさん:02/11/11 02:07
2ちゃん語なんて恥ずかしいから使うなよ。

551 :デフォルトの名無しさん:02/11/11 02:07
>>547 そしてはまると。
まあ、そういうアドベンチャーゲームも子供の遊びとしてならいいけドナー
大人ならドキュメントちゃんと読もうや。

552 :デフォルトの名無しさん:02/11/11 02:07
>>549
i = i++;
お前はこれでもやっとけ。

553 :デフォルトの名無しさん:02/11/11 02:07
宿題専門のスレってどこにあるんすか

554 :デフォルトの名無しさん:02/11/11 02:08
>>553
http://science.2ch.net/test/read.cgi/rikei/1031422094/l50

555 :デフォルトの名無しさん:02/11/11 02:08
http://pc3.2ch.net/test/read.cgi/tech/1029422194/l50

556 :デフォルトの名無しさん:02/11/11 02:08
>>551
あなたはドキュメントを全部読んで理解してから使っているのかと小(略

557 :デフォルトの名無しさん:02/11/11 02:08
>>553
http://school.2ch.net/test/read.cgi/edu/1028059292/l50

558 :デフォルトの名無しさん:02/11/11 02:09
>>554
その手のスレッド、初心者板以外にもあるのか

559 :デフォルトの名無しさん:02/11/11 02:09
香具師ってやしって読むのか.かぐしでも変換できるよ.今までかぐしって呼んでたよ.

560 :デフォルトの名無しさん:02/11/11 02:09
不定なんて言葉はJISにねーよ。
http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/c/C-faq/C-faq-11.html#11.33

561 :JPS ◆M0LaMzf5rY :02/11/11 02:11
>>552
i=i++ってさ、i=i=i++ってなって
i=iってなって、結局i++ってことで、
それが何か?

562 :デフォルトの名無しさん:02/11/11 02:11


11.35:
i = i++の動作が未定義だとうるさくいう人がいるけれどANSI準拠のコンパイラで試して私
が思うとおりの結果を得た。
A:
未定義の動作に出くわしたらコンパイラは好きなように振る舞う(実装が定義した動作、
あるいは未規定の振る舞いに出くわしたときにもある程度好きなように振る舞う)。その中
にはあなたが期待した結果も含む。こんなことに頼るのは馬鹿げている。質問11.32と
11.33と11.34を参照のこと。



563 :デフォルトの名無しさん:02/11/11 02:11
>>552 あれほどknkタンは持ち出すなと、

564 :デフォルトの名無しさん:02/11/11 02:12
>>561
アフォ。それは典型的な未定義動作の例だ。
1つの式の中で同じlvalueを何回も変更したら、結果は未定義。

565 :デフォルトの名無しさん:02/11/11 02:12
>>561
それ昨日もやったな。
評価の順番が関係する。

566 :デフォルトの名無しさん:02/11/11 02:12
>>561
i++はiに1を足して、足す前の値を返すだろ。
それをiに入れたらどうなるかわからない。
1が足されているかもしれないし足されていないかもしれない。

567 :デフォルトの名無しさん:02/11/11 02:13
でもi=i++なんてなんのためにやるのかわからないよね(笑)

568 :デフォルトの名無しさん:02/11/11 02:14
>>566
そんな浅はかなことは言ってはいけない。
俺はi=i++を実行したため、FreeB○D-MLから迫害された。



・・・ってなことも起きます。

569 :JPS ◆M0LaMzf5rY :02/11/11 02:14
>>566
そうか!後置++は評価したあとインクリメント!
じゃあi=++iは?おk?

570 :デフォルトの名無しさん:02/11/11 02:15
>>569
C FAQくらい自分で読めよ。

571 :デフォルトの名無しさん:02/11/11 02:15
>>568
殺されてもCに対しては文句は言えません。

572 :デフォルトの名無しさん:02/11/11 02:15
ってゆうか
i=i++
でいったい何がしたいのか理解できないのだが。
他の手段はいくらもあるだろうし
こんな記述に固執する必要性は全くない。

573 :JPS ◆M0LaMzf5rY :02/11/11 02:15
>>564の、1つの式の中で同じlvalueを何回も変更したら
ってとこがどういうことかわからんのだが。。

574 :デフォルトの名無しさん:02/11/11 02:16
>>573
今もっている参考書に書いてなかったら、本屋へ行って買って来い

575 :JPS ◆M0LaMzf5rY :02/11/11 02:17
>>570
書いてる?

576 :デフォルトの名無しさん:02/11/11 02:17
>>571
信者だからですか(藁

577 :デフォルトの名無しさん:02/11/11 02:17
CFAQ
ttp://homepage2.nifty.com/rohizuka/ka/pa_003_a.htm



578 :デフォルトの名無しさん:02/11/11 02:18
>>577 ブラクラ

579 :デフォルトの名無しさん:02/11/11 02:18
>>577
また引っかかった漏れは一体・・・これで7度目だよ・・・

580 :デフォルトの名無しさん:02/11/11 02:18
>>572
書ける(文法違反にならない)ってだけだろうね。
i=i+2=i+3なんてやるとi+2は左辺にならないって言われるだろうし。

581 :JPS ◆M0LaMzf5rY :02/11/11 02:20
>>577
あぶねー578と579のおかげだ・・・

>>574
おなじlvalueってiのこと?
たとえばA=B=3はいいけどA=A=3は無理ってこと?



582 :デフォルトの名無しさん:02/11/11 02:20
なんかfjに似てきたね、ここ。


583 :デフォルトの名無しさん:02/11/11 02:21
っていうか式の中で++とか使うなよ。
他の手段はいくらもあるだろうし
こんな記述に固執する必要性は全くない。
使うときは i++; というふうに単独で。


584 :デフォルトの名無しさん:02/11/11 02:21
>>580
1 行目と 2 行目が全然繋がっててないよ。

585 :デフォルトの名無しさん:02/11/11 02:21
>>580
そんなん素直に
i+=2;
i+=3;
でいいだろ。

586 :JPS ◆M0LaMzf5rY :02/11/11 02:21
だとしたら>>569はぜんぜんだめってことで
香具師扱いをうけたわけか

587 :デフォルトの名無しさん:02/11/11 02:22
>>579
もう定番だから、「pa_003_a」 と出てきた時点で事前回避してくれ。

588 :デフォルトの名無しさん:02/11/11 02:23
>>585
そんなん素直に
i += 2 + 3;
でいいだろ。

589 :JPS ◆M0LaMzf5rY :02/11/11 02:24
>>581は・・・?

590 :デフォルトの名無しさん:02/11/11 02:25
>>588
そんなん素直に
i += 5;
でいいだろ。

591 :デフォルトの名無しさん:02/11/11 02:25
>>589
お前いい加減しつこいな。
C FAQくらい自分で読めっていってるんだよ。

592 :デフォルトの名無しさん:02/11/11 02:25
>>584
そこまで禁止するのは早計。
単に、インクリメント/デクリメントを使った識別子は、副作用完了点までに
複数回使わなければいいだけ。
*p++ = ' '; とか、p[i++] = 123; とかもダメなのかい?

593 :デフォルトの名無しさん:02/11/11 02:27
func(i++,i++);
こういうのもどうなるかわからないんだよね。

594 :デフォルトの名無しさん:02/11/11 02:27
>>590
どっちでもいいだろ。
そんなのコンパイラが最適化する。

595 :デフォルトの名無しさん:02/11/11 02:27
i++;i++;i++;i++;i++;
これが最強

596 :デフォルトの名無しさん:02/11/11 02:27
>>593
未定義。

597 :JPS ◆M0LaMzf5rY :02/11/11 02:28
>>591
読んでものってねーんだよ。
だいたいそんなレスつけるヒマあったら質問に答えろや。
YesかNOでいいんだからYO!

598 :デフォルトの名無しさん:02/11/11 02:29
>>597
くまなく探した?
ブラウザの検索機能を使えばみつけやすいと思うんだけど

599 :デフォルトの名無しさん:02/11/11 02:30
要するに同じ変数を何度も変更するなってことだ。

600 :598:02/11/11 02:30
>>597
http://www.catnet.ne.jp/kouno/c_faq/c3.html
これの3.3にあるじゃん

601 :デフォルトの名無しさん:02/11/11 02:30
>>597
載ってるから言ってるんだよ。
お前の目は節穴か、ボケ!

答えは「無理ではない」

602 :JPS ◆M0LaMzf5rY :02/11/11 02:31
>>591
ありますた。すまそ。

http://www.catnet.ne.jp/kouno/c_faq/c3.html#0
3.2
これでつね?


603 :598:02/11/11 02:32
ん?
i=i++のことじゃなかったか。

604 :JPS ◆M0LaMzf5rY :02/11/11 02:33
>>602は違った。前置を探してたのに・・・

>>601
無理ではないってことはなんか違うってこと?
とりあえずi=++iはだめだよね?
ひとつの式で2回値を変更してるから。
a=b=3はa=(b=3)だからぜんぜんおkだべ?


605 :デフォルトの名無しさん:02/11/11 02:34
>>603
581の質問のことだよ。

606 :デフォルトの名無しさん:02/11/11 02:34
>>601
どこに載ってる?
A=A=3 は、A に対する副作用がいつ発生するか決まってるの?

607 :デフォルトの名無しさん:02/11/11 02:35
int型の変数10個,a[0]〜a[9]を作ります
これをそれぞれ1から10まで変化させます

このとき,a[i]=a[j] (i≠j) の時を除外して
考えたいのですがどう表現すればいいでしょうか?

思いつくのはif文で || でひたすら結んでいくことですが
これだとこの場合10個中2個を選ぶので
10C2=45 個も書かないといけないのは面倒です

よろしくお願いします

608 :デフォルトの名無しさん:02/11/11 02:36
えーと、関数の仮引数として書いたとき、
typedef double p[N]; とすると、
double a[N][N]とdouble a[][N]とp *aが全部同じだというのは
わかってる?

609 :JPS ◆M0LaMzf5rY :02/11/11 02:36
>>606
俺が読んだ感じだと決まってないって。
だからだめなんだって。これが未定義ってやつ!?

610 :市外局番-111:02/11/11 02:37
>>607
if (a[i] == a[j]) break;とか
if (a[i] != a[j]) で処理を書くとか。

611 :デフォルトの名無しさん:02/11/11 02:38
>>610
だよなあ?

わざわざ質問するということはもっと複雑なのか、、、

612 :JPS ◆M0LaMzf5rY :02/11/11 02:38
>>608
ぜんぜんわかんない・・・

613 :デフォルトの名無しさん:02/11/11 02:38
>>606
>>609
お前ら何言ってんだ。
> A=A=3
どの辺のオブジェクトを変更してんだ?

614 :デフォルトの名無しさん:02/11/11 02:38
607 は、漏れも知りたい。
前に SEND MORE MONEY を解いた時、バカなコードしか書けなかった。

615 :613:02/11/11 02:39
スマン。勘違いだYO。

616 :JPS ◆M0LaMzf5rY :02/11/11 02:39
>>613
Aを二回変更してるんでないの?

617 :デフォルトの名無しさん:02/11/11 02:40
>>608
何を唐突に・・・

618 :デフォルトの名無しさん:02/11/11 02:41
>607
よく分からん.等しくなるようなpairが1つでもあったらすべての処理をShinainoka?

619 :デフォルトの名無しさん:02/11/11 02:42
きっと、「10個のうちどの2個をとっても互いに異なっている」ように
したいのだと思われる。

いろんなやり方があるが、10個くらいなら
int a[10], flag[10], i;
for (i = 0; i < 10; i++) {
flag[10] = 0;
}
for (i = 0; i < 10; i++) {
if (flag[a[i]-1]) { 重なっている }
else flag[a[i]-1] = 1;
}
とやればよいのでは。

620 :デフォルトの名無しさん:02/11/11 02:42
>>610
>>611

馬鹿でした.すいません
実はわかりやすくするために配列で変数を書いたのですが
実際にはわかりやすいように変数ごとに違う英単語を
使ってたので話がややこしくなってました



621 :デフォルトの名無しさん:02/11/11 02:43
コード func(i++,i++); は、func() に何が渡るかわからないが i は確実に 2 つ
増分されるという事でよろしいか?

622 :デフォルトの名無しさん:02/11/11 02:43
>>621
それはいいだろ?

623 :デフォルトの名無しさん:02/11/11 02:43
>>619
あ,そういうことです
まったく解決してませんでした(;´Д`)

今から解読してみます

624 :デフォルトの名無しさん:02/11/11 02:44
>>622
よくねーよ(藁

625 :デフォルトの名無しさん:02/11/11 02:44
>>621
未定義だって言ってるだろが。

626 :デフォルトの名無しさん:02/11/11 02:45
>>624
そうか?
どちらのi++が先に実行されるかわからないけど、確実に二回i++を行うだろ?

627 :デフォルトの名無しさん:02/11/11 02:45
>>619
それ、バブルソートよりももっと無駄な比較が発生しないか?
それなら素直に if をずらっと並べた方がマシだ。

628 :デフォルトの名無しさん:02/11/11 02:46
>>626
もうネタは結構です。


629 :デフォルトの名無しさん:02/11/11 02:46
>>626
C FAQくらい自分で読め。

630 :デフォルトの名無しさん:02/11/11 02:46
>>626
もっぺんC-FAQの11.33読み直せや。

631 :デフォルトの名無しさん:02/11/11 02:46
>>622
カンマで副作用完了点が発生するという考えは間違っているのか?

632 :デフォルトの名無しさん:02/11/11 02:46
>>623
int *ipa[10]にその変数たちのアドレスをひとつずつ入れてゆけば?

633 :631:02/11/11 02:47
間違い。宛先は >>625

634 :デフォルトの名無しさん:02/11/11 02:47
>>631
カンマ演算子と関数のパラメータ区切りのカンマは違うぞ。

635 :632:02/11/11 02:48
それよりも
enumで名前をつらねていって、それをintの配列の添え字にした方がいいか。
比較するときは裸の数字を使って。それ以外はenumで定義した名前を使って。

636 :デフォルトの名無しさん:02/11/11 02:49
おまえら、本当はCの仕様ちゃんと理解して無いだろ。

637 :デフォルトの名無しさん:02/11/11 02:49
>>635
607 は、0 〜 9 の順列を取りたいんじゃないのか?

638 :デフォルトの名無しさん:02/11/11 02:50
>>636
理解していなくてもi=i++やfunc(i++,i++)なんてコードは書きませんから。

639 :デフォルトの名無しさん:02/11/11 02:50
>>636
あなたが C の仕様ちゃんと理解してるのはわかったから、早く >>631
答えてくれ。

640 :デフォルトの名無しさん:02/11/11 02:51
>>619

それで比較されていますか?
a[i]とa[j] i≠j の比較なんですが・・
よくわからないです

>>632
アドレスを入れるとどうなるのですか?

>>635

よくわからないです


641 :デフォルトの名無しさん:02/11/11 02:51
実際には誰も書かないような糞式をいちいち未定義ネタとして
挙げんなっつーの。

642 :デフォルトの名無しさん:02/11/11 02:51
いちおう初心者スレなので理解していないヤシばかりなのだが。

643 :デフォルトの名無しさん:02/11/11 02:51
>>639がCの仕様を理解していないのが分かってしまったわけだが。

644 :デフォルトの名無しさん:02/11/11 02:51
>>637
>>619には全ての数字が異なっているようにしたいと書いてあるけど

645 :デフォルトの名無しさん:02/11/11 02:53
>>636
>>631

646 :デフォルトの名無しさん:02/11/11 02:53
>>644
そういうのを、0、1、2、3、4、5、6、7、8、9 の順列って言わないか?

647 :デフォルトの名無しさん:02/11/11 02:53
だから関数の引数のカンマはsequence pointじゃないって。

648 :デフォルトの名無しさん:02/11/11 02:54
0,4,22,2,-5,.....,1000

これでもいいんだろ?順列といえる?

649 :デフォルトの名無しさん:02/11/11 02:54
>>641
誰も書かないような分かりにくい書き方を好んで書くのが真のC使いだろ(藁

650 :648:02/11/11 02:54
ん?
0から9までだっけ?
じゃあループして入れればいいじゃん(笑)

651 :デフォルトの名無しさん:02/11/11 02:55
>>644
そうです

例えば変数3個で i,j,k だとすると

for (i=0 ; i<=10 ;i++){
for (j=0 ; j<=10 ;j++){
for (k=0 ; k<=10 ;k++){

でまわして,このなかでも i≠j i≠k j≠k
の場合を考えたいのです

変数が10個だと 10C2通り必要なので
いちいち全部書くのは面倒なのです

652 :デフォルトの名無しさん:02/11/11 02:55

おバカな煽り厨が1人混ざってんな。

653 :デフォルトの名無しさん:02/11/11 02:56
sequence pointのカンマなんかいらんだろ。他の書き方をすれば良い訳で使う必要性なし。

654 :648:02/11/11 02:56
えっと、配列じゃなかったんだっけ?(汗
じゃあa=0;b=1;c=2とかいちゃえ。

655 :デフォルトの名無しさん:02/11/11 02:56
>>649
そう思っているのは未熟なおまえだけ。
とっとと消えろ。カス。

656 :デフォルトの名無しさん:02/11/11 02:57
早く寝ろよガキども。

657 :デフォルトの名無しさん:02/11/11 02:57
int strcmp(const char *p, const char *q)
{
if (*p != *q) return *p - *q;
else if (! *p) return 0;
else return strcmp(++p, ++q);
}
これはOK?

658 :614:02/11/11 02:57
漏れが SEND MORE MONEY を書いた時は、

for (i=0 ; i<=10 ;i++){
for (j=0 ; j<=10 ;j++){
if(j == i) continue;
for (k=0 ; k<=10 ;k++){
if(k == i || k == j) continue;

と書いた。
もっとマシな方法があったらキボンヌ。

659 :デフォルトの名無しさん:02/11/11 02:58
>>653
誰もそんな話はしていない。

660 :デフォルトの名無しさん:02/11/11 02:58
>>652
お前の事か。

661 :デフォルトの名無しさん:02/11/11 02:58
俺がしている。

662 :デフォルトの名無しさん:02/11/11 02:59
>>657
お。なんかカッコいいね。実用性はともかく。

663 :614:02/11/11 02:59
>>660
お前のことだボケ。

664 :デフォルトの名無しさん:02/11/11 02:59
>>651, >>658
奥村本を嫁。
順列のとこ。

665 :663:02/11/11 03:00
名前間違えた。

666 :デフォルトの名無しさん:02/11/11 03:00
>>662
実用性って…
whileで書いてもまったく同じコードが出るが?

667 :658:02/11/11 03:01
>>664
本を買う金が無い。

668 :デフォルトの名無しさん:02/11/11 03:02
>>667
          ,. -───-: 、
          /::::::::::::::::::::::::::::::::\
          / '':::::::::::::::::::::::::::::::''''' ヽ
         !::::::::::ィ::ハ:::;::::::::::::::::::::::::::!
       i::|:::i::/l/  i;::ト、:、:::i:::::::::::::::i
       |::i/レ'-i''  'ヽi-ヾ,ヽ!:::::::::::::l
       |::ハ -‐-   -─- i::::::::::::::l
       |::::::l|  |     |  | |::::::::::::::!
       |::::::ヽ | r---、! l,.!::::::::::::::l
       l::::::::::::`;'-'=,‐,='r''i~!:::::::::::::::|
         !:::::::l、::r'"´'. ' l ' i::::::::iヽ:::l
       i:l、:::|./、_____,l::::;l:/‐'ヽ!
        '!ヽ;i'>l____,.//-‐'''"ヽ
            !/ |.VVVVVVVV.lV\!. i
         |  |        |    l

669 :デフォルトの名無しさん:02/11/11 03:03
大阪?

670 :デフォルトの名無しさん:02/11/11 03:03
http://www5.airnet.ne.jp/tomy/cpro/perm.htm

順列生成だってさ

671 :デフォルトの名無しさん:02/11/11 03:03
>>667
貧乏人は低レベルなところでちょこちょこやってろ。

672 :662:02/11/11 03:03
>>666
はあ?意味わからんよ。
コンパイラがまったく同じコードを吐くってこと?

673 :デフォルトの名無しさん:02/11/11 03:04
>>657
>>649をみろ。

674 :デフォルトの名無しさん:02/11/11 03:04
>>672
そう。
こういう再帰はループとまったく同じコードになる。

675 :デフォルトの名無しさん:02/11/11 03:05
>>657
わかりやすいコードだね。
やはり再帰はエレガントで良い

676 :デフォルトの名無しさん:02/11/11 03:06
しかしなぜに前置++?

677 :662:02/11/11 03:06
>>674
そうなんか。
ごめん。知らんかった。ちょっと自分でも試してみるわ。

678 :デフォルトの名無しさん:02/11/11 03:07
ばかばっか

679 :デフォルトの名無しさん:02/11/11 03:07
真のC使いは再帰とループの両方で書けるとき再帰を選びます。

難しそうに見えてかっこいいから(藁

680 :651:02/11/11 03:08
>>657
これは俺へのレスですか?
考えてみます

681 :デフォルトの名無しさん:02/11/11 03:08
>>675
二分木扱うときは再帰使うと実にうまく書けると思ったけど、strcmpは・・・

682 :デフォルトの名無しさん:02/11/11 03:08
>>675
真のC使いハケーン(藁

683 :デフォルトの名無しさん:02/11/11 03:08
>>680
全然違うだろ(ワラ
さっきからの未定義論争だよ

684 :531:02/11/11 03:08
激しくサンクス

685 :デフォルトの名無しさん:02/11/11 03:09
再帰のほうがやさしいだろ。
qsortとか2分探索とか…

686 :デフォルトの名無しさん:02/11/11 03:09
再帰は未定義です

687 :デフォルトの名無しさん:02/11/11 03:10
>>685
二つしかあげられませんでした。

688 :デフォルトの名無しさん:02/11/11 03:10
memcpyを再帰で書くとどうなりますか?

689 :デフォルトの名無しさん:02/11/11 03:10
>>685
クイックソートは分かるが、二分探索(二分木じゃないよな?)はループの方がわかりやすくないか?


690 :デフォルトの名無しさん:02/11/11 03:10
678 は昨日も同じことを言ってたバカ

691 :デフォルトの名無しさん:02/11/11 03:11
再帰が得意で好きな人は再帰の方がやさしいだろ。だから再帰がやさしいんだ。

692 :デフォルトの名無しさん:02/11/11 03:12
まあループをわざわざ再帰にする奴はDQNってこった。

693 :デフォルトの名無しさん:02/11/11 03:14
>>670 の URL のコードは、変数名が短かったりグローバル使ってたりして素敵だな。

694 :デフォルトの名無しさん:02/11/11 03:15
void *bsearch(const void *key, const void *base, size_t nmembers,
       size_t size, int (*compar)(const void *, const void *))
{
 if (nmembers == 0) {
  return NULL;
 } else {
  size_t half = nmembers / 2;
  void *mid = (char *)base + size * half;
  int r = compar(key, mid);

  if (r == 0) {
   return mid;
  } else if (r < 0) {
   return bsearch(key, base, half, size, compar);
  } else {
   return bsearch(key, mid + size, nmembers - half - 1, size, compar);
  }
 }
}

695 :デフォルトの名無しさん:02/11/11 03:15
>>693
> free((char *)c)

これ変だよね。freeはvoid *を受け取るのにわざわざキャストしている。

696 :デフォルトの名無しさん:02/11/11 03:16
真中より小さければ左半分を、
大きければ右半分を探す。

わかりやすいじゃないか。

697 :デフォルトの名無しさん:02/11/11 03:18
俺が書いたコードなんで結構無駄なことやっているとおもう。

void *bsearch(const void *key,const void *base,size_t nmemb,size_t size,int (*compar)(const void *,const void *))
{
const unsigned char *left,*middle,*right;
int result;

left=(const unsigned char *)base;
right=left+(nmemb*size-size);

while(left<=right){
middle=left+((right-left)/size/2*size);
result=(*compar)(key,middle);
if(result==0)
return (void *)key;
else if(result<0)
right=middle-size;
else
left=middle+size;
}

return NULL;
}


698 :デフォルトの名無しさん:02/11/11 03:18
memcpyは末尾再帰じゃ書きにくい。返す値がアレだから。

699 :662:02/11/11 03:19
>>674
試してみたけど、BCC(標準設定)では最適化されず、
再帰のままのコードを吐いたよ。
VC++(Releaseモード)では確かにループに展開された。

というわけで、再帰がループと同じになるとは
決め付けない方がいいね。

700 :651:02/11/11 03:19
>>651 は結局良い方法はないのでしょうか・・


701 :694:02/11/11 03:20
>>694の再帰呼び出しは、
引数の代入+gotoと思って読んでね。
実際、気の利いたコンパイラならそういうコードを吐く。

702 :デフォルトの名無しさん:02/11/11 03:22
もちろん再帰がいつでもループに変わるという保証はない。

ループで書くとややこしいアルゴリズムはまず再帰で書いてみる。
それで十分効率の良いコードになったなら、わざわざわかりにくいループに
書き直す必要はない。

703 :デフォルトの名無しさん:02/11/11 03:23
>>699
それは最適化オプションの有無で違うんじゃないのかい?

704 :デフォルトの名無しさん:02/11/11 03:26
>>700
簡単な方法では >>658
気の利いた方法では >>664>>670

705 :651:02/11/11 03:28
>>704
なるほど
読んでみます

706 :662:02/11/11 03:28
>>702
それなら納得。

>>703
標準設定で試しただけだから何とも言えんが、どちらにしても
666の
> 実用性って…
> whileで書いてもまったく同じコードが出るが?
のように処理系に依存する話をそのように決め付けるのは
ヤバいね。

707 :デフォルトの名無しさん:02/11/11 03:31
2進→10進変換も再帰で書いたほうが
簡潔だった気がする。

708 :デフォルトの名無しさん:02/11/11 03:34
そう言えば、シフトの話って決着した?

709 :デフォルトの名無しさん:02/11/11 03:34
>>708
とうの昔に。


710 :デフォルトの名無しさん:02/11/11 03:35
そう言えば、配列の値渡しの話って決着した?

711 :デフォルトの名無しさん:02/11/11 03:38
(なんでこのスレの住人は過去ログを読まないんだろう…。)


712 :デフォルトの名無しさん:02/11/11 03:40
(なんでこのスレの住人は過去ログを読ますんだろう…。)

713 :デフォルトの名無しさん:02/11/11 03:42
そう言えば、func(++i, ++i) の話って決着した?

714 :662:02/11/11 03:42
>>703
引き続き最適化オプションを色々指定して試したけど、
BCCではやっぱり無理みたい。

715 :デフォルトの名無しさん:02/11/11 03:43
勝手にやってろ!
俺はもう寝る。


716 :デフォルトの名無しさん:02/11/11 03:46
結論書いとくか。
負の数をシフトしたら結果は未定義。
符号付の数を左シフトしてあふれても結果は未定義。

配列の内容をそのままコピーして関数の引数に入れるような機能は
Cにはない。そういうことをしたければ、構造体で囲うなどしなければならない。
そうでもしない限り、配列の先頭アドレスのポインタ値が仮引数に(値渡しで)
渡される。

関数呼び出しの実引数を区切るカンマは、カンマ演算子ではない。
sequence pointではない。

717 :デフォルトの名無しさん:02/11/11 03:49
>>716
疑問 2 点。
「負の数をシフトしたら結果は未定義」 という事は、(signed)i >> c; は OK?
「カンマ演算子ではない」 = 「sequence pointではない」 の根拠は?

718 :717:02/11/11 03:50
失礼。
(unsigned)i >> c;、(unsigned)i << c;

719 :デフォルトの名無しさん:02/11/11 03:53
>>718
unsignedにキャストすれば結果は決まっている。

「カンマ演算子でないから」というわけじゃない。
「カンマ演算子ではなく、sequence pointでもない」

720 :デフォルトの名無しさん:02/11/11 04:00
ちなみに、負の数をunsignedにキャストするとどうなるかは
処理系定義。

721 :デフォルトの名無しさん:02/11/11 04:16
サンクス。

で、これで済む話を、みんな延々と何やってたのだろうか。

722 :デフォルトの名無しさん:02/11/11 04:16
>>716
> 「カンマ演算子ではない」 = 「sequence pointではない」 の根拠は?

719が模範解答だけど、別の答えとしては
副作用完了点の定義に含まれるのはカンマ演算子で、
関数の実引数の区切りは含まれていない。
この場合に副作用が完了するのは、実引数の評価が
すべて完了した後となる。

723 :デフォルトの名無しさん:02/11/11 04:35
>>717
ちなみに負の数の右シフトは未定義ではなく、処理系定義だよ。

724 :デフォルトの名無しさん:02/11/11 05:00
>>607
C++ だと、こんなに簡単なのな。

vector<int> v;
for(int i = 0; i <= 9; i++)
  v.push_back(i);
while (next_permutation(v.begin(), v.end()))
{
  ...
}

725 :724:02/11/11 05:04
do while じゃないとダメな事に気付いた。

726 :デフォルトの名無しさん:02/11/11 05:37
一日で700

727 :デフォルトの名無しさん:02/11/11 06:08
一晩で、だろ。

728 :デフォルトの名無しさん:02/11/11 08:29
sage



729 :デフォルトの名無しさん:02/11/11 08:36
#include <stdio.h>
#define first(n) ((unsigned) ((1U << (n)) - 1U))
enum{N=5,K=2};/* 0-NからK個選ぶ各組み合わせに対する全順列を表示 */
int basicnum[K];
void show_perm(int *bn){
  int i,k=1,t,c[K+1];
  for(i=1;i<=K;i++)c[i]=i;
  while(k<K){
    if(k&1) i=c[k]; else i=0; t=bn[k];bn[k]=bn[i];bn[i]=t;
    for(k=0;k<K;k++)printf("%d ",bn[k]); /* ここで各場合(bn)に対する処理 */
    printf("\n"); k=1; while(c[k]==0){c[k]=k;k++;} c[k]--;
  }
}
unsigned nextset(unsigned x){
  unsigned smallest, ripple, new_smallest, ones;
  smallest = x & -x; ripple = x+smallest; new_smallest = ripple & -ripple;
  ones = ((new_smallest/smallest)>>1)-1;
  return ripple|ones;
}
void setbasicnum(unsigned s)
{int i,j=0; for (i=1; i<=N; i++) { if (s&1) basicnum[j++]=i-1; s>>=1; }}
int main(void){
  int i=1; unsigned x=first(K);
  while(!(x&~first(N))){setbasicnum(x);show_perm(basicnum);x=nextset(x);i++;}
  return 0;
}


730 :デフォルトの名無しさん:02/11/11 08:38
かき回した奴寝る→話まとまる→ログ流れる→かき回した奴起きる
の繰り返しだな

731 :729:02/11/11 08:42
アルゴリズム事典からパクって組み合わせてみました。
N(アルゴリズムの関係上sizeof(int)*8ビット以下の数),K(<N)を適当にいじって
みてください。
ex.(N=5,K=2:0-4の内の2つを選んだ時の順列)
$ hoge
0 1
1 0
0 2
2 0
1 2
2 1
0 3
3 0
1 3
3 1
2 3
3 2
0 4
4 0
1 4
4 1
2 4
4 2
3 4
4 3


732 :デフォルトの名無しさん:02/11/11 11:23
お前等、いつまでくだらない無いことやってんだ?
おまえらが馬鹿なのか? それともC言語の仕様が難しいのか?

733 :デフォルトの名無しさん:02/11/11 11:35
中傷をすることでしか自分を保てない哀れな 732 の登場

734 :デフォルトの名無しさん:02/11/11 11:40
擁護することでしか自分を保てない哀れな 733 の登場

735 :デフォルトの名無しさん:02/11/11 11:45
各処理系についているヘルプが貧弱なんだろ。
まともに解説しているヘルプや本がない。

736 :デフォルトの名無しさん:02/11/11 11:50
コピペでしか煽りすらできない無能な 734 の登場

>>735
それは確かに。
VC++ とかも 「ANSI 準準拠」 とか言われたら大体信じちゃうよなあ。

737 :デフォルトの名無しさん:02/11/11 12:20
煽りすらまともな日本語で書けない無能な 736 の登場

738 :デフォルトの名無しさん:02/11/11 12:33
いいからお前ら >>577 を読め。

739 :デフォルトの名無しさん:02/11/11 12:35
736 の文章がコンパイルエラーになってしまう貧弱な日本語エンジンを持つ 737

740 :デフォルトの名無しさん:02/11/11 12:43
線形リストは、ノードが増えるたびにmallocないしnewで領域を確保しますよね。
そしてプログラム終了時はfreeかdeleteをつかうわけですが、
ただ単にfree(node)やdelete nodeとするようにポインタ名に対して1回だけ
やってやればいいのでしょうか?
それとも領域を確保したすべてのポインタを指定して開放しないと
いけないんでしょうか?


741 :デフォルトの名無しさん:02/11/11 12:46
>>740
確保したすべてのポインタに対して開放処理が必要。

742 :デフォルトの名無しさん:02/11/11 13:01
>>740
> プログラム終了時はfreeかdeleteをつかうわけですが
いいえ、まともなOSや処理系ならば、
プログラム終了時にはfreeかdeleteをつかう必要はありません。

743 :デフォルトの名無しさん:02/11/11 13:03
>>740
ワラタ

744 :デフォルトの名無しさん:02/11/11 13:06
>>742
またその話ですか?

745 :743:02/11/11 13:09
スマソ、宛先は 742

>>744
メ(以下略)

746 :デフォルトの名無しさん:02/11/11 13:15
>>740「プログラム終了時」かどうかは置いといて、
とにかくfreeとかdeleteしたいときにどうするか
ということなら、malloc or newした回数だけ
free or deleteする必要がある。



747 :デフォルトの名無しさん:02/11/11 13:20
HeapDestroy() で一発

748 :デフォルトの名無しさん:02/11/11 13:23
exitで一発

749 :720:02/11/11 13:25
>>742
プログラム側で開放しなくても終了時にOSがかってに開放してくれるんですか?
C++始めたばかりでよくしらんのですが、それはメモリリークを引き起こすんでは
ないでしょうか?

>>741、746
助言ありがとう御座いました


750 :デフォルトの名無しさん:02/11/11 13:27
>>749
引き起こさない。
スタック領域やグローバル変数領域がちゃんと解放されるのと同じこと。


751 :デフォルトの名無しさん:02/11/11 13:28
>>749
引き起こす環境もあるかもしれんが、
そういう環境ではどうせまともにプログラミングなんかできない
から、解放しようとしても無駄。

752 :デフォルトの名無しさん:02/11/11 13:29
>>749
少なくともUnix系OSやWindowsやMax OS Xでは大丈夫だよ。


753 :デフォルトの名無しさん:02/11/11 13:32
デストラクタ呼び出されないからちゃんとdeleteしろ。
環境依存なプログラミングはできるだけするな。

754 :720:02/11/11 13:33
だいぶ理解できました

755 :デフォルトの名無しさん:02/11/11 13:34
>>751
MacOS9以下はまともにプログラミングできてましたが?

756 :デフォルトの名無しさん:02/11/11 13:35
>>750
> スタック領域やグローバル変数領域がちゃんと解放されるのと同じこと。
C/C++でちゃんとやると決まっていることとOSがやってくれるに違いないは違う。

757 :デフォルトの名無しさん:02/11/11 13:42
>753
プログラム終了時はデストラクタが呼ばれるんじゃないか?

758 :デフォルトの名無しさん:02/11/11 13:42
742 は、メ(以下略) からしてネタなのに、何でみんなこんなに熱くなるんだ・・・。
面白すぎるぞ。

759 :デフォルトの名無しさん:02/11/11 13:43
>>757
new したものを自動で解放してくれる処理系があったら知りたい。
で、スレ違い。

760 :デフォルトの名無しさん:02/11/11 13:45
終了時に解放するのがめんどくさいならJavaとかC#使えよ。

761 :デフォルトの名無しさん:02/11/11 13:47
>>757
簡単に試験できるんだから、まず試してみろ。

762 :デフォルトの名無しさん:02/11/11 13:48
関係無いけど、メモリリークはgc持ってても起きる可能性があるよ

763 :デフォルトの名無しさん:02/11/11 13:49
>>762
スレ違いだが興味ある。
GC 管轄外のメモリ機能を使う以外に、どんな可能性がある?

764 :デフォルトの名無しさん:02/11/11 13:50
>>762
具体例プリーズ

765 :デフォルトの名無しさん:02/11/11 13:57
具体例レリーズ

766 :デフォルトの名無しさん:02/11/11 14:01
( ',_`)グプ

767 :デフォルトの名無しさん:02/11/11 14:08
出任せか ヽ(´ー`)ノ

768 :デフォルトの名無しさん:02/11/11 15:02
762じゃないけど、たとえばリングバッファを使ってFIFOを実装したとき、dequeしたときにポインタを進めるだけじゃなくて、ちゃんと参照を消さ
ないとリークする。

CやC++のプログラムを機械的にGCmalloc()を使うように書き換えたりする
ときに、こういう事が起きる。

769 :デフォルトの名無しさん:02/11/11 15:17
C/C++ のニセ GC を GC と言うな。

770 :デフォルトの名無しさん:02/11/11 15:21
保守的GCは立派なGCだと思うが...
それに、参照を消し忘れるとリークするのは
どんなGCでも同じ。

771 :デフォルトの名無しさん:02/11/11 15:23
>>770
VB は?

772 :770:02/11/11 15:27
VBが何?

773 :デフォルトの名無しさん:02/11/11 15:28
VB.NETにはまともなGCが入っている。
それより前のVBは、Perlとかと同じ参照カウント方式の疑似GC。


774 :デフォルトの名無しさん:02/11/11 15:50
参照カウンタ方式は擬似なのか。方式の違い程度のことだと思うのだが。

775 :デフォルトの名無しさん:02/11/11 16:28
参照カウンタだと循環参照は回収できない。
双方向リスト作ったりすると即リーク。


776 :デフォルトの名無しさん:02/11/11 17:39
mallocして得た領域を開放せずに終了した場合、大抵は解放されると思うけど、それってCの規格で保証されている?
開けっ放しのストリームは閉じられることが保証されていたと思うけど。

777 :JPS ◆M0LaMzf5rY :02/11/11 17:43
>>776
保障されてない。でも実際は開放されてるっぽい。
俺は絶対free()する派

778 :デフォルトの名無しさん:02/11/11 18:10
>>776
終了したプロセスの資源を解放するのはOSのお仕事。言語仕様で規定しても意
味がない。


779 :デフォルトの名無しさん:02/11/11 18:11
free()はメモリを「開放」する関数ではない。
メモリを「解放」する関数だ。
さっきから開放と言ってる馬鹿共はCを使う資格はない。
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/free.3.html

780 :デフォルトの名無しさん:02/11/11 18:13
2chで誤変換をいちいち指摘するバカは2chを使う資格は無い。

781 :デフォルトの名無しさん:02/11/11 18:16
>>779
たかが漢字間違いぐらいで鬼の首を取ったようなことを言うなよ

782 :デフォルトの名無しさん:02/11/11 18:17
※ここから10レスくらいは罵り合いで消費されるので見なくてOK※※

783 :デフォルトの名無しさん:02/11/11 18:18
>>780 >>781
うるせー。馬鹿共。

784 :デフォルトの名無しさん:02/11/11 18:20
>>783
(・∀・)ニヤニヤ

785 :デフォルトの名無しさん:02/11/11 18:23
>>778
意味あるだろ。

786 :デフォルトの名無しさん:02/11/11 18:29
>>778
それを言ったらストリームを閉じることだってOSの仕事になるんじゃ・・・

787 :デフォルトの名無しさん:02/11/11 18:43
>>786
> >>778
> それを言ったらストリームを閉じることだってOSの仕事になるんじゃ・・・
ちがう。Cで規定されているのは単にストリームを閉じるためでなく、ファイ
ル構造体のバッファをフラッシュするため。ユーザプロセスに割り当てたメモ
リにはそんな話はあてはまらない。


788 :デフォルトの名無しさん:02/11/11 18:46
昔、「解放」って書いてたんだけど、
「開放」と書く人が多いんで、最近はそうするようにしてた。
結局どっちが正しいの?

ぐぐってみました。
「free 解放」 約15100件
「free 開放」 約19000件

789 :デフォルトの名無しさん:02/11/11 18:51
意味考えりゃ「解放」に決まってると思うが

790 :デフォルトの名無しさん:02/11/11 19:00
>>787
>>778には資源を解放って書いてあるじゃん。資源はメモリだけのことじゃないぞ。

791 :デフォルトの名無しさん:02/11/11 19:00
>>787
いみわからん

792 :デフォルトの名無しさん:02/11/11 19:02
>>788
> 結局どっちが正しいの?
「free 解放 C言語」 約1,970件
「free 開放 C言語」 約1,240件
ですが何か?

793 :デフォルトの名無しさん:02/11/11 19:09
790はバッファの「フラッシュ」と「開放」の違いも理解できないと思われ。

794 :デフォルトの名無しさん:02/11/11 19:12
「開放」だってよ。 >>793必死です(w

795 :デフォルトの名無しさん:02/11/11 19:13
規格書:JIS X 3010-1993 7.10.3.2 free関数の引用
  free関数はptrが指す領域を解放し、その後の割付けに使用できるようにする。ptrが空ポインタ
  の場合、何も動作しない。それ以外の場合、実引数がcalloc関数、malloc関数若しくはrealloc関数によっ
  て以前に返されたポインタと一致しないとき、又はその領域がfree若しくはreallocの呼出しによって解放
  されているとき、その動作は未定義とする。
ですが何か?

796 :788:02/11/11 19:25
>>795
規格書は「解放」ですか。
それに習うことにします。

797 :788:02/11/11 19:27
間違えました…
×習う
○倣う

798 :デフォルトの名無しさん:02/11/11 19:30
やれやれ、またこの話題かYO!別のスレ立てろや、うぜーから。

何も分かってないJPSは黙ってろ。

799 :798:02/11/11 19:59
まぁ開放だけどね

800 :デフォルトの名無しさん:02/11/11 21:23
800age

801 :デフォルトの名無しさん:02/11/11 21:26
char hoge[32] = "";
なんつーふうにやった場合、
最初の\0の後は0で埋められるんでしたっけ?

802 :デフォルトの名無しさん:02/11/11 21:27
グローバルなら。

803 :デフォルトの名無しさん:02/11/11 21:29
質問です。
int hairetu[MAXSIZE];
について、main()の中で宣言するよか外で宣言するほうが
MAXSIZEを大きくできるのはなんでなんですか?

804 :デフォルトの名無しさん:02/11/11 21:30
>>803
一般にスタックのサイズは小さいから。
関数内でもstaticつければ多く取れるけど

805 :デフォルトの名無しさん:02/11/11 21:31
グローバルかどうかは関係なく0で埋まります。

806 :801:02/11/11 21:34
ありがとさんdeath

807 :デフォルトの名無しさん:02/11/11 21:36
>>806
釣られるな

808 :801:02/11/11 21:38
俺は釣られたの?
いいや、自分で調べま。

809 :デフォルトの名無しさん:02/11/11 21:38
>>805
あーすまんそうだ。
初期値を全く与えないときは何が入るかわからないんだった。

810 :デフォルトの名無しさん:02/11/11 21:49
すみませんが教えてください。
以下はどのようなときに成り立つのでしょうか?
aが4よりとても小さいときだとは思うのですがどうなのでしょうか?

if(a << 4) {
}

811 :デフォルトの名無しさん:02/11/11 21:51
もうネタはいいよ…

812 :デフォルトの名無しさん:02/11/11 21:54
int Get_FileSize(char const *file)
{
int size = 0;
struct stat st;
if(!stat("file.txt",&st)) size = (int)st.st_size;
return size;
}

は正常に値が返ってくるんですが、
"file.txt"を"../file.txt"という風に相対パスにすると、
stat("file.txt",&st)が-1になります。
ちなみに、ファイルはちゃんとあります。
どうすればいいんでしょうか?

813 :デフォルトの名無しさん:02/11/11 21:59
>>812
もうネタはいいよ・・・

814 :812:02/11/11 22:23
>>813
ネタじゃないんですけど、、
初心者ですみません。。

815 :813:02/11/11 22:26
>>812
struct statってなんだ?
stat("file.txt" , &st)
ってなんだ?
関数なのか構造体なのかさっぱりわからん。
これがネタでなくてなんだというんだ。

816 :デフォルトの名無しさん:02/11/11 22:28
>>815
http://www.linux.or.jp/JM/html/LDP_man-pages/man2/stat.2.html

817 :デフォルトの名無しさん:02/11/11 22:28
"./file.txt"

818 :デフォルトの名無しさん:02/11/11 22:29
815は構造体のタグ名と関数名が同じものになってはならないとでも思っているのか?(ワラ

819 :デフォルトの名無しさん:02/11/11 22:30
"file.txt"も相対パスだと思うのだけど

820 :デフォルトの名無しさん:02/11/11 22:30
初心者は>>815だったということで

821 :デフォルトの名無しさん:02/11/11 22:32
>>812
../file.txtは親ディレクトリにあるfile.txtを指す
./file.txtでしょ

822 :デフォルトの名無しさん:02/11/11 22:33
>>820
うるせーな。ネタだよネタ。おまえらは釣られたんだよ(w

823 :デフォルトの名無しさん:02/11/11 22:34
>>822
それもネタですか?

824 :デフォルトの名無しさん:02/11/11 22:35
>>813-824
それはともかく

825 : :02/11/12 00:19
>805
http://www.geocities.co.jp/AnimalPark-Lucky/2482/houbi.jpg

826 :デフォルトの名無しさん:02/11/12 00:30
>>825
これ何?

827 :デフォルトの名無しさん:02/11/12 00:42
>>826
ドラえもんの一場面

828 :デフォルトの名無しさん:02/11/12 01:30
stat() って非標準だろ。
ここで POSIX システムコールを扱っていいなら、Win32 API も扱っていい事に
なるわけだが・・・。

829 :デフォルトの名無しさん:02/11/12 02:06
ファイル名に変数を入れたいときってどう表記すればいいんですか?

  A=5;
  strcpy(file,"NoA.txt",A)

"No5.txt"を読み込みたいのですが、↑のように書くと
"NoA.txt"は見つかりません。というふうなエラーが出ます。
代入の仕方を教えてください。

830 :デフォルトの名無しさん:02/11/12 02:17
>>829
sprintf()

つーか strcpy() の機能をもっとよく理解すれ。

831 :デフォルトの名無しさん:02/11/12 02:18
>>829
つーか <string.h> しろ。

いや、入門書から読みなおせ。

832 :デフォルトの名無しさん:02/11/12 02:18
今まで見てきたネタの中でも一番すごい

833 :831:02/11/12 02:19
#include <string.h> しろ、だった・・・鬱

834 :デフォルトの名無しさん:02/11/12 03:13
>>828
あの質問はstatがどんなものかなんて関係ないだろ。fopenでも同じことが起きるんだし。
プログラム以前の問題だからスレ違いといえばスレ違いだが。

835 :デフォルトの名無しさん:02/11/12 03:17
>>829
A=5;
strcpy (file, &(((char*)"NoA.txt")[2]=A+'0')-2);

処理系によってはクラッシュします。
gccの場合は-fwritable-stringsオプションを指定する必要があります。

836 :デフォルトの名無しさん:02/11/12 03:20
>>835
文字列定数を書き換えるのか(^_^;)
gccって書き換えられる領域に置くように指定することもできるんだな。


837 :デフォルトの名無しさん:02/11/12 03:22
>>835
またそういうネタを・・・

そういえば、文字列リテラルって const char * なのか?
キャスト入ってるけど・・・

838 :デフォルトの名無しさん:02/11/12 03:25
>>837
文字列スレッドで誰かが特に決まっていないんだねって言っていたけどどうなんだろう。
VC++6.0やBCCはchar *だけど。

839 :デフォルトの名無しさん:02/11/12 03:27
char file[] = "No5.txt"; でいいじゃん。

840 :デフォルトの名無しさん:02/11/12 03:28
0,1,2,3,4はどうする?

841 :デフォルトの名無しさん:02/11/12 03:29
>>840
file[2]='0';とか

842 :デフォルトの名無しさん:02/11/12 03:35
829 は 5 しか呈示してないから。
やるとしたら、
char *file[]= { "No1.txt", "No1.txt", "No2.txt", "No3.txt", "No4.txt", "No5.txt" };

つーか 830-831 でマジレス出てるし。

843 :デフォルトの名無しさん:02/11/12 03:43
>>831は解決法じゃない。

844 :デフォルトの名無しさん:02/11/12 03:47
>>843
<string.h> がインクルードされてれば、829 のコードはそもそもコンパイル
通らないわけだが。
それで間違ってるって気付けるだろうに。
つーか 842 のどこに 「解決法」 って書いてある?

845 :デフォルトの名無しさん:02/11/12 03:51
ようするに、あれだ。
ネタに飢えてるわけだな。

846 :デフォルトの名無しさん:02/11/12 03:55
遅レスだが >>782-784 ワラタ

847 :デフォルトの名無しさん:02/11/12 04:07
>>844
>>843のどこに>>842へのレスだと書いてある?

848 :デフォルトの名無しさん:02/11/12 04:43
>>847 アザワラタ

849 :デフォルトの名無しさん:02/11/12 04:49
>>847
だからどうしたの?

850 :デフォルトの名無しさん:02/11/12 04:56
>>849
お前こそどうしたんだ?

851 :デフォルトの名無しさん:02/11/12 05:04
>>850
お前は誰だ?

852 :デフォルトの名無しさん:02/11/12 05:29
お前はオレだ。

853 :829:02/11/12 06:09
イパーイ釣れた (・∀・)

854 :デフォルトの名無しさん:02/11/12 06:59
ヽ(´ー`)ノ

855 :デフォルトの名無しさん:02/11/12 07:44
お勧めの高橋麻奈タンの「やさしいC」について出版社から連絡ありました。Linuxでも使えないことはないし、この本をLinux用として使っている人もいるが、基本的にはWindows向きだって。
僕はVineのemacsでCをやりたいから教えてください、って言ったらこの本紹介されたのに・・・・・嘘吐き!!もうキャンセルできないよう。。。。。

856 :デフォルトの名無しさん:02/11/12 07:52
from >>1
> ソース丸投げ、宿題、書籍 は専門の別スレがあるからそこへ逝ってくれ。
>
> 上記を守らない書き込みをした場合、その結果は禿しく未定義とする。

857 :デフォルトの名無しさん:02/11/12 07:56
>>855です。実は今日買わなきゃなんです。使える本であることを希望します。

858 :デフォルトの名無しさん:02/11/12 07:57
でもここの人っていい人ばかりですね。

859 :デフォルトの名無しさん:02/11/12 07:57
もうすぐ次スレの季節だが、気が向いたら >>35-36 を拾ってくれ。

860 :デフォルトの名無しさん:02/11/12 08:35
なら、ついでに。

32 http://pc3.2ch.net/test/read.cgi/tech/1031905402/
31 http://pc3.2ch.net/test/read.cgi/tech/1031340950/
30 http://pc3.2ch.net/test/read.cgi/tech/1030786546/
29 http://pc3.2ch.net/test/read.cgi/tech/1029605182/
28 http://pc3.2ch.net/test/read.cgi/tech/1028495798/
27 http://pc3.2ch.net/test/read.cgi/tech/1027160374/

861 :デフォルトの名無しさん:02/11/12 09:14
をを。

しかし、dat 落ちのままのスレが 12 本って、このスレの回転が無駄に早い事が
分かるな (;´Д`)

862 :デフォルトの名無しさん:02/11/12 10:55
>>861
やはり、Cの未定義の結果は多くの場合、coreを吐くからな。
(core = 煽り合い)
仕方がない

863 :デフォルトの名無しさん:02/11/12 12:35
>>843-853大ワロタ

864 :JPS ◆M0LaMzf5rY :02/11/12 15:58
ビット演算の勉強はかどりますた。

865 :デフォルトの名無しさん:02/11/12 16:28
やべー。
860 の文字列が全部、スラッシュで区切られた 「ワラタ」 に見えたYO・・・
眼科に逝くべきか、精神科に逝くべきか。

866 :デフォルトの名無しさん:02/11/12 16:39
どういう意味や・・・・
http://ワラタ.ワラタ.ワラタ/ワラタ/ワラタ.ワラタ/ワラタ/ワラタ/

見えるかいな

867 :60cm浮き上がるストレート:02/11/12 16:42
printf等で値を外からを与えることで幅を変える事は出来ますか?
うまく説明できませんが、printf("%s","%-30s","abcde");みたいに。
今は、あらかじめ幾つも作っとく方法でやっているのですが.

868 :デフォルトの名無しさん:02/11/12 16:45
sprintfでつくってprintfかな。

869 :デフォルトの名無しさん:02/11/12 16:45
>>867
マニュアルを読め、printf/scanfは奥が深い
int a = 5;
printf("%*.*s\n", a, a, "abcdefg");
a = 20;
printf("%*.*s\n", a, a, "abcdefg");

870 :デフォルトの名無しさん:02/11/12 17:11
すいませんまだCを初めて間も無い厨です
質問したいんですが
文字列と文字を一緒に出力しようとすると
なぜか文字だけ出力されません
具体的には
#include <stdio.h>
main()
{
char ch[100];
char c;
printf("文字列:"); scanf("%s", ch);
printf("文字:"); scanf("%c", &c);
printf("\"%s\"\n", ch);
printf("\'%c\'\n", c);
return 0;
}

とやるとscanf("%c", &c);を読みこんでくれないようなのです
ちなみに文字列なしで文字単体のプログラムをするとちゃんと出力されました
どなたか知恵をお借りしください

871 :デフォルトの名無しさん:02/11/12 17:15
> どなたか知恵をお借りしください
ヘンナニホンゴネ

872 :60cm浮き上がるストレート:02/11/12 17:16
>>868->>869
お答えありがとうございました.
>>868
その方法は調べて勉強してみます.
>>869
あるだろうと思ってたんですが、あったんですね.文字列に割り込めるやつ.
1つ目の*は従来のスペース幅を替えるやつ。引数をマイナルにすれば左寄りになる.
2つ目の.*は始めて見たのですが、どうやら表示文字数を変えるやつみたいですね.
文字列が10文字でも.5なら先頭から5文字だけ表示する。
ただこれは文字列専用のようで、%ldとかだと効かないみたいです.

873 :870:02/11/12 17:23
>>871
お貸し下さい
でしたすいませんm(__)m

874 :デフォルトの名無しさん:02/11/12 17:32
printf("文字:"); scanf("%1s", &c);


875 :デフォルトの名無しさん:02/11/12 17:39
>>870
> 文字列と文字を一緒に出力しようとすると
> なぜか文字だけ出力されません
はて、ちゃんと「改行文字」が出力されているはずだけどな。

多分
> printf("文字:"); scanf("%c", &c);
printf("文字:"); scanf(" %c", &c);
こうすれば、(%cの前にスペースを入れる)君の思ったとおりの動作をするはずだ、
なんでそうなるかはマニュアルを見ろ。

876 :デフォルトの名無しさん:02/11/12 17:43
>>874
%1sって\0入れない?

877 :870:02/11/12 18:04
みなさんありがとうございます解決しました!
いくつかやり方があるようなのでその辺の仕組みは調べてみます
>>875
まさにその通りです

文字列:hogehoge
文字:"hogehoge"
'
'
こんな感じで改行だけされてました

878 :デフォルトの名無しさん:02/11/12 19:39
#include<stdio.h>
#include<search.h>
#include<string.h>
#define MAXDATAS 20
#define MAXCHARS 20

int lencmp(char **ax,char **ay)
{
if(strlen(*ax)<strlen(*ay)) return(-1);
if(strlen(*ax)>strlen(*ay)) return(1);
return(0);
}
int main(void)
{
int i,j;
char *point_date[MAXDATAS];
char buff[MAXDATAS][MAXCHARS];
for(i=0;i<MAXDATAS;++i)
{
printf("Input string[%02d]:",i+1);
point_date[i]=&buff[i][0];
gets(point_date[i]);
if(0==*point_date[i]) break;
}

qsort(point_date,i,sizeof(char *),lencmp);
printf("\n<Sorting>\n");
for(j=0;j<i;++j)
printf("%2d:%s\n",j+1,point_date[j]);
}
でコンパイルしようとしてもエラーが出てできません。エラーの内容も読みましたが知識?不足でよく分かりません
だれか教えてください!おねがいします。

879 :デフォルトの名無しさん:02/11/12 19:48
>>878
qsort()の行をこうしてみれ。

qsort(point_date,i,sizeof(char *),(int (*)(const void *, const void *))lencmp);

880 :デフォルトの名無しさん:02/11/12 20:07
>>878
stdlib.hをインクルードしていないから

エラーじゃなくて警告じゃない?

881 :デフォルトの名無しさん:02/11/12 20:10
C言語の一番大元の仕様書(ANSI?)ってどうやったら手に入れられます?

882 :デフォルトの名無しさん:02/11/12 20:10
>>880
qsort()ならsearch.hをインクルードしてるから大丈夫だよ。

883 :880:02/11/12 20:11
あとgccなんかだとimcompatible pointer typeと警告が出るかも。
消したかったらint lencmp(char **ax,char **ay)をint lencmp(const void *ax,const void *ay)とし、中で適切にキャストするとよい。

884 :883:02/11/12 20:13
s/imcompatible/incompatible/

>>882
そうなの!?
search.hなんてしらねー(T_T)

885 :デフォルトの名無しさん:02/11/12 20:17
>>878
エラーメッセージがわからなかったら、それをここに貼るといいよ。


886 :デフォルトの名無しさん:02/11/12 20:35
>>881
> C言語の一番大元の仕様書(ANSI?)ってどうやったら手に入れられます?

ISO/IEC 9899:1999はhttp://www.ansi.org/で$225で売ってる。
ISO/IEC 9899-1999はhttp://www.ansi.org/で$18で売ってる。
JIS X3010‐1993:はhttp://www.jsa.or.jp/で8000円で売っている。
JISのC99はまだ出てない。

887 :デフォルトの名無しさん:02/11/12 20:38
Cでwindows上で動くアプリって作れるんですよね?
で、今後の目標に、Cではどんなアプリが作れるのか見たいのですが
Cで作られたアプリってどんなのがありますか?


888 :デフォルトの名無しさん:02/11/12 20:40
http://pc3.2ch.net/test/read.cgi/tech/1037101156/

まだ早いかと思いましたが、新スレたてました。
950くらいまではこちらを使ってください。

889 :881:02/11/12 20:40
>>886
どうもっす。

890 :デフォルトの名無しさん:02/11/12 20:43
>>887
面倒なだけでどんなアプリでも作れる。

891 :デフォルトの名無しさん:02/11/12 20:44
>>887
数え切れないけど、例えばお馴染みのFFFTP
http://www2.biglobe.ne.jp/~sota/ffftp.html

892 :デフォルトの名無しさん:02/11/12 20:45
>>887
普通のアプリなら、なんでも作れるよ。
ドライバとかは、もしかしたらアセンブラが必要かも知れないけど

893 :デフォルトの名無しさん:02/11/12 20:47
>>887
> Cでwindows上で動くアプリって作れるんですよね?
C + Win32Apiを使えば大概のものは作れる。

894 :878:02/11/12 21:12
879さんのおかげで無事コンパイルできました!サンクスです!

895 :デフォルトの名無しさん:02/11/12 21:20
あげ

896 :デフォルトの名無しさん:02/11/12 21:38
Cで子供も作れる

897 :デフォルトの名無しさん:02/11/12 21:39
>>896
もうネタはいいよ・・・

898 :JPS ◆M0LaMzf5rY :02/11/12 21:54
おいお前ら!ここは質問すれだろ!
論争するならこっちでやれ!おれがたててやったYO!
http://pc3.2ch.net/test/read.cgi/tech/1037105440/l50

899 :デフォルトの名無しさん:02/11/12 21:56
>>898 厨房氏ね

900 :デフォルトの名無しさん:02/11/12 21:57
#include <stdio.h>

main()
{
int dec, bin=0, bit, coef=1;
char endchar;
do{
scanf("%d%c",&dec,&endchar);
printf("%3d\t",dec);
while(dec != 0){
bit = dec % 2;
dec /= 2;
bin += bit*coef;
coef *= 10;
}
printf("%10d\n", bin);
}while(endchar != '*');
}

10進数→2進数のプログラム。参考書どおりに打ったのにちゃんとでてきませぬ。
13, 10, 8, 7, 5, 3*と打つと、最初の13は正しく出るのですが、10以降はボロボロ…
「おまいのここが違ってる!!」というのがあったら教えてください。
おながいします。

901 :デフォルトの名無しさん:02/11/12 21:59
ちなみに動作環境はOSがXP、「Borland C++ Compiler 5.5.1」で「C言語を始めよう」を使ってます。

902 :デフォルトの名無しさん:02/11/12 22:07
>>900
coefがループごとに初期化されてない。

903 :デフォルトの名無しさん:02/11/12 22:18
char a[10] = {'\0'};

char a[10] = {0};
はどちらも全要素0で初期化されますよね?

904 :デフォルトの名無しさん:02/11/12 22:19
>>903
される。つーか何度もその話題は出ている

905 :デフォルトの名無しさん:02/11/12 22:25
>>904
何度でたか知らんが、オレは初めて見た。
お前のために地球が回ってるんじゃねーんだよ?

906 :デフォルトの名無しさん:02/11/12 22:30
>>905
いや、十分FAQだと思うよ。

907 :デフォルトの名無しさん:02/11/12 22:32
>>905
それはただ単におまえが無知なだけだ

908 :デフォルトの名無しさん:02/11/12 22:34
>>905
わけのわからん煽りだな。

905=903に違いない。

909 :デフォルトの名無しさん:02/11/12 22:38
配列の要素a[1]を1[a]と表せると聞いたんですが1という配列のa・・・?
変数名の先頭に数字は使えないはずですよね?

910 :デフォルトの名無しさん:02/11/12 22:39
>>909
a[1] == 1[a] = *(a + 1) == *(1 + a)

911 :デフォルトの名無しさん:02/11/12 22:43
>>905
>>801

つい最近出たばっか。>>905は過去ログを読まないDQNの典型。

912 :デフォルトの名無しさん:02/11/12 22:45
>>910
意味不明

913 :≠909:02/11/12 22:45
>>910
そういうのはどこで習うんすかね。
どういう本を読めばいいんですか。

914 :デフォルトの名無しさん:02/11/12 22:47
910 は意味不明
a[1] == *(a + 1) == *(1 + a) == 1[a]
だろ?

915 :デフォルトの名無しさん:02/11/12 22:47
>>912
お前が意味不明。

916 :915:02/11/12 22:47
>>915
俺が意味不明だった。

917 :デフォルトの名無しさん:02/11/12 22:52
>>913=>>905の予感


918 :デフォルトの名無しさん:02/11/12 22:56
回答がテンプレート化するほど既出なのはわかるが(なんせスレ41)
簡潔すぎて初心者にはわかりにくいスレになってしまったのかも

919 :デフォルトの名無しさん:02/11/12 23:13
寂れたねぇ

920 :デフォルトの名無しさん:02/11/12 23:13
錆レターね

921 :デフォルトの名無しさん:02/11/12 23:15
だれか前40スレを読破して、FAQつくらないかなぁ。

まあFAQ作っても読まない香具師はいるだろうが、、、

922 :デフォルトの名無しさん:02/11/12 23:18
俺もそういうの考えたことある。<CスレFAQ

923 :デフォルトの名無しさん:02/11/12 23:24
>>902
binとcoefの初期値設定の場所を変えたら成功しますた。ありがとうございます。

924 :デフォルトの名無しさん:02/11/12 23:26
そうですね、どんどん大きくなりっぱなしってね

925 :デフォルトの名無しさん:02/11/12 23:28
早く質問こないかな

926 :デフォルトの名無しさん:02/11/12 23:31
正直言ってa[1]を1[a]なんて書く必要なんてないわけで
コンパイルエラーになってくれたほうが良い。


927 :デフォルトの名無しさん:02/11/12 23:31
まーねー

928 :デフォルトの名無しさん:02/11/12 23:35
x["0123456789abcdef"]

929 :デフォルトの名無しさん:02/11/12 23:46
お前ら、何でCには真偽値型がないんだ。
if(flag==true)
って書くと期待通りに動かないじゃないか、この糞言語め。

930 :デフォルトの名無しさん:02/11/12 23:46
>>928
何それ?文字列の中のxの位置の文字ってこと?

931 :デフォルトの名無しさん:02/11/12 23:49
>>930
すぐ上の914で出たばかりですが。

932 :デフォルトの名無しさん:02/11/12 23:50
"0123456789abcdef"[x]

933 :デフォルトの名無しさん:02/11/12 23:53
>>929
> if(flag==true)

真偽値のある言語でも、こういう書き方してるのって素人くさいと思う。


934 :デフォルトの名無しさん:02/11/12 23:53
"01234567[x]89abcdef"


935 :デフォルトの名無しさん:02/11/12 23:56
これぐらいで文句をいってはいけない。
その昔、構造体のメンバのアクセス演算子が
! 立ったころ、 foo!bar を bar!foo と
書くことができたんだそうな。

936 :デフォルトの名無しさん:02/11/12 23:57
>>930
2進16進変換で使うだろ。

937 :デフォルトの名無しさん:02/11/12 23:58
>>933
真偽値のない言語を使ってるヤツからはそう見える。

938 :デフォルトの名無しさん:02/11/12 23:59
いい加減釣りは余所でやってくれ。

939 :デフォルトの名無しさん:02/11/13 00:01
>>936
使いません。

940 :デフォルトの名無しさん:02/11/13 00:01
>>937
おまいが C 言語しか触ったことないのバレバレなんだが

941 :デフォルトの名無しさん:02/11/13 00:06
>>940
何で分かったの?不思議。

942 :デフォルトの名無しさん:02/11/13 00:08
> if(flag==true)

なぜ
if ((flag == true) == true)
と書かないんだ?

943 :デフォルトの名無しさん:02/11/13 00:09
>>942
プ)
お前こそ C 言語しか触ったことないのバレバレ


944 :デフォルトの名無しさん:02/11/13 00:11
bool 型がある言語だとこんあ漢字?

if flag = true then ...
if flag then ...

if a = b then f := true else f := false;
f := a = b;



945 :デフォルトの名無しさん:02/11/13 00:12
>>942
if(flag)だけだとflagが真偽値が明確ではない。
if(flag==true)だとflag真偽値であるのが明確。
if((flag==true)==true)は既にflagが真偽値であるのが明確なので無意味。

946 :945:02/11/13 00:14
分かると思うけど一応訂正。
× if(flag)だけだとflagが真偽値が明確ではない。
○ if(flag)だけだとflagが真偽値であるか明確ではない。

947 :デフォルトの名無しさん:02/11/13 00:14
>>945
いいから黙って if(flag) を使っとけ。これ最強。

948 :デフォルトの名無しさん:02/11/13 00:19
>>947 苦し紛れだね

949 :デフォルトの名無しさん:02/11/13 00:22
if文が実行されれば真、されなければ偽。これほど明確なことがあるか。

950 :デフォルトの名無しさん:02/11/13 00:23
見て、勝手使って http://rec.ncos.co.jp
で診断してもらった方がいいね。

951 :デフォルトの名無しさん:02/11/13 00:25
>>949 ほらね。実行しなきゃわかんないんだろ。

952 :デフォルトの名無しさん:02/11/13 00:26
bool flag2 = (flag==true);
if(flag2==true) {
}

ここまでやれば完璧。誰が読んでも明白。

953 :デフォルトの名無しさん:02/11/13 00:27
>>951
バカか。
if(flg==true)
と書いたって実行しなきゃわからんだろ。

954 :デフォルトの名無しさん:02/11/13 00:28
#define flag true

955 :945:02/11/13 00:31
>>953
実行しないで(ぱっと見るだけで)分かるのはflagの型。

956 :デフォルトの名無しさん:02/11/13 00:32
>>952
それは結局。if(flag==true)と同じなんだけど...

957 :デフォルトの名無しさん:02/11/13 00:34
>>955
見るだけで何がわかるんだよ。
flgは真偽しか返さないのにいったい他に何がわかるんだ。

958 :デフォルトの名無しさん:02/11/13 00:37
>>957
flagの型って書いてあるだろ。まあコーディング規約でflagは真偽しか
返さないと決めてあるのなら別だが。

959 :デフォルトの名無しさん:02/11/13 00:38
if(flag)//flag is true or false
kanpeci

960 :デフォルトの名無しさん:02/11/13 00:39
>>958
どうしても型が知りたいっていうなら別だが・・・
型を知ってどうするんだ?
そこで型がわかったところで意味ないと思うんだが。

961 :デフォルトの名無しさん:02/11/13 00:39
#define isTrue(x) x!=0

962 :デフォルトの名無しさん:02/11/13 00:42
>>960
可読性が上がるだろ。

963 :デフォルトの名無しさん:02/11/13 00:46
if(flag)より
if(flag==true) の方が可読性で勝ると思ってる奴は初心者。

964 :デフォルトの名無しさん:02/11/13 00:48
ふむ。


965 :デフォルトの名無しさん:02/11/13 00:49
gcc version 2.95.4

#include <stdio.h>
#define N 4
int main(void)
{
  int j;
  char a[N] = "";

  for (j=0;j<N;j++)
    printf("%d ", (int)a[j]);
  return 0;
}
$ ./a.out
0 37 100 32
なんかゴミが入るんだよなぁ。

c99 6.7.8 12
If there are fewer initializers in a brace-enclosed list than there are
elements or members of an aggregate, or fewer characters in string literal
used to initialize an array of known size than there are elements in the
array, the remainder of the aggregate shall be initialized implicitly the
same as objects that have static storage duration.


966 :デフォルトの名無しさん:02/11/13 00:49
a. 明日雨が降ったら、遊びに行くよ。
b. 明日雨が降ったら、が真なら、遊びに行くよ。


967 :デフォルトの名無しさん:02/11/13 00:49
>>963
反論できないから初心者ということにして誤魔化すことしかできない程度

968 :デフォルトの名無しさん:02/11/13 00:50
>>966
a. 旗だったら、遊びに行くよ。
b. 旗が立ったら、遊びに行くよ。



969 :デフォルトの名無しさん:02/11/13 00:52
要はflagがbool変数かどうかを知りたいってこったな。
つまりそれがC99で書かれていることが読み取れるわけだ。
(´_ゝ`)ふーん

970 :デフォルトの名無しさん:02/11/13 00:52
>>968
えらく自分の都合のいいように解釈してるな(w

971 :デフォルトの名無しさん:02/11/13 00:53
>>970
そう解釈できるのだから間違ってないだろ。

972 :デフォルトの名無しさん:02/11/13 00:54
俺あんな次スレやだよ。伝統守って欲しいよ。だからこれきぼん。

--------------------
C言語のことは漏れに聞け!char *c[42];

漏まえら、C言語のことなら漏れに聞け。

問題をちゃんと切り分けて、Cの話かそうでないか洗ってから質問してくれ。
というより、聞く前に一応 Web で検索しろ。
コンパイラを探してるなら >>2 を見ろ。

GUIとか、C標準でできない事の質問は使ってる開発環境のスレに逝ってくれ。
ソース丸投げ、宿題、書籍 は専門の別スレがあるからそこへ逝ってくれ。

上記を守らない書き込みをした場合、その結果は禿しく未定義とする。

C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
comp.lang.c FAQ(英語の原文)
http://www.eskimo.com/~scs/C-faq/top.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
推薦図書/必読書のためのスレッド PART6
http://pc3.2ch.net/test/read.cgi/tech/1033207156/

前スレ
c[41] = "http://pc3.2ch.net/test/read.cgi/tech/1036876790/";

973 :デフォルトの名無しさん:02/11/13 00:54
>>969
自分で何を言っているか分かっていますか?

974 :デフォルトの名無しさん:02/11/13 00:55
ずいぶん新着レス数多いなと思ったら・・・・香ばしいな

975 :次スレの>>3:02/11/13 00:55
c[40] = "http://pc3.2ch.net/test/read.cgi/tech/1036673739/";
c[39] = "http://pc3.2ch.net/test/read.cgi/tech/1036409391/";
c[38] = "http://pc3.2ch.net/test/read.cgi/tech/1035729526/"; // 待機中
c[37] = "http://pc3.2ch.net/test/read.cgi/tech/1035623265/"; // 待機中
c[36] = "http://pc3.2ch.net/test/read.cgi/tech/1035211039/"; // 待機中
c[35] = "http://pc3.2ch.net/test/read.cgi/tech/1034337064/"; // 待機中
c[34] = "http://pc3.2ch.net/test/read.cgi/tech/1033240509/"; // 待機中
c[33] = "http://pc3.2ch.net/test/read.cgi/tech/1032606064/"; // 待機中
c[32] = "http://pc3.2ch.net/test/read.cgi/tech/1031905402/";
c[31] = "http://pc3.2ch.net/test/read.cgi/tech/1031340950/";
c[30] = "http://pc3.2ch.net/test/read.cgi/tech/1030786546/";
c[29] = "http://pc3.2ch.net/test/read.cgi/tech/1029605182/";
c[28] = "http://pc3.2ch.net/test/read.cgi/tech/1028495798/";
c[27] = "http://pc3.2ch.net/test/read.cgi/tech/1027160374/";
c[26] = "http://pc.2ch.net/tech/kako/1026/10260/1026048820.html";
c[25] = "http://pc.2ch.net/tech/kako/1024/10249/1024918442.html";
c[24] = "http://pc.2ch.net/tech/kako/1024/10240/1024033400.html";
c[23] = "http://pc.2ch.net/tech/kako/1022/10224/1022402165.html";
c[22] = "http://pc.2ch.net/tech/kako/1022/10224/1022402165.html";
c[21] = "http://pc.2ch.net/tech/kako/1022/10220/1022045622.html";

976 :次スレの>>4:02/11/13 00:56
c[20] = "http://pc.2ch.net/tech/kako/1021/10214/1021459016.html";
c[19] = "http://pc.2ch.net/tech/kako/1020/10207/1020756993.html";
c[18] = "http://pc.2ch.net/tech/kako/1020/10202/1020260813.html";
c[17] = "http://pc.2ch.net/tech/kako/1019/10193/1019372139.html";
c[16] = "http://pc.2ch.net/tech/kako/1018/10184/1018453690.html";
c[15] = "http://pc.2ch.net/tech/kako/1016/10165/1016519243.html";
c[14] = "http://pc.2ch.net/tech/kako/1015/10152/1015286974.html";
c[13] = "http://pc.2ch.net/tech/kako/1013/10139/1013990673.html";
c[12] = "http://pc.2ch.net/tech/kako/1012/10123/1012348974.html";
c[11] = "http://pc.2ch.net/tech/kako/1009/10094/1009499565.html";
c[10] = "http://pc.2ch.net/tech/kako/1008/10083/1008300863.html";
c[9] = "http://pc.2ch.net/tech/kako/1007/10072/1007272267.html";
c[8] = "http://pc.2ch.net/tech/kako/1005/10058/1005811510.html";
c[7] = "http://pc.2ch.net/tech/kako/1005/10058/1005811510.html";
c[6] = "http://piza2.2ch.net/tech/kako/999/999617524.html";
c[5] = "http://piza2.2ch.net/tech/kako/994/994908590.html";
c[4] = "http://piza.2ch.net/tech/kako/992/992357382.html";
c[3] = "http://piza.2ch.net/tech/kako/989/989929288.html";
c[2] = "http://piza.2ch.net/tech/kako/979/979529893.html";
c[1] = "http://piza.2ch.net/tech/kako/967/967985026.html";


977 :次スレの>>4:02/11/13 00:56
>>973
型が知りたいんだからそういうことだろ。

978 :デフォルトの名無しさん:02/11/13 00:59
flag の型が知りたいから
if ( flag == true )
とするってならこんどは (flag == true) の型を知るために
if ( (flag == true) == true )
こうしなければならない。さらに ((flag == true) == true) の型を知るために(略

979 :デフォルトの名無しさん:02/11/13 01:00
bool型があるならまだいいけど無いならあんまり必要性感じないなぁ<true比較

980 :デフォルトの名無しさん:02/11/13 01:02
C99じゃないならflagの型を知りたいと言ってもintの可能性があるんだろ?
じゃあ型がわかったことにならないんじゃ。

981 :デフォルトの名無しさん:02/11/13 01:05
むしろ
int flg;
とかやってるのに
if(flg == true)
を見ただけで「flgには0か1しか入っていないはず!」と勘違いする可能性が…
でも実はflg=5;とかできちゃうわけで。

982 :デフォルトの名無しさん:02/11/13 01:06
よし。
if(!!flag == true)
これなら一石二鳥だ。

>>972
面白いね。
> C言語のことは漏れに聞け!char *c[42];
この辺まで考えてるとは。

983 :デフォルトの名無しさん:02/11/13 01:09
>>982
ちょっとわかりにくいタイトルかなとは思ったんだけど、配列のインデックスが0から始まるC
だとちょうどタイトルの番号と過去スレの番号が収まっていいかなと

984 :デフォルトの名無しさん:02/11/13 01:10
>>981
intとboolを比較したら普通はエラーだろ?

985 :デフォルトの名無しさん:02/11/13 01:11
>>978
if(flag)だけだとflagが真偽値であるか明確ではない。
if(flag==true)だとflag真偽値であるのが明確。
if((flag==true)==true)は既にflagが真偽値であるのが明確なので無意味。

986 :デフォルトの名無しさん:02/11/13 01:11
flagなんていう抽象的な名前で考えるから分らない。
たとえば具体的に
int error_occurred;
のとき
if (error_occurred == true)
なんて書いてたらただのDQNだろ。

987 :デフォルトの名無しさん:02/11/13 01:13
>>942
なぜ
if (((flag == true) == true) == true)
と書かないのかと小一時間…

988 :デフォルトの名無しさん:02/11/13 01:15
ユーザーが指定した数をカウントする関数作り
i2=3;
j2=4;
ij=i2*j2;
if((str1=(int**)malloc(sizeof(int*)*i2))==NULL){
printf("メモリー確保の失敗:1");
exit(1);
}
for(i1=0;i1<i2;i1++)
if((str1[i1]=(int*)malloc(sizeof(int)*j2))==NULL){
printf("メモリー確保の失敗:2");
exit(1);
}


for(i1=0;i1<ij;i1+=j2){
putchar('\n');
for(j1=0;j1<j2;j1++){
printf("%c",str1[i1/j2][(len++)%i2]=('A'+i1+j1));
}
}
putchar('\n');
for(i1=0;i1<i2;i1++){
putchar('\n');
for(j1=0;j1<j2;j1++)
printf("%3d",str1[i1][j1]);
}

989 :デフォルトの名無しさん:02/11/13 01:15
あのーC99より前のCにtrueやfalseという予約語ありませんよね?

990 :デフォルトの名無しさん:02/11/13 01:16
>>987
だから足りない情報(boolであるか)は一つ目のtrueで補えているから二つ目以降は必要ないだろ。

991 :デフォルトの名無しさん:02/11/13 01:16
>>985
if ( flag == true )
だと flag が真偽値であることは明確だが
(flag == true) が真偽値であることは明確ではない。

992 :デフォルトの名無しさん:02/11/13 01:17
次はあのスレ行かなきゃダメなのか・・・鬱

993 :デフォルトの名無しさん:02/11/13 01:17
>>991
(flag==true)は真偽値を返すことになっているはずだが。

994 :988:02/11/13 01:18
 このユーザーが、指定した数をカウントする関数を教えて・・・・

995 :デフォルトの名無しさん:02/11/13 01:18
        まもなくここは 乂1000取り合戦場乂 となります。

      \∧_ヘ     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ,,、,、,,, / \〇ノゝ∩ < 1000取り合戦、いくぞゴルァ!!       ,,、,、,,,
    /三√ ゚Д゚) /   \____________  ,,、,、,,,
     /三/| ゚U゚|\      ,,、,、,,,                       ,,、,、,,,
 ,,、,、,,, U (:::::::::::)  ,,、,、,,,         \オーーーーーーーッ!!/
      //三/|三|\     ∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ∪  ∪       (    )    (     )   (    )    )
 ,,、,、,,,       ,,、,、,,,  ∧_∧∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ,,、,、,,,       (    )    (    )    (    )    (    )


996 :デフォルトの名無しさん:02/11/13 01:19
>>994
今それどころじゃないんだ。

997 :デフォルトの名無しさん:02/11/13 01:19
if ( DQN ) abone();
もし DQN なら あぼーん
if ( DQN == true ) abone();
もし DQN が 真 なら あぼーん

998 :982:02/11/13 01:19
>>983
今回はもう手遅れっぽいけど、次のスレでは
是非この案を採用して欲しいと願ふ。

999 :988:02/11/13 01:19
 おしえて

1000 :1000:02/11/13 01:20
>>1001
んなこた〜わかってんだよ。いちいちウザイぞボケ。

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

201 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)