- 1 名前:デフォルトの名無しさん [2007/02/01(木) 23:08:46 ]
- このスレは標準Cのみの限定スレです。
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。 質問する前には最低限検索を。 エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。 C FAQ 日本語訳 www.kouno.jp/home/c_faq/ Cプログラマ必読 ・プログラミング言語C(通称 K&R) www.amazon.co.jp/exec/obidos/ASIN/4320026926/250-7563469-9920244 他の過去ログはここに nssearch.hp.infoseek.co.jp/clang/ 前スレ 【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 130 pc10.2ch.net/test/read.cgi/tech/1159613789/ GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は 専門の別スレッド↓があるのでそこへさようなら。 【初心者歓迎】C/C++室 Ver.34【環境依存OK】 pc10.2ch.net/test/read.cgi/tech/1169039760/ C/C++の宿題を片付けます 82代目 pc10.2ch.net/test/read.cgi/tech/1169575464/
- 196 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 23:41:47 ]
- 0バイトをwriteするとそこから先が削れる場合もあるけど
処理系依存(そもそもwrite自体が処理系依存だが)
- 197 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 00:13:07 ]
- stdioでできることは、
ファイルを作ること ファイルをリネームすること ファイルの任意の位置から読むこと ファイルの任意の位置に書くこと だけで、ファイルのサイズやレコードのオフセットを変更することはできない。 というかそれらはファイルの中身ではなく、ファイルの管理方法に関わることなので、 必然的に処理系のファイルシステムに依存する。 ありとあらゆる環境で動作することを保証したいなら、 それはファイルをまるごと読んで必要な構成で別ファイルに書き出し 元ファイルを消してから元の名前にリネームするしかない。 ある程度ターゲットの環境が決まっていて、それぞれに有効な環境依存の技があるなら、 それぞれの環境のためのコードを書いて、プリプロセッサで処理系に適合させるのが有効。
- 198 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 04:57:47 ]
- そういうファイル処理するプロセスを環境ごとに作り、主プログラムからはそれを呼び出すというのも一つの手。
- 199 名前:171 [2007/02/26(月) 19:52:50 ]
- >>187
某所で、その話題を見たから気になっただけ。 >>188 確かにそうですね。
- 200 名前:デフォルトの名無しさん [2007/02/28(水) 15:50:13 ]
- C言語をはじめたばかりであまりわからないのですが、
ビットシフトはなんの役に立つのでしょうか?
- 201 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 16:11:58 ]
- >>200
楽しいか?
- 202 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 00:55:09 ]
- >>201
C++相談室の「STLを使うと」から始まるコピペみたいに テンプレ化せんとダメなんかなぁ?
- 203 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 22:32:01 ]
- ANSI Cの仕様について質問です。
mainはANSI Cではint main(void)またはint main(int argc, char *argv[]) と決まってるけど K&Rではmain()となっていて戻り値intと引数voidを省略していますよね? これもANSI準拠と言えるんでしょうか?
- 204 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 22:50:07 ]
- >>203
戻り値の省略はANSI準拠でない
- 205 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 23:56:49 ]
- JIS X 3010では
関数定義: 宣言指定子列opt 宣言子 宣言並びopt 複合文 宣言子: ポインタopt 直接宣言子 直接宣言子: 識別子 ( 宣言子 ) 直接宣言子 [ 定数式opt ] 直接宣言子 ( 仮引数型並び ) 直接宣言子 ( 識別子並び ) だからmain()は許されてるように読めるけど。どこかで明示的に禁止されてたっけ?
- 206 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 23:57:22 ]
- 識別子並びの後ろにoptが抜けてた。
- 207 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 23:58:24 ]
- >>203だと関数定義なのか関数宣言なのか曖昧だな
- 208 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 00:16:26 ]
- Cの場合は省略時はintじゃなかったっけ
C++は確かダメだったような
- 209 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 00:18:29 ]
- 許されてはいるけど、
コンパイラによっては警告が出るから鬱陶しい。
- 210 名前:デフォルトの名無しさん [2007/03/10(土) 02:33:54 ]
- よくqsortに渡す関数ポインタを
int cmp(int* a,int* b) { return *a-*b; } と書いてるサイトを見かけるんですが、これは qsortのプロトタイプの int(*func)(const void* a, const void* b)) と関数ポインタの互換性が無いと思うんですが、これはアリなんですか?
- 211 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 02:36:13 ]
- >>210 ダメ
- 212 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 02:41:41 ]
- intの配列ならこうだな
int cmp(const void *a, const void *b) { return *(int *)a - *(int *)b; }
- 213 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 02:41:50 ]
- >>210
それはオーバーフローを起こすアホコードだから絶対に真似しちゃダメ。
- 214 名前:210 mailto:sage [2007/03/10(土) 02:43:22 ]
- >>211
ですよねぇ・・・ 更には return *a-*b; も何かやばい感じがするんですが aに大きい負数が渡されるとおかしな事になるような・・・
- 215 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 02:43:29 ]
- >>212 もアホ確定。
- 216 名前:デフォルトの名無しさん [2007/03/10(土) 03:06:11 ]
- 多分、このスレの前スレで、Linuxのカーネルソースは
$ lint 〜 にパスしないと受け付けられない、みたいな書込みがあったように思うのですが、 この「〜」の部分のオプションが分かる方いらっしゃいますでしょうか?
- 217 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 03:46:02 ]
- サイトからソースを取得するプログラムについて質問したいのですが・・・
誰かいますか??
- 218 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 03:47:05 ]
- >>217
環境依存スレへどうぞ。
- 219 名前:デフォルトの名無しさん [2007/03/12(月) 23:00:34 ]
- ANCI C言語辞典だと
return *a-*b;みたいな書き方してるけど この辞典のサンプルソースはあてにならん int型の配列のqsortの比較関数は下のような 感じになるんじゃないかな int int_cmp(const void *a, const void *b) { if (*(int *)a < *(int *)b) return (-1); else if (*(int *)a > *(int *)b) return (1); return (0); }
- 220 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 23:16:43 ]
- int int_cmp(const void *a, const void *b)
{ return *(int *)a == *(int *)b ? 0 : ( *(int *)a > *(int *)b ? 1 : -1 ); }
- 221 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 23:21:23 ]
- やはり、intを返すという基本設計がまずいな。
- 222 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 23:23:46 ]
- >やはり、intを返すという基本設計がまずいな。
>やはり、intを返すという基本設計がまずいな。 >やはり、intを返すという基本設計がまずいな。
- 223 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 23:28:40 ]
- よし、doubleを返すようにすればいいんだな!
アホかい
- 224 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 23:42:35 ]
- えーとじゃぁオレchar返すよ
- 225 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 23:43:55 ]
- たぶん彼は3値論理の型が欲しいと言っているんだろう
- 226 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 23:58:36 ]
- #define UNDER -1
#define EQUAL 0 #define OVER 1
- 227 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 05:33:23 ]
- そこはenumだろ常識的に考えて
- 228 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 06:17:15 ]
- _Bool返せよ。
- 229 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 06:39:41 ]
- おまえからそんなもの借りてないよ
- 230 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 06:44:58 ]
- >>228
_Boolじゃ3種類の値は返せないだろ
- 231 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 06:47:54 ]
- 別に3種類も返す必要ないだろ。
- 232 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 06:52:19 ]
- qsortの比較関数か? なら最低3値返す必要があるよ。
- 233 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 06:55:27 ]
- クィックソートは3値ないとアルゴリズム的に実行不可能なわけ?
- 234 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 06:56:51 ]
- アルゴリズム的に実行不可能という意味がよくわからないけど、
qsortの仕様がそれを要求している。それだけ。知らなかったの?
- 235 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 07:09:43 ]
- >やはり、intを返すという基本設計がまずいな。
という流れできてるんだけど・・・・・・
- 236 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 07:42:29 ]
- >>233
C++のstd::sort()の場合、要求してるのは2値(bool値)のPredicateだし 別に不可能ってわけじゃない。 例えばcmp() は a > b ならtrue, さもなくばfalseを返すという仕様であると して、もし同値かどうかの判定が必要であれば、 cmp(a,b)、cmp(b,a)の両者がfalseならば a == b と判断できるわけで。 >>234の言うように、C標準のqsort()の仕様が3値の比較関数を求めている ってだけだ。
- 237 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 07:58:04 ]
- >>233
qsortはクイックソートではない 内部でどういうアルゴリズムで実装されててもいいことになっている そういうわけで、a==bに対して非0を返すと、ソートが終わらなくなる可能性がある。
- 238 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 08:12:54 ]
- >>236-237 >>235
- 239 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 08:42:20 ]
- >>235
ああ、なるほど。流れはわかった。 が、intを返すのってそんなにまずい設計か? ちょっとその辺の説明が欲しい。 むしろループの中で何度も呼ばれる関数なわけで、 intを返すのは性能の観点から当然の選択だと思うけどな。
- 240 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 08:46:49 ]
- >>239
>>221 がまずいって言い出したから、みんなで何がまずいんだよって叩いてる流れ
- 241 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 08:54:11 ]
- 三値を返すのが不味いんだろ。型が問題なわけじゃない。
- 242 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 09:29:51 ]
- ネーミングから誰でも一度はする誤解だよな>qsortはクイックソート
- 243 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 10:31:22 ]
- 要は、整数の比較関数を減算で行なうサンプルが問題なんだろ。
- 244 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 12:23:16 ]
- 値の差が INT_MAX を超えるとアウトだからね…
- 245 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 12:57:11 ]
- まぁ必ずしも必要とは限らないのに、比較が2回必要な3値の関数を
求める仕様は糞と言ってもよいだろうな。
- 246 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 13:03:14 ]
- 必要なソートアルゴリズムもあるから、そうなってるんだろ
- 247 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 13:12:03 ]
- >>237
×qsortはクイックソートではない ○qsortはクイックソートとは限らない
- 248 名前:デフォルトの名無しさん [2007/03/13(火) 15:20:00 ]
- strcatを使用しないでchar型配列(str1とstr2)を連結したいのですが、
文字列str1の最後の'\0'に文字列str2の0からを一つずつ代入していけばいいのは 分かるのですが、やり方がわかりません。 どうすればできますか?
- 249 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 15:22:36 ]
- マルチすんなアホ
- 250 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 20:15:26 ]
- >>242
というかクイックソートを念頭に置いて名付けたんだろ。 単にこのスレ的にそう決めつけるのは誤ってるってだけで >>244 実際の差を返す必要はないでしょ? 必要なのは符号だけで
- 251 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 20:17:15 ]
- >>250
おまえは何もわかってないな
- 252 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 21:22:59 ]
- >>250 後段
いちいち言われんと解らんのか。 >>213
- 253 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 21:42:38 ]
- なんで>>250の後段が>>213に関連してくるのかわからん。
誰か解説してくれ。
- 254 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 21:52:19 ]
- >>213の意味がわからんて事?
- 255 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 22:22:01 ]
- >>250 の意味が分かってもらえてないって事だろ。
- 256 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 00:21:36 ]
- >>213
なんでオーバーフロー起こすか解説きぼん
- 257 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 00:25:00 ]
- 問:負の数が弐の補数の処理系において、
*a=0, *b=INT_MINの場合、どうなるか?
- 258 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 00:35:24 ]
- >>246
>>236を読め。2値さえ貰えれば十分のはずだから。
- 259 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 01:29:02 ]
- ダメだこりゃ。
- 260 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 01:32:05 ]
- >>213なんて分かりきった上で、全然別の次元の話をしているだけなのだが?
- 261 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 01:41:12 ]
- INT_MINの符号反転はINT_MINのままだから
int a = 0; int b = INT_MIN;のとき >>210だと cmp(&a, &b) < 0となってしまうのでダメってことか で>>220だと cmp(&a, &b) > 0となり正しいと。
- 262 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 01:47:31 ]
- >>250=256=260
だと最高なんだがなーw
- 263 名前:デフォルトの名無しさん [2007/03/14(水) 01:58:02 ]
- 450Kのコードっていったらどれくらいの規模のこと?
45万行ってこと?
- 264 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 02:01:41 ]
- 450KiBかも知れず。
- 265 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 02:18:51 ]
- >>262
違うよ。いつまでもそんな下らない話題引っ張られても邪魔だから 引っ込んでろといってる。
- 266 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 02:21:24 ]
- stdc++のstd::sort()もソートアルゴリズムを指定していない点では同じだが
要求しているのは2値のPredicateだ。 何度も繰り返すが、3値のPredicateは要らないんだよ本来は。 整数のオーバーフローとかいう低レベルの下らない話とは全然別問題。
- 267 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 03:36:11 ]
- >>266
なんでここで全然関係のないstdc++が出てくるのかわからんがな。 規格においてqsortは安定でないことになっているから、 本来は3値も要らず、2値で十分てことだろ。
- 268 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 03:46:23 ]
- >>267
実際には順序付け集合に対する2値の述語関数があれば、 3値と同等のことは実現できる。だから、仮に3値が必要な場合であっても 2値の述語関数で十分なの。 >>236を読めよ。
- 269 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 03:59:52 ]
- 結論:
比較関数をいっぱい呼びたい奴はC++を使っとけ
- 270 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 05:38:34 ]
- >>268
まったくだ。ifとwhileだけで構造化は実現できるのにforなんて無駄きわまりないな。 breakやcontinueなんてもっての他だ。gotoやlongjmpに至っては(ry
- 271 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 05:47:10 ]
- >>270
意味不明。馬鹿じゃないの。 構造化のための構文は*ユーザにとって*便利であり *ユーザが*見通しの良いプログラムを書くのに役に立つ。 2値の述語関数で十分なのに3値の述語関数を要求するのは *ユーザにとって*便利でも何でもないし、 それによって効率があがりもしない。 結局3値の比較が*実際に*必要である箇所では、比較が2度必要になるからだ。 しかし、3値の比較を*常に*ユーザ側に求めた場合、実際には必要でない 箇所でも2度の比較を行う羽目になる。 つまり、不便なだけでなく、効率が悪くなるのだ。 それはライブラリ側の怠慢であり手抜きであり仕様の欠陥でしかないよ。
- 272 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 05:47:59 ]
- >>270
まったくだ。lambdaさえあれば他になにも(ry
- 273 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 05:56:40 ]
- >>269
アホか。C++のほうがはるかにソートを楽に記述できる。
- 274 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 06:00:15 ]
- 順序集合をソートする場合において、等値かどうかの比較が常に必要とは
限らないんだが、 わざわざそれを常にユーザに強いているのがCのqsort()の仕様。 C++のstd::sort()の場合は、そんな馬鹿なまねはしない。必要な場合は、 そして必要な場合のみに限って、2値のPredicateだけで等値かどうかの 判定をできるからだ。
- 275 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 06:59:21 ]
- そして、2値を返すなら、compの素直な実装方法による
オーバーフローがどうこうという面倒な話も発生しない。
- 276 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 07:34:36 ]
- Perlにはsortのために(としか思えない)わざわざ3値比較のための
演算子なんてものが用意されてるよね。 <=> とか cmp とか。これは笑ってしまう。
- 277 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 08:02:25 ]
- それはここでやる話じゃないだろ。
- 278 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 09:12:15 ]
- ここまで読んだ
とりあえず論点が完全にズレたまま進行してることはわかった
- 279 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 20:42:33 ]
- いつまでソートの話してんだよ。
- 280 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 21:31:47 ]
- 例えば以下のような構造体をファイルで宣言した時
初期値として、 hoge.bar == NULL と hoge.foo == NULL は保証されているのでしょうか? struct { char *bar; char **foo; } hoge;
- 281 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 21:33:29 ]
- されるわけないでござる
- 282 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 21:40:01 ]
- え?その定義ならされるだろ。
まさかあれか、全ビット0がNULLとは限らないというあの流派か。
- 283 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 21:43:23 ]
- 自動変数でも?
- 284 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 21:56:14 ]
- 大域変数か静的変数なら初期化される。
ゼロフィルではなく、全てのメンバが0に。
- 285 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:01:03 ]
- ファイルで宣言ってのは、自動変数説を否定している、と俺は見たが。
関数で宣言、なら自動変数かもね。 深読みしすぎといわれればその通り。
- 286 名前:デフォルトの名無しさん [2007/03/14(水) 22:06:00 ]
- C言語初心者です。
「C言語プログラミング能力認定試験」って取るメリットありますか?
- 287 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:09:52 ]
- スレ違いだよ
1級ならまだ許せるけど、履歴書に2級とか書かれたら(´,_ゝ`)プッ
- 288 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:16:35 ]
- 私はまだ何も分からないのですが
プログラミングをするにあたってまず何をそろえて何をすればいいんでしょうか?
- 289 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:19:21 ]
- >>288
MSのサイトからコンパイラをダウソ。
- 290 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:21:24 ]
- まずはパソコンを買うことから始めます。
- 291 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:24:13 ]
- >>288
ボーランドコンパイラかVisual C++ Express。どっちも無料 インストール後、適当にPATH通せ
- 292 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:29:36 ]
- Knoppixをお勧めしてみるテスト
- 293 名前:288 mailto:sage [2007/03/14(水) 22:49:47 ]
- Visual C++ Expressのダウンロード及びセットアップ完了しました。
- 294 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 23:22:34 ]
- >>280
「ファイルで」というのが「関数の外で」宣言されたという意味なら、される。 この初期化は、配列でも構造体でも、全ての要素について「=0」と書いたかのように行われる。 よって不動小数点数は0.0に、ポインタはヌルポインタに正しく初期化される。 >>293 入門書を買って言語仕様を覚えろ。
- 295 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 23:27:15 ]
- 関数内でもstatic付けた静的変数ならやっぱり0初期化される
- 296 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 00:19:35 ]
- >よって不動小数点数は0.0に、ポインタはヌルポインタに正しく初期化される。
大間違い。
|

|