トップページ⇒tech
1001コメント251KB

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

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさんNGNG
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/
0002デフォルトの名無しさんNGNG
>>1
おつ!
00032NGNG
やっべ!
2はコンパイラ用だった、、スマソ
0004デフォルトの名無しさんNGNG
【コンパイラ】
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
0005デフォルトの名無しさんNGNG
>>1
聞けを訊けにしろとあれほど......
0006デフォルトの名無しさんNGNG
        まもなくここは 乂1000取り合戦場乂 となります。

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

http://big.freett.com/scheme_a/num1000.swf
0007デフォルトの名無しさんNGNG
>>2
ワラタ
0008デフォルトの名無しさんNGNG
1000!
00091NGNG
>>5
前スレの >>990 に「訊け」を「聞け」にしてくれと
言われたからそうしたんだが。
0010デフォルトの名無しさんNGNG
>>8
二進数かよ!
00111NGNG

誰か過去スレ一覧を取得できる人がいたら載せてちょ。
0012デフォルトの名無しさんNGNG
>>9=1
なにぃっ!おいっ、責任者(前スレ990)出てこいっ!
0013デフォルトの名無しさんNGNG
誰だよ前スレの 990 は・・・。
1 も、漢字の意味を考えてくれ。

つーか、前スレを凄い勢いで終了させたのは誰だ。
00142NGNG
>>12-13
なぁに?
訊←この漢字が格好悪いから。
0015デフォルトの名無しさんNGNG
次からスレ立てる人は、>>6 の AA デフォな。
0016デフォルトの名無しさんNGNG
>>14=2
ばかもんがぁ!しかも2getするという失態までおかしおって!
0017デフォルトの名無しさんNGNG
そろそろC言語の話題をしよう。
0018デフォルトの名無しさんNGNG
>>14 は、死ね・くたばれ・消えろ・失せろ・潰れろ・馬鹿・あほ・間抜け・ドジ。
ポンコツ・トンチキ・ガラクタ・クズ・ゴミ・カス・最低以下の下劣・下等種族。
劣等種族・下衆野郎・腐れ外道・邪道・外道・非道・ウジ虫・害虫・ガン細胞。
ウィルス・ばい菌・疫病神・病原体・汚染源・公害・ダイオキシン・有毒物質。
廃棄物・発ガン物質・猛毒・毒物・アメーバ・ダニ・ゴキブリ・シラミ・ノミ。
毛虫・蠅・蚊・ボウフラ・芋虫・掃き溜め・汚物・糞・ゲロ・糞虫野郎・ほら吹き。
基地外・デタラメ・ハッタリ・穀潰し・ろくでなし・ごろつき・ヤクザ者。
社会の敵・犯罪者・反乱者・前科者・インチキ・エロ・痴漢・ゴミ・シデムシ。
ゴミ虫・毒虫・便所コオロギ・詐欺師・ペテン師・道化師・危険分子・痴呆・白痴。
魔物・妖怪・悪霊・怨霊・死神・貧乏神・奇天烈・奇人・変人・毒ガス・サリン。
ソマン・マスタードガス・イペリット・クソブタ・ブタ野郎・畜生・鬼畜・悪鬼。
邪気・邪鬼・ストーカー・クレイジー・ファッキン・サノバビッチ・シット・ガッデム。
小便・便所の落書き・不要物・障害物・邪魔者・除け者・不良品・カビ・腐ったミカン。
土左衛門・腐乱・腐臭・落伍者・犯人・ならず者・チンカス・膿・垢・フケ・化膿菌。
放射能・放射線・鬼っ子・異端者・妄想・邪宗・異教徒・恥垢・陰毛・白ブタ。
0019デフォルトの名無しさんNGNG
ケダモノ・ボッコ・ろくでなし・VXガス・ヒ素・青酸・監獄・獄門・さらし首。
打ち首・市中引きずり回し・戦犯・絞首刑・斬首・乞食・浮浪者・ルンペン・物乞い。
放射性廃棄物・余命1年・アク・割れたコップ・精神年齢7歳・3審は必要なし。
不良品、規格外、欠陥品、不要物、埃、掃き溜め、吹き溜まり、塵埃、インチキ、居直り。
ふてぶてしい、盗人、盗賊、残忍、残酷、冷酷、非情、薄情者、ガキ、クソガキ。
ファッキン、ガッデム、サノバビッチ、シット、ブルシット、ボロ、ボッコ、妄信。
狂信者、有害物質、毒薬、猛毒、発ガン物質、誇大妄想狂。
他人の悪口は山ほどほざくが反省は一切しないガキ根性野郎、腐れ根性。
腐って歪んだプライドの持ち主、狭量、ボケ、ボケナス、アホンダラ、たわけ。
怠け者、無能、無脳、脳軟化症、思考停止、アメーバ、単細胞、蠅、蚊、カビ。
腐敗、膿、下劣、下等生物、劣等種族、クレイジー、マッド、ストーカー。
人格障害、守銭奴、見栄っ張り、ええ格好しい、粗製濫造品、偽物、似非
イカレ、乞食、浮浪者、ルンペン、狼藉者、放蕩息子、道楽息子、極道息子。
迷惑、困りもの、厄介者、村八分、異端者、アウトサイダー
大虐殺者。ナチスドイツ、731部隊、ポルポト派らと同類。

そして、こんな悪口を言うために労力を使う価値もないクズ
00202NGNG
>>16
スマソ
リッチーとともに逝ってくる
0021デフォルトの名無しさんNGNG
>>20
ダイクストラによろしくな。
00222NGNG
>>19
> ふてぶてしい、

これは正解
0023デフォルトの名無しさんNGNG
>>20
まさにカーニ犯
なんちゃって
002418-19NGNG
>>22
まあ、お約束の AA (?) という事で。
0025デフォルトの名無しさんNGNG
インフォシークの国語辞典を「聞く」で調べたら

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

とあったぞ。
「訊く」ではヒットしなかったし、別にいいんでない?
00262NGNG
>>24
分かっているよ。
随分とまた懐かしいコピペだ。
0027デフォルトの名無しさんNGNG
きく、なんてややこしい言葉使うからダメなんだ
次から
「C言語のことなら朕に尋ねよ」
にしよう
0028デフォルトの名無しさんNGNG
(・ロ・)ホ,('ロ')ホ--ッッ!!!… C言語質問スレ PartX

これがいい。
0029デフォルトの名無しさんNGNG
つーか周りに合わせて、「C 相談室」 でいいやん。
元々のスレタイが、ビルジョブスの好き勝手で付けたものだし。
0030デフォルトの名無しさんNGNG
「C (゚д゚)ウマ-」 「C (゚Д゚)ハァ?」 「C (・∀・)イイ!!」 「C ( ´,_ゝ`)フーン」 「C ヽ(´ー`)ノ ヤレヤレ」 「C (゚∀゚) アヒャ」
0031デフォルトの名無しさんNGNG
いっそシンプルに「C」だけでいいんじゃない?
0032デフォルトの名無しさんNGNG
見つけにくいだろ
0033デフォルトの名無しさんNGNG
C, or not C. That's the question.
0034デフォルトの名無しさんNGNG
「Cと、土曜深夜の愉快な仲間たち」
0035デフォルトの名無しさんNGNG
>>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
0036デフォルトの名無しさんNGNG
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 がどうしても見つけられなかった。
00371NGNG
>>35-36
おお!どうもありがとう。
0038デフォルトの名無しさんNGNG
http://piza.2ch.net/tech/kako/967/967985026.html

Part1の>>1って痛いな、、、
0039デフォルトの名無しさんNGNG
20 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/09/04(月) 00:50
悲惨な1スレの予感…
0040デフォルトの名無しさんNGNG
まだ起きてるのか・・・
0041デフォルトの名無しさんNGNG
今は何してるんだろう・・・
93 名前: ビル・ジョブス 投稿日: 2000/09/09(土) 16:17
>91
おぅ!そりゃ知ってるよ!おまえみたいなおバカなクソガキに
言われるまでもない。
ちなみに今は、CEがメインだからUnicodeオンリーだけどな!
0042デフォルトの名無しさんNGNG
誰か 35-36 のサマリー作る勇気のある奴いないか?
0043デフォルトの名無しさんNGNG
アサートすると、標準出力にメッセージを出しますよね? ね?
でも、クロス環境などで、ターゲットに標準出力がないばあい、やっぱ
アサートさんを書き換えないとだめ? ですよねえ、きっと....
0044BooleanならNGNG
if(BOOL)、
if(!BOOL) or if(!(BOOL))
だよ!==は絶対変だよ!
0045デフォルトの名無しさんNGNG
またコテハン考えなきゃだめってことか・・・
0046デフォルトの名無しさんNGNG
>>44
一生やってろ!
0047デフォルトの名無しさんNGNG
math.hのpow()ってどういうアルゴリズムになってるんでしょうか?
ググったんですが、いいサイトが見つからなくて…
0048デフォルトの名無しさんNGNG
ソース見ればよい
0049デフォルトの名無しさんNGNG
前スレにでてたと思うが。
0050デフォルトの名無しさんNGNG
>>49
あ、そうなんですか。見てみます。

>>48
そう思ったんですが、どうやって見るのか分からなかったので…
すみません。
0051デフォルトの名無しさんNGNG
>>47
アホなりに考えてループ作ってその中でかけ算。
0052デフォルトの名無しさんNGNG
>>51
脳みそ入ってるか?
0053デフォルトの名無しさんNGNG
http://gcc.gnu.org/
gccってこっからダウンロードするの?
英語ばっかで意味わかんないんだけど・・・
だれか教えて!
0054デフォルトの名無しさんNGNG
>>53
glibc じゃなくって?
0055デフォルトの名無しさんNGNG
>>54
それは何者!?
005653NGNG
なんか色々やってみたら、gcc-3.2.tar.gzってファイルをダウンロードできたんだけど
これ違う?
0057デフォルトの名無しさんNGNG
http://nemesis.sourceforge.net/browse/mod/venimpl/c/math/pow.c.html
これは?
005847NGNG
exp(y * log(x))
って感じで計算してるみたいですね。

ソースいろいろ探してみたんですが、見つかりませんでした。
VC++のMATH.H見てみましたが、意味が分からなかったです…
0059デフォルトの名無しさんNGNG
>>53
英語わからんのだったらbccにしとけ。
006047NGNG
>>57
ありがとうございます。
これだけ複雑だとやっぱりpow(x,3.0)よりもx*x*xの方がアルゴリズム的に優れてそうですかね?
0061デフォルトの名無しさんNGNG
>>60
アルゴリズム的に、ってのが分からんが速いのは確か
006247NGNG
>>61
分かりました。サンクスです!
0063デフォルトの名無しさんNGNG
>>60
乗算の繰り返しだと有効数字の大きい実数で桁落ち起こすんじゃないか?
log使うのは精度保つためだと思ったな。

スピード的にも3乗くらいならそれでもいいがな。
006453NGNG
>>59
今BCC使ってるんだけど、gccの方がいいかなあって。
学校はGCCとVC++なんだよねー。
あー・・・
0065デフォルトの名無しさんNGNG
今ビット演算を勉強してるんですけど、
こんなこといったいどういう時に使うんでつか?
0066デフォルトの名無しさんNGNG
>>65
バイトより細かいレベルでデータを処理したいとき。
0067デフォルトの名無しさんNGNG
集合としてあつかうとき
0068デフォルトの名無しさんNGNG
フラグ
0069デフォルトの名無しさんNGNG
ブラクラ
0070デフォルトの名無しさんNGNG
通報しますた
0071デフォルトの名無しさんNGNG
>>63
なんで精度が良くなるの?
詳細キボンヌ
007247NGNG
すみません。最後にひとつ。

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;
}

って、感じだと思うんですが…やはり、直接やるよりはどっちにしても遅いですかね?
0073デフォルトの名無しさんNGNG
>>72
直接って何だ
ソースはglibcやBSDのを探して嫁
一般的なアルゴリズムの解析はKnuthの本とかにある
これ以上はアルゴリズムスレか数値計算スレにいくべし Cとは関係ない
0074デフォルトの名無しさんNGNG
それとアルゴリズム事典丸写ししたら、ひとことそう書け
0075那由多 ◆F4E74ZBQPA NGNG
>65
低位レイヤーのアプリ作るとき、回線のデータから必要なデータを
取得したりするのにマスクしたビットをシフトさせて使うよ。

マジレスしてしまった。
0076 NGNG
.NET Framework SDKをダウソしたらCコンパイラも付いてきた。
(こちらもコンパイルはコマンドラインからだが)

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

160MBのダウソはつらかったが・・・。
0077デフォルトの名無しさんNGNG
恐れ巣だが…
pow(x, y)がexp(y, log(x))を計算している理由は、
yが整数でない場合を考えれば明らかだろう。
0078 NGNG
>>65
2倍、4倍、8倍などしたいときや、1/2、1/4、1/8したいとき、
通常の掛け算/割り算命令より早くできる。

例:左に1ビットシフト:2倍
右に1ビットシフト:1/2
0079デフォルトの名無しさんNGNG
>>72
logはきわめて多項式で近似しやすい関数として知られている。
expもそう難しくない。
powの演算回数は、キミが書いたものより平均では少ないかも。
0080JPS ◆M0LaMzf5rY NGNG
これ何処まちがってる?
#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);
}
0081デフォルトの名無しさんNGNG
>>56
OS は?
Redhat 系 Linux だったら rpm でインストールすればいいし、
Windows なら mingw や cygwin が楽。
0082デフォルトの名無しさんNGNG
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));
0083デフォルトの名無しさんNGNG
>>81
cygwinはインストールしたけど
意味不明
0084JPS ◆M0LaMzf5rY NGNG
>>82
doubleか。
そうじゃなくて、ビット演算と2のべき乗で同じ値が出ることを
確かめるプログラムを作ろうとしてた
0085デフォルトの名無しさんNGNG
>>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を正しく表示できないダロー
0086デフォルトの名無しさんNGNG
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)));
0087JPS ◆M0LaMzf5rY NGNG
>>85
知らんかったから。doubleは%fだべ。
またひとつ賢くなった
0088デフォルトの名無しさんNGNG
>>83
インストーラ(setup.exe)に devel というカテゴリがあるので、
そこにあるのを全部選択してインストールすべし。
0089デフォルトの名無しさんNGNG
>>88
なんかさ、DOS窓見たいのが出てきたんだけど
それ使う?
0090デフォルトの名無しさんNGNG
同じC言語をやっている仲間としてお願いがあります。
構文解析木について教えてください。出来ればサンプルプログラムと簡単な解説もお願いします。
よろしく。
0091デフォルトの名無しさんNGNG
ぐぐって自分で有益な情報を探そう。
0092デフォルトの名無しさんNGNG
ビットシフトが2のべき乗倍になるのはあたりまえだよね。
n進法で1桁ずらせばn倍(n分の1)したことになる。
x桁ずらせばnのx乗倍(nの-x乗倍)したことになる。
10進で考えてわからんならくそして寝たほうが良い。
0093デフォルトの名無しさんNGNG
>>90
教科書1章分の内容をここに書けってか?
0094デフォルトの名無しさんNGNG
>>89
そ。Cygwin Bash Shell というタイトルのウインドウで作業をする。
gcc -v と打ってみな。
009590NGNG
>>93
同じ仲間じゃあないですか。
ここに書いておけば次に同じ質問がきたらここをみろ、っていえるし。
よろしくブラザー。
0096デフォルトの名無しさんNGNG
>>92
(病理学的なぐらい)厳密には、C89 の規格ではそうとは限らない。
0097デフォルトの名無しさんNGNG
>>95
やったら荒らしに近い行為になるぞ。
0098JPS ◆M0LaMzf5rY NGNG
>>92
わからないとでも思ってんのか?
本に載ってたのをpow()を使ってやってるだけだよ
分からないやつがいるかもって思うお前のほうが寝たほうがいいよw
0099デフォルトの名無しさんNGNG
>>98
やってみないとわからないようなやつはくしして寝たほうが良い
0100デフォルトの名無しさんNGNG
すまんな、s++もわからん人が多いもんでな。
0101デフォルトの名無しさんNGNG
>>98
すぐ煽りにつられるようなアフォは糞して…
0102デフォルトの名無しさんNGNG
C++はわからない
0103デフォルトの名無しさんNGNG
構文解析木とは、構文を解析した結果できる木構造のこと。
これで良いだろ。
0104デフォルトの名無しさんNGNG
>>102
あれは覚えようとする気力をなくす言語だ。
0105デフォルトの名無しさんNGNG
C言語やってるだけでブラザー呼ばわりされても…
0106JPS ◆M0LaMzf5rY NGNG
>>99
日本語理解できない香具師は死んだほうが(・∀・)イイ!
>本に載ってたのをpow()を使ってやってるだけ
0107デフォルトの名無しさんNGNG
>>106
DQNなプログラムをコテハンでさらす厨房のくせに態度でかいよ(w
0108JPS ◆M0LaMzf5rY NGNG
>>107
お前も昔はこうだったんだろうが。
態度のでかさに経験なんか関係ないよ。
才能だけ。さ・い・の・う。わかる?
0109デフォルトの名無しさんNGNG
で、>>80のプログラムはちゃんと動くようになったのか?
0110デフォルトの名無しさんNGNG
コテハンのネタレスと厨房の煽りのみで続いてるスレはここですか?
0111デフォルトの名無しさんNGNG
>>108
たしかにその態度のでかさは才能だろうがウザイ。
少なくとも漏れはお前みたいな間違いをして、人に聞かないとわからない
なんて間抜けな経験はない。
0112デフォルトの名無しさんNGNG
>>111
ネタですた。
0113デフォルトの名無しさんNGNG
次のDQNなプログラムはまだかい?
0114デフォルトの名無しさんNGNG
次はどんな恥さらしプログラムの相談かな?
0115JPS ◆M0LaMzf5rY NGNG
>>109
なったよ。doubleだって知らんかったけど%fで解決した。
まあ>>111みたいな中途半端な煽りはつまんねーけど
またここに来てやるよ。お前らを使ってやってるんだから
ありがたく思え。
0116デフォルトの名無しさんNGNG
>>115
こっちがありがたく思うんかい。
0117デフォルトの名無しさんNGNG
               ,,,,,,,,,,,,_,, ,,,,
            ,,、‐'"~    '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
0118デフォルトの名無しさんNGNG
ありがたく思うからさっさとDQNプログラムで笑わしてくれ。
0119JPS ◆M0LaMzf5rY NGNG
ていうかよ、malloc()の仕様がよくわかんねーんだよ。
先頭のアドレスを返すってことはさ、
int *vc;
vc=malloc(sizeof()int*size)ってやるとさ、vcにはsizeof()int*size分の確保された
メモリの先頭アドレスが返ってくるんだろ?
したらvcは配列になるってことだろ?
これが可変長配列ってもんだろ?
0120JPS ◆M0LaMzf5rY NGNG
あ、プログラムか。ちょっと待ってて。
0121デフォルトの名無しさんNGNG
>>119
違うけど、そう思ってプログラム書いても大丈夫といえば大丈夫。
0122デフォルトの名無しさんNGNG
vc=malloc(sizeof(int)*size)
0123JPS ◆M0LaMzf5rY NGNG
>>121
どこが違う?
0124121NGNG
ちょっとまて、sizeof()intってなんだ?sizeof(int)だろ
0125JPS ◆M0LaMzf5rY NGNG
>>122
( ̄□ ̄;)!!
DQNさらしちまった
0126121NGNG
>>123
vcはあくまでもポインタ。配列じゃない。
0127JPS ◆M0LaMzf5rY NGNG
おkおk。間違っただけだから。
で、121よ、どこが違う?
0128デフォルトの名無しさんNGNG
>>119
考え方としては合ってるけど、可変長配列というと
別のものと紛らわしい。
0129121NGNG
>>128
reallocで大きさを変えられるから可変長配列でもいいんじゃない?(笑)
俺はそうは呼びたくないけど、、、
0130JPS ◆M0LaMzf5rY NGNG
>>126
お。分かった気がする。
可変長なのはvcの先にあるものね。
vcは常に、その先にある配列の先頭のアドレスが入ってるから・・・
んー。わかったかも。
0131JPS ◆M0LaMzf5rY NGNG
>>128
別のものってなんだあ?
ちなみに可変長配列は前橋の影響ですた。
0132デフォルトの名無しさんNGNG
vcの指すもの(mallocの返したメモリブロック)は
配列だといってまちがいあるまい。
0133デフォルトの名無しさんNGNG
前橋・・・
0134デフォルトの名無しさんNGNG
可変長配列って言ったら
void foo(n)
{ int a[n];
...
みたいなやつのことだろ。
0135デフォルトの名無しさんNGNG
>>134
最近のCだけだな。それできるの。
0136121NGNG
可変長って途中で長さを変えられるという意味じゃないの?
0137121NGNG
時と場合によって確保する大きさがかわる配列という意味か、、、
0138デフォルトの名無しさんNGNG
規格でvariable length arrayといえば>>134の指すようなものだな。
あとは、
void f(int m, int c[m][m])
みたいなのとか。
0139デフォルトの名無しさんNGNG
すみません、 >>1 さんに質問なのですが、
未定義と禿しく未定義の違いを教えてください。
あれ以来夜も眠れません。今朝だけど。
0140121NGNG
>>138
OK
そういえばint a[10]は固定長配列って言われるしね。
0141JPS ◆M0LaMzf5rY NGNG
>>134
void foo(n)って関数でしょ。
仮引数のnの型指定しは?
そんなのみたことない・・・
0142JPS ◆M0LaMzf5rY NGNG
はっ!またDQNだったな。
void foo(int n)
{
   int vc[n],i;
   for(i=0;i<n;i++)

みたいな感じか!?
0143デフォルトの名無しさんNGNG
>>141
そんなとこつっこむなよ
0144JPS ◆M0LaMzf5rY NGNG
>>143
いや、マジレスだった。なんだこれは!?って。
厨でスマソ。
0145134NGNG
>>141
int書き忘れただけだよ。
でもちゃんとコンパイルして動かせるけどな。
0146JPS ◆M0LaMzf5rY NGNG
>>145
マジで!?やってみる
0147デフォルトの名無しさんNGNG
>>146
コンパイラがC99に対応していないとだめだぞ。
VC++6.0なんかは対応していない(1998年発売だから当たり前だけど)
0148デフォルトの名無しさんNGNG
そうかー、昔風の
void foo(n)
int n;
{
のint n;は略してもいいんだっけ。
0149JPS ◆M0LaMzf5rY NGNG
てゆーか、>>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);
}
コンパイル不可能なんだけど。
0150デフォルトの名無しさんNGNG
>>149
>>147
0151デフォルトの名無しさんNGNG
int *ip = malloc(sizeof(int));
*ip=100;
はわかるのですが、
int *arrayp = malloc(sizeof(int)*n);
arrayp[n-1]=-1;
で、なぜipとarraypが同じ型なのかわかりません。
1つの変数も配列も同じものなんでしょうか?
0152デフォルトの名無しさんNGNG
>>151
なぜって同じint *で宣言しているじゃん
それと、mallocで得た領域を配列と見なすのならば、前者は要素1の配列、後者は要素nの配列
0153JPS ◆M0LaMzf5rY NGNG
>>151
ipとarraypは両方ともintへのポインタ型だべ?
mallocは確保した領域のアドレスの先頭へのポインタを返すから
ポインタ型じゃないと代入できない。
0154JPS ◆M0LaMzf5rY NGNG
>>150
それだけの問題なんすか。
ちなみにbcc5.5がどうかわからん?
0155デフォルトの名無しさんNGNG
>>152-153
「なぜ同じint *で宣言すべきなのか」が聞きたいのです。
片方は整数1個へのポインタ、
もう一方は整数の配列へのポインタなのに。
0156デフォルトの名無しさんNGNG
>>154
.cppという拡張子にすればコンパイルできるのでは。
0157デフォルトの名無しさんNGNG
>>155
一個でも配列は配列だ。
mallocはポインタを返す。だからポインタで受け取るべきだろ。
0158デフォルトの名無しさんNGNG
>>155
ひとつ聞くが、
int i[1];と宣言した場合、i=4;なんてできると思うか?
0159デフォルトの名無しさんNGNG
>>157
ipは配列へのポインタなのですか?intへのポインタだからint *だと思ってました。
>>158
いいえ。
0160デフォルトの名無しさんNGNG
>>155
どちらも整数配列へのポインタとみなしてかまわない。
ipの方は要素数=1 の配列(の先頭アドレス)とみなす。従って、
ip[0] = 100;
という操作も可能。
0161デフォルトの名無しさんNGNG
>>158
なに言ってるんだ?大丈夫か?
0162デフォルトの名無しさんNGNG
>>161
>>155が要素数1のint配列を単なるint型変数と同じだと思っているみたいだから言ったまでですが。
0163デフォルトの名無しさんNGNG
なぜ「整数へのポインタ」と「整数配列へのポインタ」が
同じ型なのか、という点がまだわからないんですが…
0164デフォルトの名無しさんNGNG
int *ip,i,ia[1];

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

これが分かれば理解できると思う。
0165デフォルトの名無しさんNGNG
>>162

int i;は整数1個が入る変数で、配列ではありませんよね。
それは最初からわかってます。
0166デフォルトの名無しさんNGNG
>>164
整数と、整数1個の配列は同じということですか?
0167デフォルトの名無しさんNGNG
>>166
int iとint ia[1]は確保する領域の大きさは同じ。
int *はそのアドレスを入れる変数だから、、、
0168デフォルトの名無しさんNGNG
>>167
じゃあ、整数10個の配列へのポインタは別の型なんですか?
0169デフォルトの名無しさんNGNG
int *ip , i , ia[1];

ia = &i;
*ia = 3;
printf("%d\n",i) => 3
ってことですね。
0170デフォルトの名無しさんNGNG
char array[sizeof(int)];
int *ip=(int *)array;

*array=10; /* こういうのもできるはず */
0171170NGNG
*array=10;じゃなくて、*ip=10;
0172デフォルトの名無しさんNGNG
>>170
コンパイラ依存(arrayがintと同じアドレス境界に整列されている保証はない)。
0173デフォルトの名無しさんNGNG
>>170
メリットは?
0174デフォルトの名無しさんNGNG
素直にmallocしろって
0175デフォルトの名無しさんNGNG
>>170
なんのメリットがあるか書いてください。
メリットが無いことを教えないでください。
0176170NGNG
>>173
メリットなんかねーよ。
必要な領域さえあればそれをint型とみなして扱えると言いたいだけ。
0177デフォルトの名無しさんNGNG
>>172
あんた何いってんの?
0178デフォルトの名無しさんNGNG
「整数へのポインタ」と「整数の配列へのポインタ」に区別がないのに、
「整数の配列の配列へのポインタ」とは違う型なのはなぜですか?
0179デフォルトの名無しさんNGNG
>>177
170で「できる」と書いているのは嘘だということ。
「できる環境もある」が正しい。
0180デフォルトの名無しさんNGNG
#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型の配列」として使うことができる。
0181デフォルトの名無しさんNGNG
>>176
そんなこたー無い。
0182デフォルトの名無しさんNGNG
>>175
お前さぁ、知識はあればあるほど得なんだよ。たとえどんなものでも。
情報の取捨選択も出来ずにごちゃごちゃほざいてるお前、才能無いと思う。
0183デフォルトの名無しさんNGNG
>>179
なんでよ!?
sizeof(int)分配列を確保すればそこにint型の値を入れられるだろ
0184デフォルトの名無しさんNGNG
>>183
「アドレス境界」と「アドレスの整列」という言葉を理解しているか?
0185デフォルトの名無しさんNGNG
>>184
配列(mallocは除く)は連続した領域だってわかっている?
0186デフォルトの名無しさんNGNG
>>180
最初の質問者です。なんとなくわかってきました。
区別できないから同じ型とみなすということですね。
では>>178にも書きましたが、配列の配列も同じ並びかただと思うのですが
なぜ型が違うのでしょう?
0187デフォルトの名無しさんNGNG






















0188デフォルトの名無しさんNGNG



























0189デフォルトの名無しさんNGNG




























0190デフォルトの名無しさんNGNG
>>185
あたりまえのこと聞いてごまかすな。
境界と整列について知らないなら知らないといえ。
0191デフォルトの名無しさんNGNG
>>184の言うとおりだとしたらmemsetやmemcpyはどうやって実装すればいいんだろ(ワラ
0192デフォルトの名無しさんNGNG





















0193デフォルトの名無しさんNGNG
言い負かされたからって荒らすなよ。
小学生か(w
0194デフォルトの名無しさんNGNG





























0195デフォルトの名無しさんNGNG
>>193
誰のこと?
0196デフォルトの名無しさんNGNG
このDQNぶりはどうみてもJPS
0197デフォルトの名無しさんNGNG
配列に詰め物があるとでも言いたいのかな。
構造体じゃあるまいし・・・
0198デフォルトの名無しさんNGNG






















0199デフォルトの名無しさんNGNG
>>191
おいおい…charは整列する必要がない。
char単位でコピーなり比較なりすればよい。
たとえば1/sizeof(int)回で住むからといって
memcpyやmemchrをintを使って読み書きするように書くか?
0200デフォルトの名無しさんNGNG
>>197
char配列の先頭アドレスがint境界に整列してる保証があるわきゃねーだろ
ヴォケが。
自分の無知を棚に上げてよく言うよ。
0201デフォルトの名無しさんNGNG
暴れるなよ >>170=>>197=JPS
0202デフォルトの名無しさんNGNG
>>199
memcpyは複数バイト単位で転送してると思うぞ。
0203デフォルトの名無しさんNGNG
いつのまにか荒れてるな…
alignment bouncaryを知らない厨房が1人、大勢のふりして暴れてるのか。
0204 ◆JWPaeN65Rw NGNG
>186
> では>>178にも書きましたが、配列の配列も同じ並びかただと思うのですが
> なぜ型が違うのでしょう?

とは・・・・

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

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

a_pとb_pの違いのことを言っているのか??
0205デフォルトの名無しさんNGNG
>>202
ああ、なるほど。最初と最後の未整列のところだけcharで書けば
できるかもね。でもホントか? 
数十バイト程度だと、かえって遅くなりそうな気がするが。
0206デフォルトの名無しさんNGNG
>>205
memcpy(or strcpy)の実装についてつい最近この板で議論されていたと思う
のだが、どこだったか見つからない。
0207JPS ◆M0LaMzf5rY NGNG
俺じゃねーよ。
おれはちゃんと説明したし・・・
153 :JPS ◆M0LaMzf5rY :02/11/10 19:26
>>151
ipとarraypは両方ともintへのポインタ型だべ?
mallocは確保した領域のアドレスの先頭へのポインタを返すから
ポインタ型じゃないと代入できない。

しかも今ボンバーマンやってたしw
0208デフォルトの名無しさんNGNG
>>170 プ
char c[sizeof(int)];
がint型として扱えるだって(w
なんちゅーDQNだ(禿藁
0209JPS ◆M0LaMzf5rY NGNG
俺もこの論争に参加していいでつか?
0210デフォルトの名無しさんNGNG
>>208
なんで扱えないんだったっけ?
0211デフォルトの名無しさんNGNG
できるかぎりlongバイトごとコピーして、あまりを1バイトずつコピーするってものじゃなかったか?>この前のmemcpy
0212デフォルトの名無しさんNGNG
memcpyをインライン展開するコンパイラもあるよね。
複数バイト単位で転送してたらかなり大きいコードになりそうだが。
0213JPS ◆M0LaMzf5rY NGNG
memcpyってなんだ?
なんてヘッダで定義されてんの?
0214JPS ◆M0LaMzf5rY NGNG
stringか・・・
これと似たやつでさ、strなんとかってなかった?
どう違うの?
0215デフォルトの名無しさんNGNG
>>214
燃料注入してるつもりか?
0216デフォルトの名無しさんNGNG

























0217JPS ◆M0LaMzf5rY NGNG
>>215
やべー意味わかんねーよ
どういう事?
0218デフォルトの名無しさんNGNG
void func(void *p1,void *p2)
{
int i;
long *lp1=p1,*lp2=lp2;
for(i=0;i<4;i++,lp1++,lp2++)
*lp1=*lp2;
}

きちんとコピーされる保証はない?
0219218NGNG
元データ示した方がいいか。
long = 4バイトとして、
char p1[1024],p2[]="aaaaaaaaaaaaaaa";
これでfunc(p1,p2);を呼ぶ
0220デフォルトの名無しさんNGNG
>>218
いったい何をやりたいコードなのか?
0221218NGNG
*lp2=lp2;のところは*lp2=p2;に修正
0222デフォルトの名無しさんNGNG
>>218
保証はないね。
0223218NGNG
>>220
long=4バイトとして、p1にp2を16バイトコピー
0224218NGNG
この前のmemcpy論争はこういうものだったはずなんだが・・・
0225JPS ◆M0LaMzf5rY NGNG
なんでvoid*?
きゃらにしとけや
あとなんでforの条件が<4なの?
さらに*lp1++=*lp2++;
これでいいんでない?
0226デフォルトの名無しさんNGNG
>>222
どのあたりが?
0227デフォルトの名無しさんNGNG
x86のglibcのmemcpyのソースを見てみた。
32バイト以下、またはsrc, dstどちらかが4バイト境界に整列して
いないならば、バイト単位でコピーしてる。
32バイトより大きくて、両方が4バイト境界にそろっている場合のみ
ワード単位でコピーしてる。
0228デフォルトの名無しさんNGNG
>>226
char配列の先頭番地が、long境界に整列しているという保証はない。
0229デフォルトの名無しさんNGNG
アライメント違反例外が発生してもOSが対処してくれるかもしれないが、
いずれにしても処理系依存だな。
0230デフォルトの名無しさんNGNG
>>229
そうだね。
あと、もし1回の読み書きごとに例外が起きてOSに落ちたら、
恐ろしく遅くなるね。
0231デフォルトの名無しさんNGNG
>>229
そう言う処理系ではコンパイラがwarning出すと思うよ。
0232デフォルトの名無しさんNGNG
ととと.
0233デフォルトの名無しさんNGNG
つーつーつー.
0234デフォルトの名無しさんNGNG
ととと.

0235デフォルトの名無しさんNGNG
>>231
void *との間のキャストでは警告の出しようがないだろう。
0236デフォルトの名無しさんNGNG
>>170見て思ったけど、
char一文字の領域のアドレスが整列化で語アドレスになるのは分かるが
charの連続した領域はバイト単位で詰め込まれるんじゃないの?
(alignment restrictionがあったとしても。)
少なくとも俺の環境ではバイト毎だった。
そうならないアーキテクチャがあるってこと?
それとも全く別の理由で>>170は叩かれてるの?
ちょっと教えて欲しい。
0237デフォルトの名無しさんNGNG
>>236
ひとめで知ったかとわかる(w
0238デフォルトの名無しさんNGNG
>>236
もちろん
char array[sizeof(int)];
で、array[0], ..., array[3]は連続したアドレスに割り当てられる。
それは規格で保証されている。
問題は、たとえばintを4の倍数アドレスに置かないとロードやストアが
できないCPUで、array[0]が4の倍数アドレスに置かれる保証がないことだ。
0239デフォルトの名無しさんNGNG
>>236=>>170
0240デフォルトの名無しさんNGNG
>>238
じゃあint *ip=malloc(sizeof(int));ってやって、ipが4の倍数のアドレスじゃなかったら、*ip=1024;とかできないってこと?
そういう処理系では必ずmallocは4の倍数のアドレスを返してくれるとか?
0241デフォルトの名無しさんNGNG
>JPS
わからないんだったら、とりあえず、見とけ。
議論をさえぎらないでくれ。

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

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


0242デフォルトの名無しさんNGNG
>>240
mallocは常に適切に整列された結果を返す。
そうでない処理系は規格違反。
0243デフォルトの名無しさんNGNG
こ、これが週末のCスレというものなのか・・・・!!
0244デフォルトの名無しさんNGNG
>>238
じゃあint iと宣言した領域をcharの配列として使うのはOK?
0245デフォルトの名無しさんNGNG
>>237
氏ね。

>>239
違うよ。

>>238
なるほど。
0246デフォルトの名無しさんNGNG
ということはmemcpyに与えたアドレスが4の倍数じゃなかったら、いきなりlongバイトごとコピーすることはできないってわけか。
0247デフォルトの名無しさんNGNG
>>244
それはOK。でないとmemcpy等にint *を渡せなくなる。
0248JPS ◆M0LaMzf5rY NGNG
>>245
ワロタ
傍観者JPSです。すぱーーーー
0249デフォルトの名無しさんNGNG
>>246
できない。
x86では境界に整列していなくても読み書きできるが、激しく遅くなるので
やらないほうが良い。
0250デフォルトの名無しさんNGNG
volatile
大活躍。
0251デフォルトの名無しさんNGNG
>>249
そうか。またひとつ賢くなったよ。ありがとう。
>>170はchar配列じゃなくてchar *にmalloc(sizeof(int))を入れるようにすればOKなんだろうな。
0252デフォルトの名無しさんNGNG
(ちょっと見ない間にこんなにスレが伸びてしまった。)
>>204
>>「整数へのポインタ」と「整数の配列」
>=>int a;(int a[1];)
>==>int *a_p;
>
>>「整数の配列の配列」
>=>int b[10][10];
>==>int **b_p;
>
>a_pとb_pの違いのことを言っているのか??

そうです。b_pはなぜint *じゃないのでしょう?
あれ、でもint **とするとコンパイラに怒られますが。
0253JPS ◆M0LaMzf5rY NGNG
>>252
配列は式の中ではポインタに読み替えられる!
三つの例外を除いて・・・。
0254JPS ◆M0LaMzf5rY NGNG
でも配列とポインタは違う・・・
ここが難しい!!
0255デフォルトの名無しさんNGNG
くいず:
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]の番地は並んでいないという。
なぜか?
0256デフォルトの名無しさんNGNG
>>「整数の配列の配列」
>=>int b[10][10];
>==>int **b_p;

bの型はint **じゃないだろう。
0257デフォルトの名無しさんNGNG
int **ってすると「int型へのポインタの配列」へのポインタになるの。
配列とは限らんが。
0258デフォルトの名無しさんNGNG
>>255
コンパイラが並ばないようにしたから
0259JPS ◆M0LaMzf5rY NGNG
>>256
>>252はb_pのことを言ってるんだろ?
0260デフォルトの名無しさんNGNG
>>258
ぶぶー、はずれ。
0261JPS ◆M0LaMzf5rY NGNG
>>255
んなこたーない
0262デフォルトの名無しさんNGNG
コンパイラじゃなかったら誰がそうするんだろ・・・・
0263デフォルトの名無しさんNGNG
答:
int *a[N];
for (i=N-1;i>=0;i--) a[i]=calloc(N, sizeof(int));
0264デフォルトの名無しさんNGNG
>261
a[i]がポインタで別々のところのポインタが入っていればそうなるよ。
0265デフォルトの名無しさんNGNG
>>263
そのコードを実行できる形にするのはコンパイラだろ?
>>258で合っているじゃん。まともな回答じゃないが。
0266デフォルトの名無しさんNGNG
えーと^_^;)
指している先が「整数の箱(1つ)」でも「整数の配列」でも
int *だというのは何となくわかりました。
でも、そうすると「整数の配列の配列」も同じ理屈で
int *でよいと思うんですが、なぜ違うのでしょう?
0267JPS ◆M0LaMzf5rY NGNG
俺の環境じゃ、配列の添え字は定数でないとだめなんだよ・・
0268デフォルトの名無しさんNGNG
>>263
calloc使うなら0に初期化する処理は無駄だね。
0269デフォルトの名無しさんNGNG
>>265
コンパイラはa[i][N-1]やa[i+1][0]のメモリを割り付けていない。
0270デフォルトの名無しさんNGNG
整数の配列 a[N];
って宣言するの。
0271デフォルトの名無しさんNGNG
>>264
a[i]がポインタじゃないときってどんな時なんですか?
0272デフォルトの名無しさんNGNG
>>260
ただの仕様だろ。並べなきゃいけないってしちゃったら、メモリを連続させて確保するコストがかかるから。
0273デフォルトの名無しさんNGNG
>>268
途中でクリアすることもあるんでは?
…ってそういうことを問題にしたわけじゃない(w
0274デフォルトの名無しさんNGNG
>>272
ポインタ配列を用意して、そこにmalloc,callocで得た領域を入れるんだってさ・・・
0275デフォルトの名無しさんNGNG
>>271
int a[N][N];
この場合はa[i]は使えないのかな。
0276JPS ◆M0LaMzf5rY NGNG
てかこんな話つまんないYO!
0277デフォルトの名無しさんNGNG
typedef int hoge[N];
hoge a[N];
0278デフォルトの名無しさんNGNG
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から呼び出される下位ルーチン)だ。
コンパイラじゃない。
0279デフォルトの名無しさんNGNG
>>278
callocのソースをコンパイルするのはコンパイラ
0280279NGNG
まあ別にCで書かなくてもいいが
0281デフォルトの名無しさんNGNG
>>279
コンパイルするのはコンパイラだな。
でもコンパイラが確保するわけじゃない。
0282279NGNG
>>281
まあいいか。
ところで、さっきのクイズはオリジナル?
0283 ◆JWPaeN65Rw NGNG
こんな感じの説明で、どうでしょう?

「【整数 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);

ってなる。




0284デフォルトの名無しさんNGNG
く〜いず!
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;
}
}
と書き換えたら、実行結果が変わってしまったという。なぜ?
0285283 ◆JWPaeN65Rw NGNG
>266
です。
0286デフォルトの名無しさんNGNG
>>283
b_pはint [5]の大きさをもつ配列へのポインタでしょ?int **b_pにはならないでしょ。
0287デフォルトの名無しさんNGNG
>>283
ちょっとまて。
*b_p は整数だと思うんだが。
0288デフォルトの名無しさんNGNG
>>284
Nってなんだよ?マクロか?
0289284NGNG
>>288
あー、はい。
#define N 100
くらいの適当な定数と思ってくらさい。
0290デフォルトの名無しさんNGNG
int a[N][N];
って宣言したらスタック上に確保されるだろうが。
どうしてcallocが関係あるんだ?
0291デフォルトの名無しさんNGNG
int *(b_p[5]);はint型のポインタの配列じゃない?
0292デフォルトの名無しさんNGNG
>>289
こういうところしっかりしておかないとな。つっこみ問題は。
まあ定数じゃなかったらコンパイルエラーになるが
0293292NGNG
つっこみ問題ってなんだよ。
引っかけ問題だな。
0294デフォルトの名無しさんNGNG
>>290
ネタなのか真正DQNなのかはっきりしる!
0295286NGNG
>>291
あーint (*b_p[5])と見間違えた。
うん、ポインタ配列だね。int **にいれられる。
0296295NGNG
ポインタ配列なら括弧をつけるなヴォケェ
まぎらわしいんじゃ!
0297JPS ◆M0LaMzf5rY NGNG
>>286
int b[5]={1,2,3,4,5};
int *b_p=b;

この時、*b_pもb_p[0]も式の中では1となるしょ?
int **b_pになるべ。あら・・・
0298295NGNG
s/int (*b_p[5])/int (*b_p)[5]/
0299JPS ◆M0LaMzf5rY NGNG
>>296
わかりやすくしてんだろヴォケェ
0300295NGNG
>>299
でも
int b[5][10]
int *(b_p[5]);
とやったら
b_p=bってのはできないよ。
0301デフォルトの名無しさんNGNG
>>284
mult(a, a, c);ってやってたくらいしか思いつかんな。
0302266NGNG
よくわかりません。
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とすると、どこかへのポインタが得られるんでしょうか?
0303デフォルトの名無しさんNGNG
>>301
正解!
bかcがaと重なっていた。
0304デフォルトの名無しさんNGNG
>>302
hogeのポインタ = hogeの配列 はできると思ってくれ。
intの配列の配列 が b。
intのポインタ にも
intのポインタのポインタ にも 代入できない。
0305デフォルトの名無しさんNGNG
>>238
しかしどうしてそう言う風になってるんだろう。
0306デフォルトの名無しさんNGNG
くーーーいーーーーず!
あるプログラムでは、大量のunsigned longの配列を
calloc(N, sizeof(unsigned long))で確保している。

プログラマが、配列の内容は実は全てunsigned charで十分あらわせる
範囲だと気づき、unsigned longを全部unsigned charに直したが、
消費するデータ領域はちっとも減らなかったという。なぜ?
0307デフォルトの名無しさんNGNG
>>302
int (*bp3)[5];

一つ言えるのは、こんな重箱の隅な知識覚えても何の役にも立たないということだ。
0308デフォルトの名無しさんNGNG
sizeof(unsigned long) == sizeof(unsigned char)
0309デフォルトの名無しさんNGNG
>>305
char の配列を宣言してるからでしょ。サイズはintだけどintじゃないから
0310デフォルトの名無しさんNGNG
>>305
doubleとして扱われるかもしれないからって、char配列を全て
double境界に整列する仕様のほうが良いか?
「そんな使い方しないから詰めて割り当ててくれ」という人も
多いんじゃないか?
0311デフォルトの名無しさんNGNG
>>308
……正解。簡単すぎたか。
0312デフォルトの名無しさんNGNG
>>308
そんな処理系あんのか?charはちっちゃくしとけよ。
0313デフォルトの名無しさんNGNG
>>308
実際に存在するのか?
0314デフォルトの名無しさんNGNG
>>312
intは16bit以上だと規格で決まっていると言っている人が何人かいたけど、1バイト=16bitならsizeof(long)==sizeof(char)になってもおかしくはないよな。
0315308NGNG
ないと思う。規格上は可能ってだけで。
0316デフォルトの名無しさんNGNG
お前らの悪いところは

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

だろうな。
おかげでアホな間違いとかも散見される。
0317デフォルトの名無しさんNGNG
TM320x0シリーズでは、メモリは32ビット単位でしかアクセスできない。
番地も32ビットごとについている。
なので、Cではsizeof(char) == sizeof(int) == sizeof(long)
0318デフォルトの名無しさんNGNG
>>317
それか!
以前charだろうがintだろうがみんな32bitの環境でプログラミングしていると言っている人がいた。
0319デフォルトの名無しさんNGNG
>>314
longは32bit以上じゃなかったっけ?
0320317NGNG
まちがいた
×TM320x0シリーズ
○TMS320シリーズ
0321デフォルトの名無しさんNGNG
みんなで64bitになって幸せになろう。
0322317NGNG
charが32ビットなら多言語対応も楽そうだ。
0323デフォルトの名無しさんNGNG
age
0324デフォルトの名無しさんNGNG
>>322
当面16bitでいいじゃん。どうせUnicodeは当分BMPしかつかわんでしょ。
0325デフォルトの名無しさんNGNG
(゜∀゜)ビトマーップ
0326デフォルトの名無しさんNGNG
(゜∀゜)ビトマーップ
0327那由多 ◆F4E74ZBQPA NGNG
>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のように書けば、いくつ飛びのアドレスが入るかが、わかるので、
うまくいくはず。
#手元にコンパイラが無いので、確認できん、スマソ。
0328デフォルトの名無しさんNGNG
>>327
まて、多次元配列はメモリー上に直行的に並ぶはずだぞ。
0329デフォルトの名無しさんNGNG
>>327
そんな無茶な。
いつから勝手にポインタ配列にしてくれるようになった?
0330デフォルトの名無しさんNGNG
なぜコテハンに限ってDQNなんだろう…
0331那由多 ◆F4E74ZBQPA NGNG
スマン、逝ってくる。
0332デフォルトの名無しさんNGNG
>319
そだな。
charは8bit
intは16bit
longは32bit
が最低保証されているから CHAR_BIT = 16ならば
sizeof(char) = sizeof(int) までだな。

ちなみに、charは参照可能な最小単位を定義しているので、sizeof(char)は必ず1を返す。
他の型のsizeofはcharの何倍かを返すんだとさ。
0333デフォルトの名無しさんNGNG
> charは8bit
ダウト。
0334デフォルトの名無しさんNGNG
>>333
じゃあ正解は?
0335デフォルトの名無しさんNGNG
sizeof(char)=1って事だけだろ。
0336デフォルトの名無しさんNGNG
char:1バイト
0337デフォルトの名無しさんNGNG
>>335
SCHAR_MINは-127以下SCHAR_MAXは127以上が保証されているハズだぞ。
他の型も同様にビット数ではなくて値の範囲で定義されているのだが。
-側が128でないのは1の補数マシンへの配慮だと思われる。
0338デフォルトの名無しさんNGNG
すいませんがちょっと教えてください。
見ていたPGの中にこのような処理があったのですが、これはどのくらい値に差があるときに成り立つのでしょうか?
10倍ぐらいでしょうか?

if(num >> 4) {
}
0339デフォルトの名無しさんNGNG
2^4=16
0340デフォルトの名無しさんNGNG
num >> 4 は右シフト
num / 16 16以上ってこと。
0341デフォルトの名無しさんNGNG
>>338

>>が何の演算子かまず調べたまえ。
比較演算子ではないぞ。
0342338NGNG
>>340 , 341
>>は16以上のときなのでしょうか?
300 >> 4
だったらTRUEで、

15 >> 4
だったらFALSEと考えていいのでしょうか?
0343デフォルトの名無しさんNGNG
>>342
だから、比較じゃないって。数学の>>とは別の意味。
手元の参考書に載ってなければ、すぐさま別の本を買ってきて読め。
0344デフォルトの名無しさんNGNG
>>342
比較じゃないってば。
300 >> 4 は 30/16 で
15 >> 4 は 15/16 だ。
0345デフォルトの名無しさんNGNG
>>338

「>>」は超比較演算子と言って上級者でも殆ど使わない演算子だから
覚えなくても良いよ。
実は2chで相手の番号をレス番号を指す時の「>>」も、この演算子が由来なんだよ。
0346デフォルトの名無しさんNGNG
338はnetaっぽいな.
0347デフォルトの名無しさんNGNG
処理系依存をうるさく言うやつがいるけどさ、
コンパイラが規格に準拠しているかどうかということ自体、処理系依存だよな。
0348338NGNG
>>343 , 344
わかりました。割り算ということですか?
300 >> 4 => 30 /16
15 >> 4 => 15/16

左辺は2乗したもので割ればいいのでしょうか?
右辺の法則がちょっとわからないのですが。
0349JPS ◆M0LaMzf5rY NGNG
>>344
300>>4は
300/2^4ではないんでつか?
0350デフォルトの名無しさんNGNG
ビットをシフトさせるの。
11110000 >> 4 だったら
00001111 になる。
00001111 >> 4 だったら
00000000 になる。
0351デフォルトの名無しさんNGNG
>>348
4ビット右シフトは1/2^4
2進の環境下で4桁右にずらすんだからね。
あ、アンダーフローは考えないで

0352351NGNG
違う違う、、、
あ、アンダーフローは考えないで ←これは間違いだ
0353デフォルトの名無しさんNGNG
多分、348は 2進数を知らないんだと思う。
0354338NGNG
>>350 , 351
わかってきました。
右にビットをずらしていくのですね。ぜんぜんイメージと違っていました。
一番左のビットには必ず0がくると考えていいのでしょうか?
0355351NGNG
>>354
論理シフトなら0で埋められる。
算術シフトの場合は符号ビットとおなじもので埋められる
0356JPS ◆M0LaMzf5rY NGNG
>>355
その二つで決定的な違いってある?
実際プログラムつくるときに
0357デフォルトの名無しさんNGNG
論理シフトって繰り返しやれば最終的に元の値は必ず0になるよね?
0358デフォルトの名無しさんNGNG
bit数やればなるんじゃない?
0359デフォルトの名無しさんNGNG
>>358
さんきゅ

>>356
例えばwhile(a<<=1) ;とかwhile(a>>=1) ;なんてやった場合、論理シフトじゃないと無限ループになる可能性がある
0360338NGNG
>>355
算術シフトと論理シフトの違いってなんでしょうか?
算術シフトが符号で埋められるというのは、
10001001 >> 2 => 11100010
00001001 >> 2 => 00000010
ってことでしょうか?
0361デフォルトの名無しさんNGNG
signedの右シフトは処理系定義。
0362デフォルトの名無しさんNGNG
算術シフトって「1の補数」をと取るんでしょ。
0363デフォルトの名無しさんNGNG
>>360
そう。
算術左シフトは符号ビットは変わらず他のビットが左にずれる。空いたところには0が入る。
論理左シフトは全ビット左にずれる。空いた領域には0が。
0364デフォルトの名無しさんNGNG
>>361
そうだね。算術シフトになるか論理シフトになるかは処理系による。
Javaだとそれぞれ別の演算子がある。
0365デフォルトの名無しさんNGNG
>>361
論理シフトや算術左シフトは?
0366365NGNG
なんか変だな。
unsignedのシフトや、signedの左シフトは?
0367デフォルトの名無しさんNGNG
>>362 ネタか?突っ込んでやらない。

>>365 左シフトに論理も算術もない。
0368デフォルトの名無しさんNGNG
ビットソートについて教えてください。
0369デフォルトの名無しさんNGNG
>>367
> 左シフトに論理も算術もない。

???
0370デフォルトの名無しさんNGNG
左シフトは2の羃乗の乗算に等しい。
オーバーフローは無視。
0371デフォルトの名無しさんNGNG
>>369
初心者か? ならわかりやすく説明しよう。
左シフトだと右から新たなビットが入ってくる。
論理シフトだと考えれば0が入ってくる。
算術シフト(2倍)だと考えれば、正負によらず常に0が入ってくる。
どちらでも同じ。
0372363NGNG
もしかして>>363は間違っているのか?
0373363NGNG
>>371
入るのは0だが、算術か論理によって符号ビットがずれるかずれないか変わると思っていたんだけど。
0374デフォルトの名無しさんNGNG
>>363
やってみれば。
そういう動作は聞いたことがない。
0375デフォルトの名無しさんNGNG
実際、javaには>>>(算術右シフト)はあっても<<<は存在しない。
0376デフォルトの名無しさんNGNG
signedかつnegativeな整数に対する左シフトの振る舞いは未定義。
signedかつnegativeな整数に対する右シフトの振る舞いは実装定義。
0377376NGNG
あ、上の一行は間違い。失礼。
0378デフォルトの名無しさんNGNG
算術シフトは最上位ビットが1のとき、右シフトすると1が入ってくるよ。
0379デフォルトの名無しさんNGNG
ttp://www.jtw.zaq.ne.jp/kayakaya/new/kihon/text/shift.htm
0380デフォルトの名無しさんNGNG
#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);
}
0381デフォルトの名無しさんNGNG
>>377
signedつーか負数だろ
0382デフォルトの名無しさんNGNG
だからnegativeって書いてあるだろ。
0383もまずにパピコNGNG
>>379
その算術左シフトおかしいぞ。
8ビットの-128(10000000B)を左シフトしたら、その説明では-128のままになってしまう。
0384デフォルトの名無しさんNGNG
ああ、nativeと読み間違えてた。スマソ
0385デフォルトの名無しさんNGNG
>>383
0をいくらシフトしても変わらないのと同じじゃないの?
0386デフォルトの名無しさんNGNG
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]
0387デフォルトの名無しさんNGNG
nを4bit左シフトしたらnはn*2^4になるんだよね?
負の数の場合、符号ビットが変わったらまずいと思うんだけど。
負の数に正の数をかけても負の数のままのはずなのに、符号ビットまでうごいたら正の数になってしまう
0388デフォルトの名無しさんNGNG
>>363
やってみろよ?

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

因みにx86のアセンブラレベルでも論理左シフトと算術右シフトは同じものだぞ。
0389JPS ◆M0LaMzf5rY NGNG
要するに負の整数にはビット演算するなって事だよね。
自分の処理系が論理か算術か確かめる方法ある?
0390デフォルトの名無しさんNGNG
スマン。
算術左シフトな。
0391JPS ◆M0LaMzf5rY NGNG
あ、やってみりゃいいんだw
0392デフォルトの名無しさんNGNG
>>383
それが算術シフトだろ。
0393387NGNG
正の数になってしまう"ことがある"
0394JPS ◆M0LaMzf5rY NGNG
今日で前橋歴10日だよ・・・
ぜんぜんわかんないけどさ。
0395デフォルトの名無しさんNGNG
皆さんすみません、何度か質問させていただいているものですが、
またひとつ質問させてください。
変数の宣言はコードブロックの先頭でできますから、たとえば
int main(void) {
int i;
for (i = 0; i < 100; i++)
{
int k; <--これ
処理〜;
}
return 0;
}
なんて書き方や、
int main(void) {
int i;
処理〜
{
int k; <--これ
処理〜
}
return 0;
}
なんて書き方ができますよね。
これって、そもそも一般に通用するものなのでしょうか?
通用するとしたら、「良い書き方」「悪い書き方」なのでしょうか?教えてください。
0396JPS ◆M0LaMzf5rY NGNG
そういやさ、Cで8進表記は012とか0をつけるんだよね?
O(オウ)じゃないよね?
でもprintfの型指定市は%oだよね?
ちがったけ?
0397デフォルトの名無しさんNGNG
>>397
O12とやったら変数などと見分けがつかなくなるだろ。
0398397NGNG
レス先間違えた
>>396
0399JPS ◆M0LaMzf5rY NGNG
>>395
余裕で通用する。でも俺はあんましない。宣言はとりあえず関数の直後でやっちゃう。
でもたとえばwhileの2重ループとかで、毎回値を初期化する必要があるときとかはやるかな。
まあそれもfor使えばいいし。
0400デフォルトの名無しさんNGNG
悪い書き方でしょ。
for(〜){int k;〜}for(〜){int k;〜}
とプログラム書いてみ。エラー出すこともある。
0401JPS ◆M0LaMzf5rY NGNG
>>397
そうだね。サンクス
0402デフォルトの名無しさんNGNG
>>400
なんで?
0403JPS ◆M0LaMzf5rY NGNG
>>400
エラー出すことあんの!?
0404デフォルトの名無しさんNGNG
算術シフトと論理シフトの勉強し直した方が良いよ!
0405JPS ◆M0LaMzf5rY NGNG
>>404
俺にいってるんでつか?
0406デフォルトの名無しさんNGNG
>>396
8進数→octal
0407デフォルトの名無しさんNGNG
>>395
そんなに悪いとも思わないけど。
範囲がわかるし。長いんなら別関数にすれば?
0408JPS ◆M0LaMzf5rY NGNG
>>406
そうだったのか!なにげに英語分かったら覚えやすいよね。
おれなんかstdio.hのことステディオとか言ってたから・・・
スタンダードインプットアウトプットだよね?
0409デフォルトの名無しさんNGNG
基本情報処理試験のCASLIIには左シフトにも論理と算術があるな。
0410デフォルトの名無しさんNGNG
左シフトについて、規格を確かめたら:
E1 << E2でE1がunsigned typeなら、
シフトの結果は(E1 * (2のE2乗)) mod (E1が表せる最大の値 + 1)

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

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

よって、負の数を左シフトしたら間違い。
0411デフォルトの名無しさんNGNG
>>408
え?ストゥドゥアイオーじゃないの?
0412デフォルトの名無しさんNGNG
Standard I(input)/O(output).
Octopus.(image)
0413JPS ◆M0LaMzf5rY NGNG
>>409
まじ!?俺春受けるんだけど・・・
でも選択でCとればいいよね?
てかさ、秋用の参考書買ったんだけど、これ来春にも通用する?
0414デフォルトの名無しさんNGNG
>>410
>>376で既出
0415デフォルトの名無しさんNGNG
すまん、やっぱこれで良い。
signed_negative左シフトは未定義
signed_negative右シフトは処理系定義

0416デフォルトの名無しさんNGNG
>>408
日本語では標準入出力
0417JPS ◆M0LaMzf5rY NGNG
>>411
( ̄□ ̄;)!!
俺は「スタンダード・アイ・オー」って言ってる・・・
はずかちい・・・
0418デフォルトの名無しさんNGNG
>>395
賛否両論あるね。というより、一長一短か。
短所は、コードを読んだ時に変数をどこで
定義しているかわかりにくい。
0419JPS ◆M0LaMzf5rY NGNG
>>411
ていうかストゥドゥってなに?
スペルは?
0420デフォルトの名無しさんNGNG
>>415
> signed_negative左シフトは未定義

これホントなの?

0421デフォルトの名無しさんNGNG
>>410
俺も未定義って見て驚いたので間違ってないか何度も読み直したが
どうやら本当らしい。
0422デフォルトの名無しさんNGNG
october
0423デフォルトの名無しさんNGNG
>>421
どこで見たの?
0424JPS ◆M0LaMzf5rY NGNG
>>418
でもこういう書き方しなきゃ出来ないことってある?
for使えば出来ると思うんだけど。
プログラムの中身じゃなくて、見た目の問題?
0425デフォルトの名無しさんNGNG
>>424
変数のスコープは最小限に絞るべきっていう考え方もあるから...
0426デフォルトの名無しさんNGNG
>>420
そりゃそうさ。
処理系によって
負数の表現が2の補数とは限らない。
0427デフォルトの名無しさんNGNG
>>423
俺はc99で見た。
0428デフォルトの名無しさんNGNG
白熱しておりますな
0429もまずにパピコNGNG
>>409
ゲーーーーーッ! ほんとだ!
さっきのページはシスアドだったからあれで合ってるんだ……

でも80x86もZ80もそんな動きしないよな…
0430デフォルトの名無しさんNGNG
じゃあ負数へのかけ算はシフトをつかって実現してはならないの?
0431デフォルトの名無しさんNGNG
ttp://vlsilab.ics.es.osaka-u.ac.jp/~k-ueda/memo/memo.html
0432JPS ◆M0LaMzf5rY NGNG
>>430
俺の持ってる本にはそう書いてあるぞ。
まあ、俺の場合それ以前にシフト演算なんてしないわけだが
0433デフォルトの名無しさんNGNG
>>430それだけじゃなくsigned使うときにはsign心の注意を払わないといけない。
0434デフォルトの名無しさんNGNG
ttp://black.sakura.ne.jp/~third/assembly19.html
0435JPS ◆M0LaMzf5rY NGNG
>>433
(゚д゚)ウマー
0436デフォルトの名無しさんNGNG
>>432>>433
まじかよ・・・
じゃあループで足し込むしかないの?
0437デフォルトの名無しさんNGNG
>>431
左シフトは算術も論理も一緒になってるな。
0438420NGNG
うひゃー、未定義知らんかった〜。
とりあえず左シフトはunsignedまたは定数
でしかやった覚えないけど。勉強になりますた。
0439JPS ◆M0LaMzf5rY NGNG
なんだなんだ!?お勧めサイトの紹介か!
コソコソ・・http://kuroneko22.cool.ne.jp/
0440デフォルトの名無しさんNGNG
掛けたあとが範囲内ならシフトしていいんじゃないの?
0441デフォルトの名無しさんNGNG
>>437
どこに目をつけてんだYO!
0442JPS ◆M0LaMzf5rY NGNG
>>413
誰か答えて・・・
0443デフォルトの名無しさんNGNG
掛け算をシフトで?
規格準拠にしたければ、絶対値を取って正の数に対してやればよいじゃん。

2の補数を仮定してよいならunsignedにキャストしてやれば良い。
0444デフォルトの名無しさんNGNG
>>413
スレ違い。
0445JPS ◆M0LaMzf5rY NGNG
>>444
( ̄□ ̄;)!!
( ̄□ ̄;)!!
( ̄□ ̄;)!!
0446デフォルトの名無しさんNGNG
>>443
unsignedにキャストしてシフト演算したらどうなるか分かる?
0447デフォルトの名無しさんNGNG
>>446
倍になる。
0448デフォルトの名無しさんNGNG
1の補数表現の場合、8bitだと11111111は0になるの?
0449395NGNG
皆さんレスありがとうございます。
自分もレス書きたかったのですが、
白熱した論議に割り込むこともできない未熟者ですのでご勘弁を……。

結論としては、そう書くこともできるが賛否両論(あんまりやらない)、
関数分けなどうまく使えばそうする必要もない、ということですよね?
ありがとうございました。
0450443NGNG
>>446
わかるけど?
0451デフォルトの名無しさんNGNG
きのうはBOOLで、今日はシフトですか?
0452デフォルトの名無しさんNGNG
昨日もシフトやったよ。
0453デフォルトの名無しさんNGNG
>>447
2の補数で(signed int)1011111111111111
これをunsigned intにキャストして>>1してsigned intにキャストしたら?
0454デフォルトの名無しさんNGNG
たった 1 日でレスがこんなに・・・。

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

ところで、>>284 のコードは、前者も後者も結局何も仕事をしないと思うのだがどうよ?
0455もまずにパピコNGNG
>>453
おーい… 横入りするけど右シフトは別に、未定義じゃないので、キャストしなくても、いいんじゃ、ないの。
0456デフォルトの名無しさんNGNG
454=284
0457デフォルトの名無しさんNGNG
>>455
処理系依存なのだが。
0458JPS ◆M0LaMzf5rY NGNG
>>457
コンパイラによっちゃ負の右シフトも未定義!?
0459デフォルトの名無しさんNGNG
右シフトが論理シフトになるか算術シフトになるか未定義なんじゃない?
0460デフォルトの名無しさんNGNG
>>458
未定義と処理系依存をごっちゃにするなよ。
処理系依存は、処理系が確定すれば必ず動作は一定。
未定義は、本当に何が起こるかわからない。
0461デフォルトの名無しさんNGNG
>>457
signed を unsigned にしたときにどうなるかも処理系依存でしょ?
0462デフォルトの名無しさんNGNG
>>460
本当に何が起こるのかわからないのは不定。
未定義はその名のとおり定義されていないだけ。
0463462NGNG
規格では定義されていないという意味ね
0464454NGNG
>>456
死ね。

どうして誰も、284 の引数が値渡しである事に気付いていないんだ。
前者と後者のコードはまったく同じ結果になるから、クイズとして成り立っていない。
0465デフォルトの名無しさんNGNG
>>462
もうネタはいいよ。
0466JPS ◆M0LaMzf5rY NGNG
>>460
なるほど。あふぉですまそ。
でも右シフトの場合、論理でも算術でも結果は一緒でない?
>>459は?
0467デフォルトの名無しさんNGNG
>>464
了解。はいクイズの件は終了。
0468デフォルトの名無しさんNGNG
>>464
284は正解者いたよね。
0469デフォルトの名無しさんNGNG
>>462
アホ。適当な事言うな。

implementation-defined,unspecifiedは実装選択の義務がある。
undefinedは無い。
0470デフォルトの名無しさんNGNG
10000000 >> 4が
11111000 になるのが算術シフトで
00001000 になるのが論理シフトじゃない?
0471デフォルトの名無しさんNGNG
>>462
処理系依存は、動作が確かめられればいつでも用いて良い。
未定義は、絶対に用いてはならない。

>>468
クイズとして成り立っていないなら、正解もクソも無いだろうに。
0472デフォルトの名無しさんNGNG
http://www.st.rim.or.jp/~phinloda/cqa/cqa7.html

>>460も>>462も間違っているようだが。
0473JPS ◆M0LaMzf5rY NGNG
>>470
ごめん。左シフトだった。
0474デフォルトの名無しさんNGNG
>>472
462は十分間違ってるぞ。
0475474NGNG
ごめん、472を読み間違えてた。
0476JPS ◆M0LaMzf5rY NGNG
>>470
ほんとだ。でもまあ>>460に近いし。
だいたい未定義なんてつくんなよ。規格できめろよANSI
0477デフォルトの名無しさんNGNG
>>472
Uncertain (不定) なんて言葉が規格書にあっただろうか。
0478デフォルトの名無しさんNGNG
未定義といっても処理系によっては定義されている可能性があるんじゃないの?
0479JPS ◆M0LaMzf5rY NGNG
>>478
処理系によってはってとこが未定義なんだべ?
0480デフォルトの名無しさんNGNG
11111000 << 4 は
10000000 になればそれでいいのだが。
0481デフォルトの名無しさんNGNG
>>478
鼻から悪魔が出る処理系もあるので、うかつに使えませんが・・・
0482デフォルトの名無しさんNGNG
>>479
規格では未定義でも処理系によっては定義されていることもあるんじゃないかと
0483デフォルトの名無しさんNGNG
>>480
気持ちはわかるが、それは本論とは関係無い。
0484474NGNG
>>472
460も間違ってる?
(処理系依存=処理系定義とすると)間違ってるとは思えないんだが。
0485JPS ◆M0LaMzf5rY NGNG
っていうかさF&Aの
>未定義とは、その結果どうなるかが、言語仕様として決められていないことを意味します。
>そして、その結果がどうなっても、そのC言語の処理系はは規格に合致しているとみなされます。
ってのとさ、
>不定と未定義の最も大きな違いは、不定のコードはプログラムとしては正しいが、未定義のコードは間違いであり、
>動作する保証すらないという所にあります。
ってなんか違わない?
0486デフォルトの名無しさんNGNG
>>485
F&A?藤子不二雄か?
0487デフォルトの名無しさんNGNG
>>485
「動作する保証すらない」という結果になってもC言語処理系としては正しい
0488JPS ◆M0LaMzf5rY NGNG
>>482
それは分かるけど。
結局移植性低いプログラムは書くなってことで。
0489デフォルトの名無しさんNGNG
>>485
規格にさえ反しなければ何をしようと規格に合致していると言えるだろ
ただそれでどうなってもしらないよ。と。
0490デフォルトの名無しさんNGNG
未定義とか処理系依存な命令なんか使わなきゃいいじゃん。使わないでいいし。
0491デフォルトの名無しさんNGNG
何だか、JPSっつー香具師=荒らし、っつー感じなんだが
0492デフォルトの名無しさんNGNG
シフトくらい使わせてくれ。
0493JPS ◆M0LaMzf5rY NGNG
>>489
未定義のコードが間違いって言ってるのに、規格には準じてるって・・・
なんかすげー曖昧。これじゃ移植性がどうこうって話でなくない?
0494JPS ◆M0LaMzf5rY NGNG
>>491
荒らしじゃねーよ!香具師だけど。
頭わるいけどがんばってるんだYO!
0495デフォルトの名無しさんNGNG
>>493
間違いってのはプログラマが使うことが間違っているという意味だろ。
規格に反するという意味ではなく。
0496デフォルトの名無しさんNGNG
>>493
逆だ。
昔のCは互換性がないほどバラバラだった。
それを無理矢理一つの企画に纏めたため、無理な動作が未定義となった。
0497デフォルトの名無しさんNGNG
>>493
プログラマーが使うかとコンパイラが実装してるかどうかは別ものだろ。
0498デフォルトの名無しさんNGNG
未定義は使えないが、処理系依存は使うわな。
特にその処理系に特化したカスタマイズしたい場合は。
0499デフォルトの名無しさんNGNG
> これじゃ移植性がどうこうって話でなくない?

未定義のコードを書くこと自体が間違ってるんだから。
Cではそういうコードを書いてはいけないのよ。
0500デフォルトの名無しさんNGNG
>>496
それもそうだし、あまりガチガチにすると様々な環境で使えなくなるんだろうね。
0501デフォルトの名無しさんNGNG
プレステ2のCPUって2の補数表現じゃないって本当?
0502デフォルトの名無しさんNGNG
>>498
処理系依存は使えないと、Cそのものがほとんど使えないよね。
0503JPS ◆M0LaMzf5rY NGNG
>>495
でもしたらさ、結局処理系で定義してあったってそれ使うのは違うんじゃねーの?
ってかんじだべ?
そしたら処理系ごとでそれぞれ定義する必要ゼロじゃん?
でも定義してんのは使うからでしょ?
だったら規格でちゃんと決めろや( ゚Д゚)ゴルァ!
0504デフォルトの名無しさんNGNG
>>490
それは間違っている。
x86 + VC++ で、ポインタや浮動小数点数の集合を ZeroMemory() を使わないで
項目事ので移入によって初期化するのは馬鹿げている。
0505デフォルトの名無しさんNGNG
>>502
命令はいいとして、標準以外のライブラリを使えないとかなりきついね。
0506デフォルトの名無しさんNGNG
24時間経たずに500か・・・お前ら仕事や学校あるんだろ?
俺、今朝は5時におきなきゃならんのに、


・・・回線切らずに氏ねそうです
0507デフォルトの名無しさんNGNG
>>503
決められんこともあると思うが・・・
0508JPS ◆M0LaMzf5rY NGNG
>>496
そうだったんでつか。ちょっとその辺の話はまだまだなんで・・・
ってことはやっぱ負の右シフトはすんなと?
算術で。
0509デフォルトの名無しさんNGNG
なんか今日は低レベルで面白くないな。
0510デフォルトの名無しさんNGNG
>>494
つもりが無くても荒らしは荒らしだから、そこのところ理解しておいてくれ。
ちなみに、>>491 のような煽りも荒らしに分類される。
0511JPS ◆M0LaMzf5rY NGNG
>>506
明日は学校10時はんから・・・
今、徹夜という文字が浮かんだYO!
この論争に加わっていれてるのかな・・・おれ・・・
0512デフォルトの名無しさんNGNG
>>509
質問ないときはこんなもんだろ。
0513デフォルトの名無しさんNGNG
>>506
仕事や学校に逝かなければ良い。
0514デフォルトの名無しさんNGNG
>>509
昨日の方が低レベルだったけどな。
0515デフォルトの名無しさんNGNG
>>509
さっさと寝ろ
0516JPS ◆M0LaMzf5rY NGNG
>>510
俺のどこが荒らしだ( ゚Д゚)ゴルァ!
>>491が荒らしなら、おめーもだろ
煽られてるぞおれはああ
0517デフォルトの名無しさんNGNG
一部の環境でうまく動けばそれでいいや。
あらゆる場面で動くプログラムなんて書こうとは思わないし。
0518デフォルトの名無しさんNGNG
>>508
ビットシフトを使う側に論理、算術の選択の余地は無いんだよ。
0519デフォルトの名無しさんNGNG
>>503
なるべく処理系を殺さないという C の設計思想を理解しろ。
そうでなければ自分で言語を定義せよ。 
0520デフォルトの名無しさんNGNG
>>516
もう寝とけ。
明日、またここに来たときには、すでに今の議論は忘れ去れているだろうから。



・・・そしてまた同じことが一から議論されているという罠
0521デフォルトの名無しさんNGNG
C言語って未定義の命令を使えてしかも警告すら出ないのな。
いやC言語というか処理系の問題か。ろくな処理系がないな。
0522デフォルトの名無しさんNGNG
>>516
516 のどこが荒らしじゃないのか説明してもらおうか。
0523JPS ◆M0LaMzf5rY NGNG
>>518
そうだね。じゃあ負の数自体やんなってことか・・・

>>517
俺は学校でやるからそういうわけにはいかないんだYO!
0524デフォルトの名無しさんNGNG
>>519
激しく同意。
未定義や不定が気に入らないなら、JavaかC#を使うがいいさ。
0525デフォルトの名無しさんNGNG
>>516
荒らしだよ。もう寝るよおれは。おやすみ。
0526デフォルトの名無しさんNGNG
昨日何を議論したのかなあ。
忘れてしもうた。
0527JPS ◆M0LaMzf5rY NGNG
>>516は荒らしですた。すまそ。
0528デフォルトの名無しさんNGNG
>>454
ところで>>284が「値渡し」ってどういう意味だ?
(またDQN登場か?)
0529デフォルトの名無しさんNGNG
>>517
こうやって糞プログラマーが大量生産されます。
0530デフォルトの名無しさんNGNG
>>526
NULL, bool(_Bool), 未定義, ... 最近はこのどれかだな。
0531デフォルトの名無しさんNGNG
intを文字列にしたいのですが、どうしたらいいか
分かりません。簡単にできる関数はないのでしょうか?
0532デフォルトの名無しさんNGNG
>>284の引数は3つともポインタだよな。
0533JPS ◆M0LaMzf5rY NGNG
俺にはCしかないんだが・・・
未定義はだめだとして、不定を使う可能性は?
あり?
0534デフォルトの名無しさんNGNG
>>531
sprintf
0535デフォルトの名無しさんNGNG
>>528
ポインタが渡されることを知らんのだろう。
0536デフォルトの名無しさんNGNG
>>528
試してみればわかるよ。
呼び出し元の配列は、決して変更されない。
0537デフォルトの名無しさんNGNG
>>533
int i;
printf("%d\n",i);

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

0539デフォルトの名無しさんNGNG
>>533
使わざるをえない状況になってから考えろ。
0540デフォルトの名無しさんNGNG
>>531
sprintf()
0541デフォルトの名無しさんNGNG
ポインタの値渡しじゃん(笑)
Cには参照渡しなんてないでしょ
0542デフォルトの名無しさんNGNG
>>536
呼び出してみたし、ちゃんと変わるが?
(ネタだとしたら地味すぎるな…)
0543デフォルトの名無しさんNGNG
香具師って何.
0544JPS ◆M0LaMzf5rY NGNG
>>539
わかりますた。そしたらまたここでレスします。

おい、お前ら!不定と未定義って(略
0545JPS ◆M0LaMzf5rY NGNG
>>543
俺のことですが、何か?
0546デフォルトの名無しさんNGNG
>>528
454はどう見てもネタだろ。
0547デフォルトの名無しさんNGNG
Q.C言語の好きな所はなんですか?


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


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

いや、むしろイタ違い・・・サイト違い・・・2ちゃん語辞書引け
0549JPS ◆M0LaMzf5rY NGNG
でも>>537とか絶対やらんよな。
普通に書こう、ごく普通に・・・

そうして未定義を使う罠
0550デフォルトの名無しさんNGNG
2ちゃん語なんて恥ずかしいから使うなよ。
0551デフォルトの名無しさんNGNG
>>547 そしてはまると。
まあ、そういうアドベンチャーゲームも子供の遊びとしてならいいけドナー
大人ならドキュメントちゃんと読もうや。
0552デフォルトの名無しさんNGNG
>>549
i = i++;
お前はこれでもやっとけ。
0553デフォルトの名無しさんNGNG
宿題専門のスレってどこにあるんすか
0554デフォルトの名無しさんNGNG
>>553
http://science.2ch.net/test/read.cgi/rikei/1031422094/l50
0555デフォルトの名無しさんNGNG
http://pc3.2ch.net/test/read.cgi/tech/1029422194/l50
0556デフォルトの名無しさんNGNG
>>551
あなたはドキュメントを全部読んで理解してから使っているのかと小(略
0557デフォルトの名無しさんNGNG
>>553
http://school.2ch.net/test/read.cgi/edu/1028059292/l50
0558デフォルトの名無しさんNGNG
>>554
その手のスレッド、初心者板以外にもあるのか
0559デフォルトの名無しさんNGNG
香具師ってやしって読むのか.かぐしでも変換できるよ.今までかぐしって呼んでたよ.
0560デフォルトの名無しさんNGNG
不定なんて言葉はJISにねーよ。
http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/c/C-faq/C-faq-11.html#11.33
0561JPS ◆M0LaMzf5rY NGNG
>>552
i=i++ってさ、i=i=i++ってなって
i=iってなって、結局i++ってことで、
それが何か?
0562デフォルトの名無しさんNGNG


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

0563デフォルトの名無しさんNGNG
>>552 あれほどknkタンは持ち出すなと、
0564デフォルトの名無しさんNGNG
>>561
アフォ。それは典型的な未定義動作の例だ。
1つの式の中で同じlvalueを何回も変更したら、結果は未定義。
0565デフォルトの名無しさんNGNG
>>561
それ昨日もやったな。
評価の順番が関係する。
0566デフォルトの名無しさんNGNG
>>561
i++はiに1を足して、足す前の値を返すだろ。
それをiに入れたらどうなるかわからない。
1が足されているかもしれないし足されていないかもしれない。
0567デフォルトの名無しさんNGNG
でもi=i++なんてなんのためにやるのかわからないよね(笑)
0568デフォルトの名無しさんNGNG
>>566
そんな浅はかなことは言ってはいけない。
俺はi=i++を実行したため、FreeB○D-MLから迫害された。



・・・ってなことも起きます。
0569JPS ◆M0LaMzf5rY NGNG
>>566
そうか!後置++は評価したあとインクリメント!
じゃあi=++iは?おk?
0570デフォルトの名無しさんNGNG
>>569
C FAQくらい自分で読めよ。
0571デフォルトの名無しさんNGNG
>>568
殺されてもCに対しては文句は言えません。
0572デフォルトの名無しさんNGNG
ってゆうか
i=i++
でいったい何がしたいのか理解できないのだが。
他の手段はいくらもあるだろうし
こんな記述に固執する必要性は全くない。
0573JPS ◆M0LaMzf5rY NGNG
>>564の、1つの式の中で同じlvalueを何回も変更したら
ってとこがどういうことかわからんのだが。。
0574デフォルトの名無しさんNGNG
>>573
今もっている参考書に書いてなかったら、本屋へ行って買って来い
0575JPS ◆M0LaMzf5rY NGNG
>>570
書いてる?
0576デフォルトの名無しさんNGNG
>>571
信者だからですか(藁
0577デフォルトの名無しさんNGNG
CFAQ
ttp://homepage2.nifty.com/rohizuka/ka/pa_003_a.htm

0578デフォルトの名無しさんNGNG
>>577 ブラクラ
0579デフォルトの名無しさんNGNG
>>577
また引っかかった漏れは一体・・・これで7度目だよ・・・
0580デフォルトの名無しさんNGNG
>>572
書ける(文法違反にならない)ってだけだろうね。
i=i+2=i+3なんてやるとi+2は左辺にならないって言われるだろうし。
0581JPS ◆M0LaMzf5rY NGNG
>>577
あぶねー578と579のおかげだ・・・

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

0582デフォルトの名無しさんNGNG
なんかfjに似てきたね、ここ。
0583デフォルトの名無しさんNGNG
っていうか式の中で++とか使うなよ。
他の手段はいくらもあるだろうし
こんな記述に固執する必要性は全くない。
使うときは i++; というふうに単独で。
0584デフォルトの名無しさんNGNG
>>580
1 行目と 2 行目が全然繋がっててないよ。
0585デフォルトの名無しさんNGNG
>>580
そんなん素直に
i+=2;
i+=3;
でいいだろ。
0586JPS ◆M0LaMzf5rY NGNG
だとしたら>>569はぜんぜんだめってことで
香具師扱いをうけたわけか
0587デフォルトの名無しさんNGNG
>>579
もう定番だから、「pa_003_a」 と出てきた時点で事前回避してくれ。
0588デフォルトの名無しさんNGNG
>>585
そんなん素直に
i += 2 + 3;
でいいだろ。
0589JPS ◆M0LaMzf5rY NGNG
>>581は・・・?
0590デフォルトの名無しさんNGNG
>>588
そんなん素直に
i += 5;
でいいだろ。
0591デフォルトの名無しさんNGNG
>>589
お前いい加減しつこいな。
C FAQくらい自分で読めっていってるんだよ。
0592デフォルトの名無しさんNGNG
>>584
そこまで禁止するのは早計。
単に、インクリメント/デクリメントを使った識別子は、副作用完了点までに
複数回使わなければいいだけ。
*p++ = ' '; とか、p[i++] = 123; とかもダメなのかい?
0593デフォルトの名無しさんNGNG
func(i++,i++);
こういうのもどうなるかわからないんだよね。
0594デフォルトの名無しさんNGNG
>>590
どっちでもいいだろ。
そんなのコンパイラが最適化する。
0595デフォルトの名無しさんNGNG
i++;i++;i++;i++;i++;
これが最強
0596デフォルトの名無しさんNGNG
>>593
未定義。
0597JPS ◆M0LaMzf5rY NGNG
>>591
読んでものってねーんだよ。
だいたいそんなレスつけるヒマあったら質問に答えろや。
YesかNOでいいんだからYO!
0598デフォルトの名無しさんNGNG
>>597
くまなく探した?
ブラウザの検索機能を使えばみつけやすいと思うんだけど
0599デフォルトの名無しさんNGNG
要するに同じ変数を何度も変更するなってことだ。
0600598NGNG
>>597
http://www.catnet.ne.jp/kouno/c_faq/c3.html
これの3.3にあるじゃん
0601デフォルトの名無しさんNGNG
>>597
載ってるから言ってるんだよ。
お前の目は節穴か、ボケ!

答えは「無理ではない」
0602JPS ◆M0LaMzf5rY NGNG
>>591
ありますた。すまそ。

http://www.catnet.ne.jp/kouno/c_faq/c3.html#0
3.2
これでつね?
0603598NGNG
ん?
i=i++のことじゃなかったか。
0604JPS ◆M0LaMzf5rY NGNG
>>602は違った。前置を探してたのに・・・

>>601
無理ではないってことはなんか違うってこと?
とりあえずi=++iはだめだよね?
ひとつの式で2回値を変更してるから。
a=b=3はa=(b=3)だからぜんぜんおkだべ?
0605デフォルトの名無しさんNGNG
>>603
581の質問のことだよ。
0606デフォルトの名無しさんNGNG
>>601
どこに載ってる?
A=A=3 は、A に対する副作用がいつ発生するか決まってるの?
0607デフォルトの名無しさんNGNG
int型の変数10個,a[0]〜a[9]を作ります
これをそれぞれ1から10まで変化させます

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

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

よろしくお願いします
0608デフォルトの名無しさんNGNG
えーと、関数の仮引数として書いたとき、
typedef double p[N]; とすると、
double a[N][N]とdouble a[][N]とp *aが全部同じだというのは
わかってる?
0609JPS ◆M0LaMzf5rY NGNG
>>606
俺が読んだ感じだと決まってないって。
だからだめなんだって。これが未定義ってやつ!?
0610市外局番-111NGNG
>>607
if (a[i] == a[j]) break;とか
if (a[i] != a[j]) で処理を書くとか。
0611デフォルトの名無しさんNGNG
>>610
だよなあ?

わざわざ質問するということはもっと複雑なのか、、、
0612JPS ◆M0LaMzf5rY NGNG
>>608
ぜんぜんわかんない・・・
0613デフォルトの名無しさんNGNG
>>606
>>609
お前ら何言ってんだ。
> A=A=3
どの辺のオブジェクトを変更してんだ?
0614デフォルトの名無しさんNGNG
607 は、漏れも知りたい。
前に SEND MORE MONEY を解いた時、バカなコードしか書けなかった。
0615613NGNG
スマン。勘違いだYO。
0616JPS ◆M0LaMzf5rY NGNG
>>613
Aを二回変更してるんでないの?
0617デフォルトの名無しさんNGNG
>>608
何を唐突に・・・
0618デフォルトの名無しさんNGNG
>607
よく分からん.等しくなるようなpairが1つでもあったらすべての処理をShinainoka?
0619デフォルトの名無しさんNGNG
きっと、「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;
}
とやればよいのでは。
0620デフォルトの名無しさんNGNG
>>610
>>611

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

0621デフォルトの名無しさんNGNG
コード func(i++,i++); は、func() に何が渡るかわからないが i は確実に 2 つ
増分されるという事でよろしいか?
0622デフォルトの名無しさんNGNG
>>621
それはいいだろ?
0623デフォルトの名無しさんNGNG
>>619
あ,そういうことです
まったく解決してませんでした(;´Д`)

今から解読してみます
0624デフォルトの名無しさんNGNG
>>622
よくねーよ(藁
0625デフォルトの名無しさんNGNG
>>621
未定義だって言ってるだろが。
0626デフォルトの名無しさんNGNG
>>624
そうか?
どちらのi++が先に実行されるかわからないけど、確実に二回i++を行うだろ?
0627デフォルトの名無しさんNGNG
>>619
それ、バブルソートよりももっと無駄な比較が発生しないか?
それなら素直に if をずらっと並べた方がマシだ。
0628デフォルトの名無しさんNGNG
>>626
もうネタは結構です。
0629デフォルトの名無しさんNGNG
>>626
C FAQくらい自分で読め。
0630デフォルトの名無しさんNGNG
>>626
もっぺんC-FAQの11.33読み直せや。
0631デフォルトの名無しさんNGNG
>>622
カンマで副作用完了点が発生するという考えは間違っているのか?
0632デフォルトの名無しさんNGNG
>>623
int *ipa[10]にその変数たちのアドレスをひとつずつ入れてゆけば?
0633631NGNG
間違い。宛先は >>625
0634デフォルトの名無しさんNGNG
>>631
カンマ演算子と関数のパラメータ区切りのカンマは違うぞ。
0635632NGNG
それよりも
enumで名前をつらねていって、それをintの配列の添え字にした方がいいか。
比較するときは裸の数字を使って。それ以外はenumで定義した名前を使って。
0636デフォルトの名無しさんNGNG
おまえら、本当はCの仕様ちゃんと理解して無いだろ。
0637デフォルトの名無しさんNGNG
>>635
607 は、0 〜 9 の順列を取りたいんじゃないのか?
0638デフォルトの名無しさんNGNG
>>636
理解していなくてもi=i++やfunc(i++,i++)なんてコードは書きませんから。
0639デフォルトの名無しさんNGNG
>>636
あなたが C の仕様ちゃんと理解してるのはわかったから、早く >>631 に
答えてくれ。
0640デフォルトの名無しさんNGNG
>>619

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

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

>>635

よくわからないです
0641デフォルトの名無しさんNGNG
実際には誰も書かないような糞式をいちいち未定義ネタとして
挙げんなっつーの。
0642デフォルトの名無しさんNGNG
いちおう初心者スレなので理解していないヤシばかりなのだが。
0643デフォルトの名無しさんNGNG
>>639がCの仕様を理解していないのが分かってしまったわけだが。
0644デフォルトの名無しさんNGNG
>>637
>>619には全ての数字が異なっているようにしたいと書いてあるけど
0645デフォルトの名無しさんNGNG
>>636
>>631
0646デフォルトの名無しさんNGNG
>>644
そういうのを、0、1、2、3、4、5、6、7、8、9 の順列って言わないか?
0647デフォルトの名無しさんNGNG
だから関数の引数のカンマはsequence pointじゃないって。
0648デフォルトの名無しさんNGNG
0,4,22,2,-5,.....,1000

これでもいいんだろ?順列といえる?
0649デフォルトの名無しさんNGNG
>>641
誰も書かないような分かりにくい書き方を好んで書くのが真のC使いだろ(藁
0650648NGNG
ん?
0から9までだっけ?
じゃあループして入れればいいじゃん(笑)
0651デフォルトの名無しさんNGNG
>>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通り必要なので
いちいち全部書くのは面倒なのです
0652デフォルトの名無しさんNGNG

おバカな煽り厨が1人混ざってんな。
0653デフォルトの名無しさんNGNG
sequence pointのカンマなんかいらんだろ。他の書き方をすれば良い訳で使う必要性なし。
0654648NGNG
えっと、配列じゃなかったんだっけ?(汗
じゃあa=0;b=1;c=2とかいちゃえ。
0655デフォルトの名無しさんNGNG
>>649
そう思っているのは未熟なおまえだけ。
とっとと消えろ。カス。
0656デフォルトの名無しさんNGNG
早く寝ろよガキども。
0657デフォルトの名無しさんNGNG
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?
0658614NGNG
漏れが 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;

と書いた。
もっとマシな方法があったらキボンヌ。
0659デフォルトの名無しさんNGNG
>>653
誰もそんな話はしていない。
0660デフォルトの名無しさんNGNG
>>652
お前の事か。
0661デフォルトの名無しさんNGNG
俺がしている。
0662デフォルトの名無しさんNGNG
>>657
お。なんかカッコいいね。実用性はともかく。
0663614NGNG
>>660
お前のことだボケ。
0664デフォルトの名無しさんNGNG
>>651, >>658
奥村本を嫁。
順列のとこ。
0665663NGNG
名前間違えた。
0666デフォルトの名無しさんNGNG
>>662
実用性って…
whileで書いてもまったく同じコードが出るが?
0667658NGNG
>>664
本を買う金が無い。
0668デフォルトの名無しさんNGNG
>>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
0669デフォルトの名無しさんNGNG
大阪?
0670デフォルトの名無しさんNGNG
http://www5.airnet.ne.jp/tomy/cpro/perm.htm

順列生成だってさ
0671デフォルトの名無しさんNGNG
>>667
貧乏人は低レベルなところでちょこちょこやってろ。
0672662NGNG
>>666
はあ?意味わからんよ。
コンパイラがまったく同じコードを吐くってこと?
0673デフォルトの名無しさんNGNG
>>657
>>649をみろ。
0674デフォルトの名無しさんNGNG
>>672
そう。
こういう再帰はループとまったく同じコードになる。
0675デフォルトの名無しさんNGNG
>>657
わかりやすいコードだね。
やはり再帰はエレガントで良い
0676デフォルトの名無しさんNGNG
しかしなぜに前置++?
0677662NGNG
>>674
そうなんか。
ごめん。知らんかった。ちょっと自分でも試してみるわ。
0678デフォルトの名無しさんNGNG
ばかばっか
0679デフォルトの名無しさんNGNG
真のC使いは再帰とループの両方で書けるとき再帰を選びます。

難しそうに見えてかっこいいから(藁
0680651NGNG
>>657
これは俺へのレスですか?
考えてみます
0681デフォルトの名無しさんNGNG
>>675
二分木扱うときは再帰使うと実にうまく書けると思ったけど、strcmpは・・・
0682デフォルトの名無しさんNGNG
>>675
真のC使いハケーン(藁
0683デフォルトの名無しさんNGNG
>>680
全然違うだろ(ワラ
さっきからの未定義論争だよ
0684531NGNG
激しくサンクス
0685デフォルトの名無しさんNGNG
再帰のほうがやさしいだろ。
qsortとか2分探索とか…
0686デフォルトの名無しさんNGNG
再帰は未定義です
0687デフォルトの名無しさんNGNG
>>685
二つしかあげられませんでした。
0688デフォルトの名無しさんNGNG
memcpyを再帰で書くとどうなりますか?
0689デフォルトの名無しさんNGNG
>>685
クイックソートは分かるが、二分探索(二分木じゃないよな?)はループの方がわかりやすくないか?
0690デフォルトの名無しさんNGNG
678 は昨日も同じことを言ってたバカ
0691デフォルトの名無しさんNGNG
再帰が得意で好きな人は再帰の方がやさしいだろ。だから再帰がやさしいんだ。
0692デフォルトの名無しさんNGNG
まあループをわざわざ再帰にする奴はDQNってこった。
0693デフォルトの名無しさんNGNG
>>670 の URL のコードは、変数名が短かったりグローバル使ってたりして素敵だな。
0694デフォルトの名無しさんNGNG
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);
  }
 }
}
0695デフォルトの名無しさんNGNG
>>693
> free((char *)c)

これ変だよね。freeはvoid *を受け取るのにわざわざキャストしている。
0696デフォルトの名無しさんNGNG
真中より小さければ左半分を、
大きければ右半分を探す。

わかりやすいじゃないか。
0697デフォルトの名無しさんNGNG
俺が書いたコードなんで結構無駄なことやっているとおもう。

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;
}
0698デフォルトの名無しさんNGNG
memcpyは末尾再帰じゃ書きにくい。返す値がアレだから。
0699662NGNG
>>674
試してみたけど、BCC(標準設定)では最適化されず、
再帰のままのコードを吐いたよ。
VC++(Releaseモード)では確かにループに展開された。

というわけで、再帰がループと同じになるとは
決め付けない方がいいね。
0700651NGNG
>>651 は結局良い方法はないのでしょうか・・
0701694NGNG
>>694の再帰呼び出しは、
引数の代入+gotoと思って読んでね。
実際、気の利いたコンパイラならそういうコードを吐く。
0702デフォルトの名無しさんNGNG
もちろん再帰がいつでもループに変わるという保証はない。

ループで書くとややこしいアルゴリズムはまず再帰で書いてみる。
それで十分効率の良いコードになったなら、わざわざわかりにくいループに
書き直す必要はない。
0703デフォルトの名無しさんNGNG
>>699
それは最適化オプションの有無で違うんじゃないのかい?
0704デフォルトの名無しさんNGNG
>>700
簡単な方法では >>658
気の利いた方法では >>664、>>670
0705651NGNG
>>704
なるほど
読んでみます
0706662NGNG
>>702
それなら納得。

>>703
標準設定で試しただけだから何とも言えんが、どちらにしても
666の
> 実用性って…
> whileで書いてもまったく同じコードが出るが?
のように処理系に依存する話をそのように決め付けるのは
ヤバいね。
0707デフォルトの名無しさんNGNG
2進→10進変換も再帰で書いたほうが
簡潔だった気がする。
0708デフォルトの名無しさんNGNG
そう言えば、シフトの話って決着した?
0709デフォルトの名無しさんNGNG
>>708
とうの昔に。
0710デフォルトの名無しさんNGNG
そう言えば、配列の値渡しの話って決着した?
0711デフォルトの名無しさんNGNG
(なんでこのスレの住人は過去ログを読まないんだろう…。)
0712デフォルトの名無しさんNGNG
(なんでこのスレの住人は過去ログを読ますんだろう…。)
0713デフォルトの名無しさんNGNG
そう言えば、func(++i, ++i) の話って決着した?
0714662NGNG
>>703
引き続き最適化オプションを色々指定して試したけど、
BCCではやっぱり無理みたい。
0715デフォルトの名無しさんNGNG
勝手にやってろ!
俺はもう寝る。
0716デフォルトの名無しさんNGNG
結論書いとくか。
負の数をシフトしたら結果は未定義。
符号付の数を左シフトしてあふれても結果は未定義。

配列の内容をそのままコピーして関数の引数に入れるような機能は
Cにはない。そういうことをしたければ、構造体で囲うなどしなければならない。
そうでもしない限り、配列の先頭アドレスのポインタ値が仮引数に(値渡しで)
渡される。

関数呼び出しの実引数を区切るカンマは、カンマ演算子ではない。
sequence pointではない。
0717デフォルトの名無しさんNGNG
>>716
疑問 2 点。
「負の数をシフトしたら結果は未定義」 という事は、(signed)i >> c; は OK?
「カンマ演算子ではない」 = 「sequence pointではない」 の根拠は?
0718717NGNG
失礼。
(unsigned)i >> c;、(unsigned)i << c;
0719デフォルトの名無しさんNGNG
>>718
unsignedにキャストすれば結果は決まっている。

「カンマ演算子でないから」というわけじゃない。
「カンマ演算子ではなく、sequence pointでもない」
0720デフォルトの名無しさんNGNG
ちなみに、負の数をunsignedにキャストするとどうなるかは
処理系定義。
0721デフォルトの名無しさんNGNG
サンクス。

で、これで済む話を、みんな延々と何やってたのだろうか。
0722デフォルトの名無しさんNGNG
>>716
> 「カンマ演算子ではない」 = 「sequence pointではない」 の根拠は?

719が模範解答だけど、別の答えとしては
副作用完了点の定義に含まれるのはカンマ演算子で、
関数の実引数の区切りは含まれていない。
この場合に副作用が完了するのは、実引数の評価が
すべて完了した後となる。
0723デフォルトの名無しさんNGNG
>>717
ちなみに負の数の右シフトは未定義ではなく、処理系定義だよ。
0724デフォルトの名無しさんNGNG
>>607
C++ だと、こんなに簡単なのな。

vector<int> v;
for(int i = 0; i <= 9; i++)
  v.push_back(i);
while (next_permutation(v.begin(), v.end()))
{
  ...
}
0725724NGNG
do while じゃないとダメな事に気付いた。
0726デフォルトの名無しさんNGNG
一日で700
0727デフォルトの名無しさんNGNG
一晩で、だろ。
0728デフォルトの名無しさんNGNG
sage

0729デフォルトの名無しさんNGNG
#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;
}
0730デフォルトの名無しさんNGNG
かき回した奴寝る→話まとまる→ログ流れる→かき回した奴起きる
の繰り返しだな
0731729NGNG
アルゴリズム事典からパクって組み合わせてみました。
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
0732デフォルトの名無しさんNGNG
お前等、いつまでくだらない無いことやってんだ?
おまえらが馬鹿なのか? それともC言語の仕様が難しいのか?
0733デフォルトの名無しさんNGNG
中傷をすることでしか自分を保てない哀れな 732 の登場
0734デフォルトの名無しさんNGNG
擁護することでしか自分を保てない哀れな 733 の登場
0735デフォルトの名無しさんNGNG
各処理系についているヘルプが貧弱なんだろ。
まともに解説しているヘルプや本がない。
0736デフォルトの名無しさんNGNG
コピペでしか煽りすらできない無能な 734 の登場

>>735
それは確かに。
VC++ とかも 「ANSI 準準拠」 とか言われたら大体信じちゃうよなあ。
0737デフォルトの名無しさんNGNG
煽りすらまともな日本語で書けない無能な 736 の登場
0738デフォルトの名無しさんNGNG
いいからお前ら >>577 を読め。
0739デフォルトの名無しさんNGNG
736 の文章がコンパイルエラーになってしまう貧弱な日本語エンジンを持つ 737
0740デフォルトの名無しさんNGNG
線形リストは、ノードが増えるたびにmallocないしnewで領域を確保しますよね。
そしてプログラム終了時はfreeかdeleteをつかうわけですが、
ただ単にfree(node)やdelete nodeとするようにポインタ名に対して1回だけ
やってやればいいのでしょうか?
それとも領域を確保したすべてのポインタを指定して開放しないと
いけないんでしょうか?
0741デフォルトの名無しさんNGNG
>>740
確保したすべてのポインタに対して開放処理が必要。
0742デフォルトの名無しさんNGNG
>>740
> プログラム終了時はfreeかdeleteをつかうわけですが
いいえ、まともなOSや処理系ならば、
プログラム終了時にはfreeかdeleteをつかう必要はありません。
0743デフォルトの名無しさんNGNG
>>740
ワラタ
0744デフォルトの名無しさんNGNG
>>742
またその話ですか?
0745743NGNG
スマソ、宛先は 742

>>744
メ(以下略)
0746デフォルトの名無しさんNGNG
>>740「プログラム終了時」かどうかは置いといて、
とにかくfreeとかdeleteしたいときにどうするか
ということなら、malloc or newした回数だけ
free or deleteする必要がある。

0747デフォルトの名無しさんNGNG
HeapDestroy() で一発
0748デフォルトの名無しさんNGNG
exitで一発
0749720NGNG
>>742
プログラム側で開放しなくても終了時にOSがかってに開放してくれるんですか?
C++始めたばかりでよくしらんのですが、それはメモリリークを引き起こすんでは
ないでしょうか?

>>741、746
助言ありがとう御座いました
0750デフォルトの名無しさんNGNG
>>749
引き起こさない。
スタック領域やグローバル変数領域がちゃんと解放されるのと同じこと。
0751デフォルトの名無しさんNGNG
>>749
引き起こす環境もあるかもしれんが、
そういう環境ではどうせまともにプログラミングなんかできない
から、解放しようとしても無駄。
0752デフォルトの名無しさんNGNG
>>749
少なくともUnix系OSやWindowsやMax OS Xでは大丈夫だよ。
0753デフォルトの名無しさんNGNG
デストラクタ呼び出されないからちゃんとdeleteしろ。
環境依存なプログラミングはできるだけするな。
0754720NGNG
だいぶ理解できました
0755デフォルトの名無しさんNGNG
>>751
MacOS9以下はまともにプログラミングできてましたが?
0756デフォルトの名無しさんNGNG
>>750
> スタック領域やグローバル変数領域がちゃんと解放されるのと同じこと。
C/C++でちゃんとやると決まっていることとOSがやってくれるに違いないは違う。
0757デフォルトの名無しさんNGNG
>753
プログラム終了時はデストラクタが呼ばれるんじゃないか?
0758デフォルトの名無しさんNGNG
742 は、メ(以下略) からしてネタなのに、何でみんなこんなに熱くなるんだ・・・。
面白すぎるぞ。
0759デフォルトの名無しさんNGNG
>>757
new したものを自動で解放してくれる処理系があったら知りたい。
で、スレ違い。
0760デフォルトの名無しさんNGNG
終了時に解放するのがめんどくさいならJavaとかC#使えよ。
0761デフォルトの名無しさんNGNG
>>757
簡単に試験できるんだから、まず試してみろ。
0762デフォルトの名無しさんNGNG
関係無いけど、メモリリークはgc持ってても起きる可能性があるよ
0763デフォルトの名無しさんNGNG
>>762
スレ違いだが興味ある。
GC 管轄外のメモリ機能を使う以外に、どんな可能性がある?
0764デフォルトの名無しさんNGNG
>>762
具体例プリーズ
0765デフォルトの名無しさんNGNG
具体例レリーズ
0766デフォルトの名無しさんNGNG
( ',_`)グプ
0767デフォルトの名無しさんNGNG
出任せか ヽ(´ー`)ノ
0768デフォルトの名無しさんNGNG
762じゃないけど、たとえばリングバッファを使ってFIFOを実装したとき、dequeしたときにポインタを進めるだけじゃなくて、ちゃんと参照を消さ
ないとリークする。

CやC++のプログラムを機械的にGCmalloc()を使うように書き換えたりする
ときに、こういう事が起きる。
0769デフォルトの名無しさんNGNG
C/C++ のニセ GC を GC と言うな。
0770デフォルトの名無しさんNGNG
保守的GCは立派なGCだと思うが...
それに、参照を消し忘れるとリークするのは
どんなGCでも同じ。
0771デフォルトの名無しさんNGNG
>>770
VB は?
0772770NGNG
VBが何?
0773デフォルトの名無しさんNGNG
VB.NETにはまともなGCが入っている。
それより前のVBは、Perlとかと同じ参照カウント方式の疑似GC。
0774デフォルトの名無しさんNGNG
参照カウンタ方式は擬似なのか。方式の違い程度のことだと思うのだが。
0775デフォルトの名無しさんNGNG
参照カウンタだと循環参照は回収できない。
双方向リスト作ったりすると即リーク。
0776デフォルトの名無しさんNGNG
mallocして得た領域を開放せずに終了した場合、大抵は解放されると思うけど、それってCの規格で保証されている?
開けっ放しのストリームは閉じられることが保証されていたと思うけど。
0777JPS ◆M0LaMzf5rY NGNG
>>776
保障されてない。でも実際は開放されてるっぽい。
俺は絶対free()する派
0778デフォルトの名無しさんNGNG
>>776
終了したプロセスの資源を解放するのはOSのお仕事。言語仕様で規定しても意
味がない。
0779デフォルトの名無しさんNGNG
free()はメモリを「開放」する関数ではない。
メモリを「解放」する関数だ。
さっきから開放と言ってる馬鹿共はCを使う資格はない。
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/free.3.html
0780デフォルトの名無しさんNGNG
2chで誤変換をいちいち指摘するバカは2chを使う資格は無い。
0781デフォルトの名無しさんNGNG
>>779
たかが漢字間違いぐらいで鬼の首を取ったようなことを言うなよ
0782デフォルトの名無しさんNGNG
※ここから10レスくらいは罵り合いで消費されるので見なくてOK※※
0783デフォルトの名無しさんNGNG
>>780 >>781
うるせー。馬鹿共。
0784デフォルトの名無しさんNGNG
>>783
(・∀・)ニヤニヤ
0785デフォルトの名無しさんNGNG
>>778
意味あるだろ。
0786デフォルトの名無しさんNGNG
>>778
それを言ったらストリームを閉じることだってOSの仕事になるんじゃ・・・
0787デフォルトの名無しさんNGNG
>>786
> >>778
> それを言ったらストリームを閉じることだってOSの仕事になるんじゃ・・・
ちがう。Cで規定されているのは単にストリームを閉じるためでなく、ファイ
ル構造体のバッファをフラッシュするため。ユーザプロセスに割り当てたメモ
リにはそんな話はあてはまらない。
0788デフォルトの名無しさんNGNG
昔、「解放」って書いてたんだけど、
「開放」と書く人が多いんで、最近はそうするようにしてた。
結局どっちが正しいの?

ぐぐってみました。
「free 解放」 約15100件
「free 開放」 約19000件
0789デフォルトの名無しさんNGNG
意味考えりゃ「解放」に決まってると思うが
0790デフォルトの名無しさんNGNG
>>787
>>778には資源を解放って書いてあるじゃん。資源はメモリだけのことじゃないぞ。
0791デフォルトの名無しさんNGNG
>>787
いみわからん
0792デフォルトの名無しさんNGNG
>>788
> 結局どっちが正しいの?
「free 解放 C言語」 約1,970件
「free 開放 C言語」 約1,240件
ですが何か?
0793デフォルトの名無しさんNGNG
790はバッファの「フラッシュ」と「開放」の違いも理解できないと思われ。
0794デフォルトの名無しさんNGNG
「開放」だってよ。 >>793必死です(w
0795デフォルトの名無しさんNGNG
規格書:JIS X 3010-1993 7.10.3.2 free関数の引用
  free関数はptrが指す領域を解放し、その後の割付けに使用できるようにする。ptrが空ポインタ
  の場合、何も動作しない。それ以外の場合、実引数がcalloc関数、malloc関数若しくはrealloc関数によっ
  て以前に返されたポインタと一致しないとき、又はその領域がfree若しくはreallocの呼出しによって解放
  されているとき、その動作は未定義とする。
ですが何か?
0796788NGNG
>>795
規格書は「解放」ですか。
それに習うことにします。
0797788NGNG
間違えました…
×習う
○倣う
0798デフォルトの名無しさんNGNG
やれやれ、またこの話題かYO!別のスレ立てろや、うぜーから。

何も分かってないJPSは黙ってろ。
0799798NGNG
まぁ開放だけどね
0800デフォルトの名無しさんNGNG
800age
0801デフォルトの名無しさんNGNG
char hoge[32] = "";
なんつーふうにやった場合、
最初の\0の後は0で埋められるんでしたっけ?
0802デフォルトの名無しさんNGNG
グローバルなら。
0803デフォルトの名無しさんNGNG
質問です。
int hairetu[MAXSIZE];
について、main()の中で宣言するよか外で宣言するほうが
MAXSIZEを大きくできるのはなんでなんですか?
0804デフォルトの名無しさんNGNG
>>803
一般にスタックのサイズは小さいから。
関数内でもstaticつければ多く取れるけど
0805デフォルトの名無しさんNGNG
グローバルかどうかは関係なく0で埋まります。
0806801NGNG
ありがとさんdeath
0807デフォルトの名無しさんNGNG
>>806
釣られるな
0808801NGNG
俺は釣られたの?
いいや、自分で調べま。
0809デフォルトの名無しさんNGNG
>>805
あーすまんそうだ。
初期値を全く与えないときは何が入るかわからないんだった。
0810デフォルトの名無しさんNGNG
すみませんが教えてください。
以下はどのようなときに成り立つのでしょうか?
aが4よりとても小さいときだとは思うのですがどうなのでしょうか?

if(a << 4) {
}
0811デフォルトの名無しさんNGNG
もうネタはいいよ…
0812デフォルトの名無しさんNGNG
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になります。
ちなみに、ファイルはちゃんとあります。
どうすればいいんでしょうか?
0813デフォルトの名無しさんNGNG
>>812
もうネタはいいよ・・・
0814812NGNG
>>813
ネタじゃないんですけど、、
初心者ですみません。。
0815813NGNG
>>812
struct statってなんだ?
stat("file.txt" , &st)
ってなんだ?
関数なのか構造体なのかさっぱりわからん。
これがネタでなくてなんだというんだ。
0816デフォルトの名無しさんNGNG
>>815
http://www.linux.or.jp/JM/html/LDP_man-pages/man2/stat.2.html
0817デフォルトの名無しさんNGNG
"./file.txt"
0818デフォルトの名無しさんNGNG
815は構造体のタグ名と関数名が同じものになってはならないとでも思っているのか?(ワラ
0819デフォルトの名無しさんNGNG
"file.txt"も相対パスだと思うのだけど
0820デフォルトの名無しさんNGNG
初心者は>>815だったということで
0821デフォルトの名無しさんNGNG
>>812
../file.txtは親ディレクトリにあるfile.txtを指す
./file.txtでしょ
0822デフォルトの名無しさんNGNG
>>820
うるせーな。ネタだよネタ。おまえらは釣られたんだよ(w
0823デフォルトの名無しさんNGNG
>>822
それもネタですか?
0824デフォルトの名無しさんNGNG
>>813-824
それはともかく
0825 NGNG
>805
http://www.geocities.co.jp/AnimalPark-Lucky/2482/houbi.jpg
0826デフォルトの名無しさんNGNG
>>825
これ何?
0827デフォルトの名無しさんNGNG
>>826
ドラえもんの一場面
0828デフォルトの名無しさんNGNG
stat() って非標準だろ。
ここで POSIX システムコールを扱っていいなら、Win32 API も扱っていい事に
なるわけだが・・・。
0829デフォルトの名無しさんNGNG
ファイル名に変数を入れたいときってどう表記すればいいんですか?

  A=5;
  strcpy(file,"NoA.txt",A)

"No5.txt"を読み込みたいのですが、↑のように書くと
"NoA.txt"は見つかりません。というふうなエラーが出ます。
代入の仕方を教えてください。
0830デフォルトの名無しさんNGNG
>>829
sprintf()

つーか strcpy() の機能をもっとよく理解すれ。
0831デフォルトの名無しさんNGNG
>>829
つーか <string.h> しろ。

いや、入門書から読みなおせ。
0832デフォルトの名無しさんNGNG
今まで見てきたネタの中でも一番すごい
0833831NGNG
#include <string.h> しろ、だった・・・鬱
0834デフォルトの名無しさんNGNG
>>828
あの質問はstatがどんなものかなんて関係ないだろ。fopenでも同じことが起きるんだし。
プログラム以前の問題だからスレ違いといえばスレ違いだが。
0835デフォルトの名無しさんNGNG
>>829
A=5;
strcpy (file, &(((char*)"NoA.txt")[2]=A+'0')-2);

処理系によってはクラッシュします。
gccの場合は-fwritable-stringsオプションを指定する必要があります。
0836デフォルトの名無しさんNGNG
>>835
文字列定数を書き換えるのか(^_^;)
gccって書き換えられる領域に置くように指定することもできるんだな。
0837デフォルトの名無しさんNGNG
>>835
またそういうネタを・・・

そういえば、文字列リテラルって const char * なのか?
キャスト入ってるけど・・・
0838デフォルトの名無しさんNGNG
>>837
文字列スレッドで誰かが特に決まっていないんだねって言っていたけどどうなんだろう。
VC++6.0やBCCはchar *だけど。
0839デフォルトの名無しさんNGNG
char file[] = "No5.txt"; でいいじゃん。
0840デフォルトの名無しさんNGNG
0,1,2,3,4はどうする?
0841デフォルトの名無しさんNGNG
>>840
file[2]='0';とか
0842デフォルトの名無しさんNGNG
829 は 5 しか呈示してないから。
やるとしたら、
char *file[]= { "No1.txt", "No1.txt", "No2.txt", "No3.txt", "No4.txt", "No5.txt" };

つーか 830-831 でマジレス出てるし。
0843デフォルトの名無しさんNGNG
>>831は解決法じゃない。
0844デフォルトの名無しさんNGNG
>>843
<string.h> がインクルードされてれば、829 のコードはそもそもコンパイル
通らないわけだが。
それで間違ってるって気付けるだろうに。
つーか 842 のどこに 「解決法」 って書いてある?
0845デフォルトの名無しさんNGNG
ようするに、あれだ。
ネタに飢えてるわけだな。
0846デフォルトの名無しさんNGNG
遅レスだが >>782-784 ワラタ
0847デフォルトの名無しさんNGNG
>>844
>>843のどこに>>842へのレスだと書いてある?
0848デフォルトの名無しさんNGNG
>>847 アザワラタ
0849デフォルトの名無しさんNGNG
>>847
だからどうしたの?
0850デフォルトの名無しさんNGNG
>>849
お前こそどうしたんだ?
0851デフォルトの名無しさんNGNG
>>850
お前は誰だ?
0852デフォルトの名無しさんNGNG
お前はオレだ。
0853829NGNG
イパーイ釣れた (・∀・)
0854デフォルトの名無しさんNGNG
ヽ(´ー`)ノ
0855デフォルトの名無しさんNGNG
お勧めの高橋麻奈タンの「やさしいC」について出版社から連絡ありました。Linuxでも使えないことはないし、この本をLinux用として使っている人もいるが、基本的にはWindows向きだって。
僕はVineのemacsでCをやりたいから教えてください、って言ったらこの本紹介されたのに・・・・・嘘吐き!!もうキャンセルできないよう。。。。。
0856デフォルトの名無しさんNGNG
from >>1
> ソース丸投げ、宿題、書籍 は専門の別スレがあるからそこへ逝ってくれ。
>
> 上記を守らない書き込みをした場合、その結果は禿しく未定義とする。
0857デフォルトの名無しさんNGNG
>>855です。実は今日買わなきゃなんです。使える本であることを希望します。
0858デフォルトの名無しさんNGNG
でもここの人っていい人ばかりですね。
0859デフォルトの名無しさんNGNG
もうすぐ次スレの季節だが、気が向いたら >>35-36 を拾ってくれ。
0860デフォルトの名無しさんNGNG
なら、ついでに。

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/
0861デフォルトの名無しさんNGNG
をを。

しかし、dat 落ちのままのスレが 12 本って、このスレの回転が無駄に早い事が
分かるな (;´Д`)
0862デフォルトの名無しさんNGNG
>>861
やはり、Cの未定義の結果は多くの場合、coreを吐くからな。
(core = 煽り合い)
仕方がない
0863デフォルトの名無しさんNGNG
>>843-853大ワロタ
0864JPS ◆M0LaMzf5rY NGNG
ビット演算の勉強はかどりますた。
0865デフォルトの名無しさんNGNG
やべー。
860 の文字列が全部、スラッシュで区切られた 「ワラタ」 に見えたYO・・・
眼科に逝くべきか、精神科に逝くべきか。
0866デフォルトの名無しさんNGNG
どういう意味や・・・・
http://ワラタ.ワラタ.ワラタ/ワラタ/ワラタ.ワラタ/ワラタ/ワラタ/

見えるかいな
086760cm浮き上がるストレートNGNG
printf等で値を外からを与えることで幅を変える事は出来ますか?
うまく説明できませんが、printf("%s","%-30s","abcde");みたいに。
今は、あらかじめ幾つも作っとく方法でやっているのですが.
0868デフォルトの名無しさんNGNG
sprintfでつくってprintfかな。
0869デフォルトの名無しさんNGNG
>>867
マニュアルを読め、printf/scanfは奥が深い
int a = 5;
printf("%*.*s\n", a, a, "abcdefg");
a = 20;
printf("%*.*s\n", a, a, "abcdefg");
0870デフォルトの名無しさんNGNG
すいませんまだ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);を読みこんでくれないようなのです
ちなみに文字列なしで文字単体のプログラムをするとちゃんと出力されました
どなたか知恵をお借りしください
0871デフォルトの名無しさんNGNG
> どなたか知恵をお借りしください
ヘンナニホンゴネ
087260cm浮き上がるストレートNGNG
>>868->>869
お答えありがとうございました.
>>868
その方法は調べて勉強してみます.
>>869
あるだろうと思ってたんですが、あったんですね.文字列に割り込めるやつ.
1つ目の*は従来のスペース幅を替えるやつ。引数をマイナルにすれば左寄りになる.
2つ目の.*は始めて見たのですが、どうやら表示文字数を変えるやつみたいですね.
文字列が10文字でも.5なら先頭から5文字だけ表示する。
ただこれは文字列専用のようで、%ldとかだと効かないみたいです.
0873870NGNG
>>871
お貸し下さい
でしたすいませんm(__)m
0874デフォルトの名無しさんNGNG
printf("文字:"); scanf("%1s", &c);
0875デフォルトの名無しさんNGNG
>>870
> 文字列と文字を一緒に出力しようとすると
> なぜか文字だけ出力されません
はて、ちゃんと「改行文字」が出力されているはずだけどな。

多分
> printf("文字:"); scanf("%c", &c);
printf("文字:"); scanf(" %c", &c);
こうすれば、(%cの前にスペースを入れる)君の思ったとおりの動作をするはずだ、
なんでそうなるかはマニュアルを見ろ。
0876デフォルトの名無しさんNGNG
>>874
%1sって\0入れない?
0877870NGNG
みなさんありがとうございます解決しました!
いくつかやり方があるようなのでその辺の仕組みは調べてみます
>>875氏
まさにその通りです

文字列:hogehoge
文字:"hogehoge"
'
'
こんな感じで改行だけされてました
0878デフォルトの名無しさんNGNG
#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]);
}
でコンパイルしようとしてもエラーが出てできません。エラーの内容も読みましたが知識?不足でよく分かりません
だれか教えてください!おねがいします。
0879デフォルトの名無しさんNGNG
>>878
qsort()の行をこうしてみれ。

qsort(point_date,i,sizeof(char *),(int (*)(const void *, const void *))lencmp);
0880デフォルトの名無しさんNGNG
>>878
stdlib.hをインクルードしていないから

エラーじゃなくて警告じゃない?
0881デフォルトの名無しさんNGNG
C言語の一番大元の仕様書(ANSI?)ってどうやったら手に入れられます?
0882デフォルトの名無しさんNGNG
>>880
qsort()ならsearch.hをインクルードしてるから大丈夫だよ。
0883880NGNG
あとgccなんかだとimcompatible pointer typeと警告が出るかも。
消したかったらint lencmp(char **ax,char **ay)をint lencmp(const void *ax,const void *ay)とし、中で適切にキャストするとよい。
0884883NGNG
s/imcompatible/incompatible/

>>882
そうなの!?
search.hなんてしらねー(T_T)
0885デフォルトの名無しさんNGNG
>>878
エラーメッセージがわからなかったら、それをここに貼るといいよ。
0886デフォルトの名無しさんNGNG
>>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はまだ出てない。
0887デフォルトの名無しさんNGNG
Cでwindows上で動くアプリって作れるんですよね?
で、今後の目標に、Cではどんなアプリが作れるのか見たいのですが
Cで作られたアプリってどんなのがありますか?
0888デフォルトの名無しさんNGNG
http://pc3.2ch.net/test/read.cgi/tech/1037101156/

まだ早いかと思いましたが、新スレたてました。
950くらいまではこちらを使ってください。
0889881NGNG
>>886
どうもっす。
0890デフォルトの名無しさんNGNG
>>887
面倒なだけでどんなアプリでも作れる。
0891デフォルトの名無しさんNGNG
>>887
数え切れないけど、例えばお馴染みのFFFTP
http://www2.biglobe.ne.jp/~sota/ffftp.html
0892デフォルトの名無しさんNGNG
>>887
普通のアプリなら、なんでも作れるよ。
ドライバとかは、もしかしたらアセンブラが必要かも知れないけど
0893デフォルトの名無しさんNGNG
>>887
> Cでwindows上で動くアプリって作れるんですよね?
C + Win32Apiを使えば大概のものは作れる。
0894878NGNG
879さんのおかげで無事コンパイルできました!サンクスです!
0895デフォルトの名無しさんNGNG
あげ
0896デフォルトの名無しさんNGNG
Cで子供も作れる
0897デフォルトの名無しさんNGNG
>>896
もうネタはいいよ・・・
0898JPS ◆M0LaMzf5rY NGNG
おいお前ら!ここは質問すれだろ!
論争するならこっちでやれ!おれがたててやったYO!
http://pc3.2ch.net/test/read.cgi/tech/1037105440/l50
0899デフォルトの名無しさんNGNG
>>898 厨房氏ね
0900デフォルトの名無しさんNGNG
#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以降はボロボロ…
「おまいのここが違ってる!!」というのがあったら教えてください。
おながいします。
0901デフォルトの名無しさんNGNG
ちなみに動作環境はOSがXP、「Borland C++ Compiler 5.5.1」で「C言語を始めよう」を使ってます。
0902デフォルトの名無しさんNGNG
>>900
coefがループごとに初期化されてない。
0903デフォルトの名無しさんNGNG
char a[10] = {'\0'};
と
char a[10] = {0};
はどちらも全要素0で初期化されますよね?
0904デフォルトの名無しさんNGNG
>>903
される。つーか何度もその話題は出ている
0905デフォルトの名無しさんNGNG
>>904
何度でたか知らんが、オレは初めて見た。
お前のために地球が回ってるんじゃねーんだよ?
0906デフォルトの名無しさんNGNG
>>905
いや、十分FAQだと思うよ。
0907デフォルトの名無しさんNGNG
>>905
それはただ単におまえが無知なだけだ
0908デフォルトの名無しさんNGNG
>>905
わけのわからん煽りだな。

905=903に違いない。
0909デフォルトの名無しさんNGNG
配列の要素a[1]を1[a]と表せると聞いたんですが1という配列のa・・・?
変数名の先頭に数字は使えないはずですよね?
0910デフォルトの名無しさんNGNG
>>909
a[1] == 1[a] = *(a + 1) == *(1 + a)
0911デフォルトの名無しさんNGNG
>>905
>>801

つい最近出たばっか。>>905は過去ログを読まないDQNの典型。
0912デフォルトの名無しさんNGNG
>>910
意味不明
0913≠909NGNG
>>910
そういうのはどこで習うんすかね。
どういう本を読めばいいんですか。
0914デフォルトの名無しさんNGNG
910 は意味不明
a[1] == *(a + 1) == *(1 + a) == 1[a]
だろ?
0915デフォルトの名無しさんNGNG
>>912
お前が意味不明。
0916915NGNG
>>915
俺が意味不明だった。
0917デフォルトの名無しさんNGNG
>>913=>>905の予感
0918デフォルトの名無しさんNGNG
回答がテンプレート化するほど既出なのはわかるが(なんせスレ41)
簡潔すぎて初心者にはわかりにくいスレになってしまったのかも
0919デフォルトの名無しさんNGNG
寂れたねぇ
0920デフォルトの名無しさんNGNG
錆レターね
0921デフォルトの名無しさんNGNG
だれか前40スレを読破して、FAQつくらないかなぁ。

まあFAQ作っても読まない香具師はいるだろうが、、、
0922デフォルトの名無しさんNGNG
俺もそういうの考えたことある。<CスレFAQ
0923デフォルトの名無しさんNGNG
>>902
binとcoefの初期値設定の場所を変えたら成功しますた。ありがとうございます。
0924デフォルトの名無しさんNGNG
そうですね、どんどん大きくなりっぱなしってね
0925デフォルトの名無しさんNGNG
早く質問こないかな
0926デフォルトの名無しさんNGNG
正直言ってa[1]を1[a]なんて書く必要なんてないわけで
コンパイルエラーになってくれたほうが良い。
0927デフォルトの名無しさんNGNG
まーねー
0928デフォルトの名無しさんNGNG
x["0123456789abcdef"]
0929デフォルトの名無しさんNGNG
お前ら、何でCには真偽値型がないんだ。
if(flag==true)
って書くと期待通りに動かないじゃないか、この糞言語め。
0930デフォルトの名無しさんNGNG
>>928
何それ?文字列の中のxの位置の文字ってこと?
0931デフォルトの名無しさんNGNG
>>930
すぐ上の914で出たばかりですが。
0932デフォルトの名無しさんNGNG
"0123456789abcdef"[x]
0933デフォルトの名無しさんNGNG
>>929
> if(flag==true)

真偽値のある言語でも、こういう書き方してるのって素人くさいと思う。
0934デフォルトの名無しさんNGNG
"01234567[x]89abcdef"
0935デフォルトの名無しさんNGNG
これぐらいで文句をいってはいけない。
その昔、構造体のメンバのアクセス演算子が
! 立ったころ、 foo!bar を bar!foo と
書くことができたんだそうな。
0936デフォルトの名無しさんNGNG
>>930
2進16進変換で使うだろ。
0937デフォルトの名無しさんNGNG
>>933
真偽値のない言語を使ってるヤツからはそう見える。
0938デフォルトの名無しさんNGNG
いい加減釣りは余所でやってくれ。
0939デフォルトの名無しさんNGNG
>>936
使いません。
0940デフォルトの名無しさんNGNG
>>937
おまいが C 言語しか触ったことないのバレバレなんだが
0941デフォルトの名無しさんNGNG
>>940
何で分かったの?不思議。
0942デフォルトの名無しさんNGNG
> if(flag==true)

なぜ
if ((flag == true) == true)
と書かないんだ?
0943デフォルトの名無しさんNGNG
>>942
プ)
お前こそ C 言語しか触ったことないのバレバレ
0944デフォルトの名無しさんNGNG
bool 型がある言語だとこんあ漢字?

if flag = true then ...
if flag then ...

if a = b then f := true else f := false;
f := a = b;

0945デフォルトの名無しさんNGNG
>>942
if(flag)だけだとflagが真偽値が明確ではない。
if(flag==true)だとflag真偽値であるのが明確。
if((flag==true)==true)は既にflagが真偽値であるのが明確なので無意味。
0946945NGNG
分かると思うけど一応訂正。
× if(flag)だけだとflagが真偽値が明確ではない。
○ if(flag)だけだとflagが真偽値であるか明確ではない。
0947デフォルトの名無しさんNGNG
>>945
いいから黙って if(flag) を使っとけ。これ最強。
0948デフォルトの名無しさんNGNG
>>947 苦し紛れだね
0949デフォルトの名無しさんNGNG
if文が実行されれば真、されなければ偽。これほど明確なことがあるか。
0950デフォルトの名無しさんNGNG
見て、勝手使って http://rec.ncos.co.jp
で診断してもらった方がいいね。
0951デフォルトの名無しさんNGNG
>>949 ほらね。実行しなきゃわかんないんだろ。
0952デフォルトの名無しさんNGNG
bool flag2 = (flag==true);
if(flag2==true) {
}

ここまでやれば完璧。誰が読んでも明白。
0953デフォルトの名無しさんNGNG
>>951
バカか。
if(flg==true)
と書いたって実行しなきゃわからんだろ。
0954デフォルトの名無しさんNGNG
#define flag true
0955945NGNG
>>953
実行しないで(ぱっと見るだけで)分かるのはflagの型。
0956デフォルトの名無しさんNGNG
>>952
それは結局。if(flag==true)と同じなんだけど...
0957デフォルトの名無しさんNGNG
>>955
見るだけで何がわかるんだよ。
flgは真偽しか返さないのにいったい他に何がわかるんだ。
0958デフォルトの名無しさんNGNG
>>957
flagの型って書いてあるだろ。まあコーディング規約でflagは真偽しか
返さないと決めてあるのなら別だが。
0959デフォルトの名無しさんNGNG
if(flag)//flag is true or false
kanpeci
0960デフォルトの名無しさんNGNG
>>958
どうしても型が知りたいっていうなら別だが・・・
型を知ってどうするんだ?
そこで型がわかったところで意味ないと思うんだが。
0961デフォルトの名無しさんNGNG
#define isTrue(x) x!=0
0962デフォルトの名無しさんNGNG
>>960
可読性が上がるだろ。
0963デフォルトの名無しさんNGNG
if(flag)より
if(flag==true) の方が可読性で勝ると思ってる奴は初心者。
0964デフォルトの名無しさんNGNG
ふむ。
0965デフォルトの名無しさんNGNG
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.
0966デフォルトの名無しさんNGNG
a. 明日雨が降ったら、遊びに行くよ。
b. 明日雨が降ったら、が真なら、遊びに行くよ。
0967デフォルトの名無しさんNGNG
>>963
反論できないから初心者ということにして誤魔化すことしかできない程度
0968デフォルトの名無しさんNGNG
>>966
a. 旗だったら、遊びに行くよ。
b. 旗が立ったら、遊びに行くよ。

0969デフォルトの名無しさんNGNG
要はflagがbool変数かどうかを知りたいってこったな。
つまりそれがC99で書かれていることが読み取れるわけだ。
(´_ゝ`)ふーん
0970デフォルトの名無しさんNGNG
>>968
えらく自分の都合のいいように解釈してるな(w
0971デフォルトの名無しさんNGNG
>>970
そう解釈できるのだから間違ってないだろ。
0972デフォルトの名無しさんNGNG
俺あんな次スレやだよ。伝統守って欲しいよ。だからこれきぼん。

--------------------
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/";
0973デフォルトの名無しさんNGNG
>>969
自分で何を言っているか分かっていますか?
0974デフォルトの名無しさんNGNG
ずいぶん新着レス数多いなと思ったら・・・・香ばしいな
0975次スレの>>3NGNG
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";
0976次スレの>>4NGNG
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";
0977次スレの>>4NGNG
>>973
型が知りたいんだからそういうことだろ。
0978デフォルトの名無しさんNGNG
flag の型が知りたいから
if ( flag == true )
とするってならこんどは (flag == true) の型を知るために
if ( (flag == true) == true )
こうしなければならない。さらに ((flag == true) == true) の型を知るために(略
0979デフォルトの名無しさんNGNG
bool型があるならまだいいけど無いならあんまり必要性感じないなぁ<true比較
0980デフォルトの名無しさんNGNG
C99じゃないならflagの型を知りたいと言ってもintの可能性があるんだろ?
じゃあ型がわかったことにならないんじゃ。
0981デフォルトの名無しさんNGNG
むしろ
int flg;
とかやってるのに
if(flg == true)
を見ただけで「flgには0か1しか入っていないはず!」と勘違いする可能性が…
でも実はflg=5;とかできちゃうわけで。
0982デフォルトの名無しさんNGNG
よし。
if(!!flag == true)
これなら一石二鳥だ。

>>972
面白いね。
> C言語のことは漏れに聞け!char *c[42];
この辺まで考えてるとは。
0983デフォルトの名無しさんNGNG
>>982
ちょっとわかりにくいタイトルかなとは思ったんだけど、配列のインデックスが0から始まるC
だとちょうどタイトルの番号と過去スレの番号が収まっていいかなと
0984デフォルトの名無しさんNGNG
>>981
intとboolを比較したら普通はエラーだろ?
0985デフォルトの名無しさんNGNG
>>978
if(flag)だけだとflagが真偽値であるか明確ではない。
if(flag==true)だとflag真偽値であるのが明確。
if((flag==true)==true)は既にflagが真偽値であるのが明確なので無意味。
0986デフォルトの名無しさんNGNG
flagなんていう抽象的な名前で考えるから分らない。
たとえば具体的に
int error_occurred;
のとき
if (error_occurred == true)
なんて書いてたらただのDQNだろ。
0987デフォルトの名無しさんNGNG
>>942
なぜ
if (((flag == true) == true) == true)
と書かないのかと小一時間…
0988デフォルトの名無しさんNGNG
ユーザーが指定した数をカウントする関数作り
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]);
}
0989デフォルトの名無しさんNGNG
あのーC99より前のCにtrueやfalseという予約語ありませんよね?
0990デフォルトの名無しさんNGNG
>>987
だから足りない情報(boolであるか)は一つ目のtrueで補えているから二つ目以降は必要ないだろ。
0991デフォルトの名無しさんNGNG
>>985
if ( flag == true )
だと flag が真偽値であることは明確だが
(flag == true) が真偽値であることは明確ではない。
0992デフォルトの名無しさんNGNG
次はあのスレ行かなきゃダメなのか・・・鬱
0993デフォルトの名無しさんNGNG
>>991
(flag==true)は真偽値を返すことになっているはずだが。
0994988NGNG
 このユーザーが、指定した数をカウントする関数を教えて・・・・
0995デフォルトの名無しさんNGNG
        まもなくここは 乂1000取り合戦場乂 となります。

      \∧_ヘ     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ,,、,、,,, / \〇ノゝ∩ < 1000取り合戦、いくぞゴルァ!!       ,,、,、,,,
    /三√ ゚Д゚) /   \____________  ,,、,、,,,
     /三/| ゚U゚|\      ,,、,、,,,                       ,,、,、,,,
 ,,、,、,,, U (:::::::::::)  ,,、,、,,,         \オーーーーーーーッ!!/
      //三/|三|\     ∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ∪  ∪       (    )    (     )   (    )    )
 ,,、,、,,,       ,,、,、,,,  ∧_∧∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ,,、,、,,,       (    )    (    )    (    )    (    )
0996デフォルトの名無しさんNGNG
>>994
今それどころじゃないんだ。
0997デフォルトの名無しさんNGNG
if ( DQN ) abone();
もし DQN なら あぼーん
if ( DQN == true ) abone();
もし DQN が 真 なら あぼーん
0998982NGNG
>>983
今回はもう手遅れっぽいけど、次のスレでは
是非この案を採用して欲しいと願ふ。
0999988NGNG
 おしえて
10001000NGNG
>>1001
んなこた〜わかってんだよ。いちいちウザイぞボケ。
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。