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

C言語ならアタシに聞きなさい<37>

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
C言語の質問スレッド37発目です。
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/

・前スレ <36>
http://pc3.2ch.net/test/read.cgi/tech/1035211039/

コンパイラ、過去ログなどのリンクは>>2-5 あたり
0232デフォルトの名無しさんNGNG
>>226
負数に2の補数を使ってないCPUなんてあるのか?
0233デフォルトの名無しさんNGNG
リッチーもひどい言語をつくってくれたものだな!
0234デフォルトの名無しさんNGNG
>>232
PS2のCPUとか。
0235デフォルトの名無しさんNGNG
>>233
はじめっからCは高級アセンブラって位置付けなんだから
変な期待すんな
0236デフォルトの名無しさんNGNG
>>233
モノは使いよう。
クソソースを作るやつがクソ
つーか age る程の話題ではない
0237デフォルトの名無しさんNGNG
>>231
たとえば
void hoge(char ch);
という関数があったら、intに変換されるってこと?
わけわからん。
0238デフォルトの名無しさんNGNG
>>221の意味がわからない。
解説お願いします。
0239デフォルトの名無しさんNGNG
>>235
未定義・処理系依存が多すぎるじゃん!
0240デフォルトの名無しさんNGNG
>>234
マジで?
gccとかやばいんでない?
0241デフォルトの名無しさんNGNG
0x80〜は符号拡張されるから、よくやる
n = c - '0';
みたいなのは0x80をまたいでは使えないんだね。気付かなかった。やらないけど。
0242デフォルトの名無しさんNGNG
>>224
だから、ないとまずい理由をちゃんと書け。
0243デフォルトの名無しさんNGNG
引数がint型に拡張されないと、DLLとかで困ると思うんだが。
0244デフォルトの名無しさんNGNG
>>241
だれに返事してるの?
0245デフォルトの名無しさんNGNG
1の補数表現って8bitの場合、0x00と0xFFは同じ値になるの?
Cと関係なくてスマソ
0246デフォルトの名無しさんNGNG
>>242
つーか、その話題まだ引きずるの?
0247デフォルトの名無しさんNGNG
>>244
ひとりごとだ、スマソ
0248デフォルトの名無しさんNGNG
以降

 独 り 言 禁 止
0249デフォルトの名無しさんNGNG
>>243
それは、Windowsの実装の話でしょ。
C一般の話じゃないよ。
0250デフォルトの名無しさんNGNG
>>227は放置ですか?
前スレにstrcpy(str,NULL);やstrcpy(str,0);はOKみたいなことが書かれていたんですけど。
0251デフォルトの名無しさんNGNG
>>249
でも、一般的なPC環境はWindowsだよね
0252デフォルトの名無しさんNGNG
以降

   OS依存、処理系依存禁止
0253デフォルトの名無しさんNGNG
>>250
そんなこと気にしてるの、お ま え だ け だ よ
そんなこと気にしてるの、お ま え だ け だ よ
0254デフォルトの名無しさんNGNG
以降

 ふ か わ り ょ う 禁 止
 ふ か わ り ょ う 禁 止
0255デフォルトの名無しさんNGNG
このスレッド立ってから12時間も経っていないんですけど。
0256デフォルトの名無しさんNGNG
>>217
'A':文字定数->int型として解釈される
"hoge":文字列リテラル:一文字一文字はcharとして解釈される
0257デフォルトの名無しさんNGNG
>>242
あれがないと、'ア'を渡したとき、
int c = 0x000000B1のままになってしまうから。
ではどうですか?
0258デフォルトの名無しさんNGNG
>>256
*strで参照するとintに拡張されますが。
0259デフォルトの名無しさんNGNG
>>251
Winで1バイトの引数を4バイトの領域を使って渡してるのを、
↓これと、混同してるわけ?

>221 :デフォルトの名無しさん :02/10/27 03:09
>関数の引数として渡すと char、short は int に float は double に自動的に変換されるのです

0260デフォルトの名無しさんNGNG
>>246
結局俺は、c = (char)c; が必要かどうか、わからんかった。
誰か、まとめてくれないか ?
0261デフォルトの名無しさんNGNG
>>259
混同ではないよ。
Windowsの規約。
0262デフォルトの名無しさんNGNG
printf が %d で char でも short でも int でも受けれたり、%f で float でも double
でも受けれたりするのを考えれば >>221 は自ずと分かると思いますが
ダメでしょうか?
0263デフォルトの名無しさんNGNG
これスレはテレビの馬鹿番組でも見ているようで楽しいな
0264デフォルトの名無しさんNGNG
>>261
だからCの話と関係ないじゃん。
0265デフォルトの名無しさんNGNG
>>262
?
0266デフォルトの名無しさんNGNG
>>262
それこそ中でキャストしているだけじゃ・・・
0267デフォルトの名無しさんNGNG
>>262
この話は、それとは違うじゃん。
0268デフォルトの名無しさんNGNG
>>250
それを書いたものだが、そんなことしてOKなんて一言も書いてないぞ。
ただしやっていかんとも書いてない。なぜなら、その時の議論には
全く関係のないことだったからだ。
0269デフォルトの名無しさんNGNG
>>260
必要。
0270デフォルトの名無しさんNGNG
>>264
キミもしつこいね。
0271デフォルトの名無しさんNGNG
strchr() 内における c = (char)c; は、

  0x111 のような文字とは思えないデータでも文字データとして扱うなら必要
  文字とは思えないデータははじいてしまうなら不要

という事でよろしいか?
0272デフォルトの名無しさんNGNG
>>269
理由書けバカ。
0273デフォルトの名無しさんNGNG
>>266
渡された引数の型が分からないのにどうやってキャストするのさ?
0274デフォルトの名無しさんNGNG
>>262
あんな、プロトタイプが与えられてない場合と、不定数引数の場合だけ
charがintに昇格するなどの暗黙の処理が入るんだ。

不定数引数ってのは、
int printf(const char *, ...);
みたいな関数の...の部分な。
0275デフォルトの名無しさんNGNG
>>270
君、勉強不足だね。
0276デフォルトの名無しさんNGNG
>>268

717 :デフォルトの名無しさん :02/10/25 16:37
char a[100];

/* 配列に空文字列をセットする3つの方法 */
strcpy(a, NULL);
strcpy(a, 0);
strcpy(a, "");

どこが関係のないことだ?NULLを渡すと空文字レスがセットされると書いているが?
0277デフォルトの名無しさんNGNG
>>272
教えてもらいたかったら、土下座しろ。
0278デフォルトの名無しさんNGNG
>>269
だから、>>242 にも書いたけど、ないとまずい理由を書いてよ。
0279デフォルトの名無しさんNGNG
>>273
%fならdoubleに、%dならintにキャストすればいいだろ。
0280デフォルトの名無しさんNGNG
>>277
今モニタの前で土下座してます。
0281276NGNG
× 空文字レス
○ 空文字列
0282デフォルトの名無しさんNGNG
>>279
( ゚д゚).......
0283デフォルトの名無しさんNGNG
>>276
すまんすまん、おれが書いたのは
http://pc3.2ch.net/test/read.cgi/tech/1035211039/742
だ。
0284デフォルトの名無しさんNGNG
>>258
*strがintに拡張されるのはint型の変数と比較するからだろ。
文字列リテラルの型とは関係あるのか?
0285デフォルトの名無しさんNGNG
ああ、ドキュンが沢山いる
0286デフォルトの名無しさんNGNG
あの変なマクロつかうやつでしょ。
あれは何をやってんだろう。
0287279NGNG
>>282
なんかおかしいこといっているか?
0288デフォルトの名無しさんNGNG
>>278
45のソースではc=(char)c;が無いと、仕様どおり動かないから。
0289デフォルトの名無しさんNGNG
>>279
キャストってのはね、「元の型」と「キャストする型」の両方が分かってないとできないのよ
0290デフォルトの名無しさんNGNG
>251
 パソコンユーザ全体だと確かにおっしゃる通りなのですが、
プログラマの仕事の環境となると、ハードウエアはPC/AT互
換機が現在では一般的といえたとしても、OSは、wnidowsが
そこまでの一般性があると言い切るのは少し抵抗があります。

 しかし、実勢としては、windowsしか知らないユーザ/プ
ログラマがそのように感じたり言ったりすることが間違いだ
とことさらに否定するほど、windowsの存在は小さなもので
はないので、微妙ではありますね。

 何ごとも、ひとたび多数派となれば、その他の世界を知ら
ないか無視してしまう人も出てくるのは避けられないわけで、
その意味では今はwindows”専門”ユーザ/プログラマが目
立ってしまっているのは事実です。
0291デフォルトの名無しさんNGNG
>>271
> 0x111 のような文字とは思えないデータでも文字データとして扱うなら必要

それ余計にまずくない ?
0292デフォルトの名無しさんNGNG
>>288
その 「仕様」 の文またはポインタをキボンヌ。
0293デフォルトの名無しさんNGNG
>>288
何で、具体的に書いてくれないの ?
どう言う仕様に違反するのさ。
0294デフォルトの名無しさんNGNG
>>288
0x3131 を指定しても '1' として扱うのが仕様なのか?
0295279NGNG
>>289
そうだったの。
0296デフォルトの名無しさんNGNG
>>290
環境が普及してるかどうかって問題じゃないんだけど…
0297デフォルトの名無しさんNGNG
みんな楽しそうだなあ
0298デフォルトの名無しさんNGNG
>>296
デファクトスタンダードって言葉がある。
0299271NGNG
>>291
漏れはマズイと思う。
でも実際、漏れが 0x111 を指定して strchr() を呼ぶ事はないから問題ない。
0300デフォルトの名無しさんNGNG
>>251, >>290
つーか、「一般的なPC環境はWindowsだよね 」と言うのは、まあ当たってると思う。
しかし、C で作られたプログラムの一般的なプラットフォームが PC と言うのは了見が狭すぎ。
0301デフォルトの名無しさんNGNG
>>293
http://www.mkssoftware.com/docs/man3/strchr.3.asp
自分で探しなよ。
googleで検索したら一番上にあったよ。
0302デフォルトの名無しさんNGNG
>>300
soでもおんなじですが。
0303デフォルトの名無しさんNGNG
>>298
Cの規格にそんな言葉はありませぬ。
0304デフォルトの名無しさんNGNG
>>303
でも、規格はデファクトスタンダードによって作られる。
0305デフォルトの名無しさんNGNG
>>299
> 漏れはマズイと思う。

だったら、c = (char)c; はいらないんじゃないの ?

> でも実際、漏れが 0x111 を指定して strchr() を呼ぶ事はないから問題ない。

と言うなら、特にね。

(何で、これで「必要」と言う結論に至るのか理解できん...。)
0306デフォルトの名無しさんNGNG
>>305
少しは頭使え


  少  し  は  頭  使  え

0307デフォルトの名無しさんNGNG
というか
int hoge(char c);
この関数の引数が、符号拡張されて渡されるなんて言うのは、
議論の余地なく間違ってるよ。
0308デフォルトの名無しさんNGNG
>>301
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/strchr.3.html

こっちは書いていないけど。
linux向けとはいえ、標準関数はきちんとANSIに乗っ取って書いてあるはず。
0309デフォルトの名無しさんNGNG
>>305
0x80-0xffを指定したときに、仕様通りに動作しないから
0310299NGNG
>>305
おい (怒)
「必要」 とは一言も言ってねえ。
第一、c = (char)c; が問題になるタイムクリティカルな局面では、
C なぞ使わん。
0311デフォルトの名無しさんNGNG
>>307
ネタですか?
0312デフォルトの名無しさんNGNG
>>309
309 は >>168 を試してないだろ。黙れ。
0313デフォルトの名無しさんNGNG
少しも話が進んでいない様ですが
気のせいですか。
0314デフォルトの名無しさんNGNG
>>308
それは記述が省略してあるんじゃない?
0315デフォルトの名無しさんNGNG
>>301 >>308
そんな 1 プラットフォームの実装なんか見せられたって意味ないよ。
ANSI ではどうなってる?
0316デフォルトの名無しさんNGNG
>>313
気のせゴホッゴホッ。。
0317デフォルトの名無しさんNGNG
char = signed charの環境で

char *str="\xff";

if(strchr(str,0xff)) とやると偽になるってこと?
0318デフォルトの名無しさんNGNG
316 は病に倒れました。
0319デフォルトの名無しさんNGNG
>>315
ネタですか?
0320デフォルトの名無しさんNGNG
>>317
ネタですか?
0321308NGNG
>>315
いやだから、、標準関数に関してはANSIに乗っ取っているってば。。。
もし拡張しているならきちんと明記してある(strstrの第二引数に""を渡した場合とか)
0322デフォルトの名無しさんNGNG
>>315
ANSIではcharでキャストするらしいよ。
0323317NGNG
>>320
わからん。試していないから。
これが真になるなら別にキャストは必要ないような・・・
0324デフォルトの名無しさんNGNG
>>310
> 「必要」 とは一言も言ってねえ。

はあ ?

>>271 「0x111 のような文字とは思えないデータでも文字データとして扱うなら必要」

自分の書いたことぐらい覚えておけ、ヴァカ。

> 第一、c = (char)c; が問題になるタイムクリティカルな局面では、
> C なぞ使わん。

タイムクリティカルだってさ。(藁
0325デフォルトの名無しさんNGNG
おまえらANSIぐらい読めよ。それでもC使いか?
0326デフォルトの名無しさんNGNG
>>312
うん。今度試してみる。
0327デフォルトの名無しさんNGNG
>>317
真になるよ。
charが8ビットなら。
0328デフォルトの名無しさんNGNG
>>325
お言葉ですが、この中に何人C使いがいるとお思いですか?
0329308NGNG
>>321
> 標準関数に関してはANSIに乗っ取っているってば。。。
> もし拡張しているならきちんと明記してある

間違いなくそうなのか?
その根拠が示されてないっての。

>>322
情報へのポインタをキボンヌ。
0330317NGNG
あ、わりぃ。>>317のstrchrはcharへのキャストがないstrchrと考えて。
0331デフォルトの名無しさんNGNG
>>328
すいません。馬鹿な素人ばかりでした。
■ このスレッドは過去ログ倉庫に格納されています