[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 05/09 19:03 / Filesize : 146 KB / Number-of Response : 644
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 132



1 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 13:10:57 ]
このスレは標準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 131
pc11.2ch.net/test/read.cgi/tech/1170338926/


GUIなどの標準Cではできない事の質問、ソース丸投げ、宿題、書籍 は
専門の別スレッド↓があるのでそこへさようなら。

【初心者歓迎】C/C++室 Ver.42【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1188748806/
C/C++の宿題を片付けます 95代目
pc11.2ch.net/test/read.cgi/tech/1187944110/


【このスレ住人としての心得】
ビットシフトはなんの役に立つのでしょうか でググれ

75 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 00:32:37 ]
>>72 >>74

返答ども!
やってることは確かにそうなんですよねぇ

なんで*(sp + j)でやると異常終了するんでしょう?
アドレスを1づつ増やして、*でその1増えたアドレスを差せば
順番に出力されてもいいはずなのになぁ

76 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 00:40:34 ]
>>71
どこから引っ張ってきたソースだかしらんけど
spは要素7のcharの配列へのポインタだから*spは要素7のcharの配列そのものを意味するけど
これは直ちに要素7のcharの配列の先頭要素へのポインタつまりcharへのポインタに成り下がるので、
これにjを足せばそれは要素7のcharの配列の先頭要素から数えてj個目の要素を指すポインタになるから
*(*sp+j)は要素7のcharの配列の先頭要素から数えてj個目の要素を意味する

77 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 00:44:06 ]
>>75
spは要素7のcharの配列へのポインタだから、
これに1を足すと要素7のcharの配列のサイズぶん後を指す
charのサイズぶん後を指させたいならcharへのポインタにしなければならない

78 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 00:44:21 ]
spは「要素7の配列」へのポインタだから
有効なのはsp+0〜sp+2 の間だけ
spに1足すと
[JAPAN\0\0]
→[USA\0\0\0\0]
[FRANCE\0]
に移動する
JAPANの'A'に移動するわけじゃない

79 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 00:49:13 ]
こういう場合普通は char sp[][7] って書いて
sp[i][j] みたいに参照するんだけどな
なんだこのソース

それとも訓練用にわざとわかりにくい書き方をしてるのか

80 名前:75 mailto:sage [2007/09/22(土) 01:11:26 ]
みなさんありがとうございます!非常にすっきりしました。どんだけ悩んだことか・・・

spは配列strの先頭アドレスが入ってて、1足せば次の文字が出るもんだと思ってた
今の場合は2次元配列で要素数が7だからsp+1だと7つ分一気にずれるのか

で、*spにすることでcharへのポインタになり、1足せば次の要素に行く。と・・・

こんな感じであってるんでしょうか?

81 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 03:19:35 ]
> ユニコード(UTF16)では0x0000〜0xffffまでの値が文字の領域として
> 定義されているらしいですが、WEOFは0xffffと定義されています。
このそもそも間違いだらけの文章に誰も突っ込まないってどうよ

82 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 04:28:28 ]
どこが間違ってるか説明お願いしますよ

83 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 04:30:29 ]
1行目はC言語のワイド文字(Unicodeとは限らない)の話なのに
なぜか唐突にUnicodeが出てくる
WEOFは0xffffとは限らない



84 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 10:19:03 ]
たまたま40の処理系ではそうだったけど、ということで勘弁してやろうぜ。

85 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 10:42:54 ]
>80
あってる

86 名前:デフォルトの名無しさん [2007/09/22(土) 10:56:34 ]
objと lib は同じようなものですか?

objを標準のlibフォルダに入れておけばコンパイル速いですか?

87 名前:デフォルトの名無しさん [2007/09/22(土) 11:09:52 ]
複数の関数が入っているlibファイルを作って、<***.h>と書いたとき自動的に必要なlibファイルを読み込むように出来ますか?
printfとかは必要なlibファイルを勝手に読み込みますよね?

88 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 11:14:15 ]
環境とコンパイラによる
C言語そのものとは関係ない

89 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 11:21:32 ]
>>86
>objと lib は同じようなものですか?
Windowsのlibの話ならlibはobjのアーカイブ

>objを標準のlibフォルダに入れておけばコンパイル速いですか?
関係ない

>>87
ムリ
>printfとかは必要なlibファイルを勝手に読み込みますよね?
gccならlibc、VCならCRTが自動的にリンクされるだけで、ヘッダファイルとは関係ない

90 名前:デフォルトの名無しさん mailto:age [2007/09/22(土) 12:09:33 ]
↑リンカーを自分で作ったら可能

91 名前:デフォルトの名無しさん mailto:age [2007/09/22(土) 12:12:15 ]
JavaScriptに近いC++ありませんか?

92 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 12:14:34 ]
>>91
C#

93 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 13:46:57 ]
3つの数字が同じかどうかを
A==B==C
で比較できますか?




94 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 13:50:05 ]
できませんよ

95 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 13:50:52 ]
できますよ

96 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 13:52:20 ]
AもBもCも1である、という限られた条件なら可能w。

97 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 13:52:43 ]
そう思うならやってごらんよ

98 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 13:59:01 ]
>>95
お前バカだなぁ
わかってないんだから出てくるなよ

99 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 16:13:40 ]
できますよ

100 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 16:15:38 ]
できますん

101 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 16:23:29 ]
自演乙

102 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 16:54:14 ]
どうでもいいが、馬鹿は初心者スレで言ってくれ。

103 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:21:48 ]
>>87
>複数の関数が入っているlibファイルを作って、<***.h>と書いたとき自動的に必要なlibファイルを読み込むように出来ますか?
Visual C++ なら、ヘッダファイルに次のように書いておけば、mylib.libがリンクされる。
#pragma comment(lib, "mylib.lib")



104 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:35:38 ]
>>103
スレ違いは誘導しましょう。

105 名前:デフォルトの名無しさん [2007/09/22(土) 18:28:21 ]
JIS X 3010-1993 6.2.1.2 から
負の整数 A を A の型と同じサイズか大きいサイズの符号無し整数 B に変換するとき
処理系の負の整数の表現がどうであれ B は A の 2 の補数表現と同じビットパターン
になると考えてもいいですか?


106 名前:デフォルトの名無しさん [2007/09/22(土) 18:36:22 ]
規格は、処理系が採用している数値の内部表現(2's complementとか)には言及してないだろ。
だから、符号拡張が起きるかどうか(が聞きたいのだろうがそれ)も処理系による。


107 名前:デフォルトの名無しさん [2007/09/22(土) 18:38:41 ]
とはいえ、まーそのへんの2's complementな処理系だと、

32bit signed int が INT_MIN
10000000000000000000000000000000
だったとして、それを64bit unsigned long longに代入したら
1111111111111111111111111111111110000000000000000000000000000000
だわな。

| B は A の 2 の補数表現と同じビットパターン
| になると考えてもいいですか?

だから、この答えはNoかな。



108 名前:デフォルトの名無しさん [2007/09/22(土) 18:58:19 ]
規格では B の型の最大値 + 1 + A だから型のサイズが同じ処理系なら
負数の表現方法にかかわらず同じ結果になるんじゃないですか?


109 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 19:00:18 ]
>>108
規格の文言を一字一句たがわず書いてみて

110 名前:デフォルトの名無しさん [2007/09/22(土) 19:06:05 ]
> 型のサイズが同じ処理系なら
> 型のサイズが同じ処理系なら
> 型のサイズが同じ処理系なら
> 型のサイズが同じ処理系なら
> 型のサイズが同じ処理系なら
> 型のサイズが同じ処理系なら

>>105と前提が変化した件について。相手にするの止めようかな。



111 名前:デフォルトの名無しさん [2007/09/22(土) 19:18:17 ]
ビットの話がしたいなら、規格持ち出すの止めて処理系書けよ。



112 名前:デフォルトの名無しさん mailto:age [2007/09/22(土) 19:22:00 ]
NicoVideo動画リンクが付いて超便利になった
www.freewebs.com/photoradio/?0/1103271


113 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 19:27:03 ]
if (sa > 10 || sa < -10)

if (sa>=11 || sa<=-11)
は同じですか?



114 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 19:29:12 ]
>>113
sa が整数型なら

115 名前:デフォルトの名無しさん [2007/09/22(土) 19:33:15 ]
>> 109
JIS X 3010-1993 は会社にしかないし紙しかなく文が長いので
ここに書くには手間がかかりすぎます。


116 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 19:42:48 ]
>>113
お前宿題スレでしつこく書いてるバカだろ
お前だけだぞ、わかってないの

117 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 19:45:33 ]
>>115
身勝手な奴だな

118 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 20:08:10 ]
printfなどの関数でefgなど浮動小数点数の変換を行うとき、
私は四捨五入が行われるものと思っていましたが、
X3014 : 2003 7.19.6.1には「この変換は適切な桁数への値の丸めも行う」と書かれているのみです。

この丸めもFLT_ROUNDSに従うものなのでしょうか。
あるいは、私が見落としただけで、ほかの箇所で規定されているのでしょうか。

119 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 20:13:55 ]
>>113
こんなとこまで来ててフイタ

120 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 20:24:25 ]
模倣犯では。
ネット社会が生み出した
これも一つの Stand Alone Comlex か(笑)


121 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 20:25:21 ]
模倣犯では。
ネット社会が生み出した
これも一つの Stand Alone Comlex か(笑)

122 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 20:25:47 ]
模倣犯では。
ネット社会が生み出した
これも一つの Stand Alone Comlex か(笑)


123 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 20:35:32 ]
模倣犯では。
ネット社会が生み出した
これも一つの Stand Alone Comlex か(笑



124 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 20:38:03 ]
模倣犯では。
ネット社会が生み出した
これも一つの Stand Alone Comlex か(笑)

125 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 20:44:23 ]
>>120-124
間違い探しか?

126 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 21:01:22 ]
Stand Alone Comlex(笑)

127 名前:デフォルトの名無しさん [2007/09/22(土) 21:02:33 ]
>>109
C90 ではなく C99 であるが ttp://www.jisc.go.jp/app/pager?id=26811 の
6.3.1.3 に同じような内容がある。
UINT_MAX が 65535 のとき (unsigned int)(-1) は 65535 ということに
ならないでしょうか?


128 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 22:13:22 ]
intで2バイトってまだあるの?

129 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 22:13:34 ]
うん

130 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 22:36:41 ]
ifとswitchはどのように使い分ければいいですか?

131 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 22:52:49 ]
switchは複数個の定数値を取るかもしれない1個の変数を判断するとき
それ以外はif
というか全部if、else ifでも別に

132 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 22:58:04 ]
>>131
具体的に教えてください。

133 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 22:59:41 ]
>>132
具体的に聞いてください。



134 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 23:00:20 ]
>複数個の定数値を取るかもしれない1個の変数を判断するとき
というのが良く分かりません。

135 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 23:05:31 ]
知らなくておk

136 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 23:07:42 ]
分かったときに分かればいいだけの話

137 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 23:09:55 ]
>>134
if(xxx==0){
.....
}else if(xxx==1){
.....
}else{
.....
}
↑こういうのならswitchで↓この様に書けるけど
switch(xxx){
case 0:.....break;
case 1:.....break;
default:.....
}
↓こういうのはswitchを使って書けない
if(xxx==0){
.....
}else if(yyy==1){
.....
}else if(yyy==zzz){
.....
}else{
.....
}

138 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 23:16:34 ]
馬鹿な質問に対して列挙型を〜って素直に教えないところがこのスレの優しさだな。

139 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 23:17:04 ]
と言ってしまったけどswitchを複数使えば書けないことも無いか
でもやっぱりそこまでして使うくらいならifを使ったほうがいい

140 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 23:19:48 ]
>>138
皮肉なんか言ってないで教えたらどうなの。

141 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 23:43:39 ]
初心者スレじゃないんだから、わざわざ教えることもない。

142 名前:デフォルトの名無しさん [2007/09/23(日) 00:01:27 ]
符号付き整数 x を2のn乗 (n は 0 から 8 の整数) で割って-∞方向の
整数に丸める整数演算はどのようにすればいいでしょうか?
Windows なら右シフトで x >> n のようにできますが処理系定義なので
一般的には右シフトではできないようですが。


143 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 01:23:10 ]
>>142
x / (1 << n)



144 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 01:28:14 ]
>>143
それだと負の数が0方向に丸められないか?

145 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 01:43:54 ]
>>144
んじゃ、負の数ん時は条件分岐して適当にやっておいて。

146 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 02:38:31 ]
>>127
ファイルが見つかりません。
ならない。

147 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 02:39:26 ]
ちなみに-(unsigned int)1なら65535になる。

148 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 02:43:26 ]
へ? (unsigned int)(-1) は UINT_MAX と同じだろ。

149 名前:デフォルトの名無しさん [2007/09/23(日) 02:46:46 ]
>>146-147
何でそう思うか、きみが前提としている諸条件と共に述べよ。

150 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 03:22:22 ]
どーでもいい話してんなお前ら

151 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 04:45:40 ]
>>149
それはむしろ俺が>>127に言いたいんだが

152 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 09:48:24 ]
/*奇数か偶数か*/
#include <stdio.h>
int main(void)
{
int no;

printf("整数:"); scanf("%d",&no);

switch (no%2) {
case 0:puts("偶数");break;
case 1:puts("奇数");break;
}
return (0);
}


153 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 10:14:31 ]
switch (no%2) {
case 0:puts("偶数");break;
case 1:puts("奇数");break;
}



puts((no%2)?"奇数":"偶数");



154 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 10:15:26 ]
/*月の季節を表示 switchで*/
#include <stdio.h>
int main(void)
{
int no;

printf("月:"); scanf("%d",&no);

switch(no) {
case 3:
case 4:
case 5:puts("春です。");break;
case 6:
case 7:
case 8:puts("夏です。");break;
case 9:
case 10:
case 11:puts("秋です。");break;
default:puts("冬です。");break;
}

return (0);
}




155 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 10:16:26 ]
>>153
条件演算子は、見にくくなるから使わないほうがいいって言われたんですが、どうなんでしょうか?

156 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 10:21:29 ]
>>154
そらぁさすがに、defaultはエラー処理に使うべきじゃね?

157 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 10:22:56 ]
>>155
>>153が見にくい?

158 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 10:27:14 ]
>>153は十分に可読性を残してるだろ

159 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 10:39:46 ]
>>50参照。

160 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 10:40:00 ]
>>41
参照。

161 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 10:41:06 ]
>>154
/*月の季節を表示 switchで*/
#include <stdio.h>
int main(void)
{
int no;

printf("月:"); scanf("%d",&no);

switch(no) {
case 3:
case 4:
case 5:puts("春です。");break;
case 6:
case 7:
case 8:puts("夏です。");break;
case 9:
case 10:
case 11:puts("秋です。");break;
case 12:
case 1:
case 1:puts("冬です。");break;
default:puts("そんな月ありません。");
}

return (0);
}




162 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 10:56:22 ]
>>161
バグがある

163 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 11:08:22 ]
>>154,>>161
何故これを書いたの?この後に質問が続くのか?
先に意図を書いて欲しい...



164 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 11:15:23 ]
return (0); //(笑)

case 1:
case 2:puts("冬です。");break;
の間違い?

165 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 11:31:54 ]
>>163
多分>>134の例だろ

166 名前:デフォルトの名無しさん [2007/09/23(日) 12:42:42 ]
>>147
6.5.3.3 単項演算子-の結果は,その(拡張された)オペランドの符合を反転した値とする。
オペランドに対して整数拡張を行い,その結果は,拡張された型を持つ。

拡張された型で負数を表現できない場合にどうなるかの記述を見つけることができ
なかったが,拡張された型に変換されると考えれば
(unsigned int)(-1) と -(unsigned int)1 は同じ結果になるんじゃないか?


167 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 13:36:46 ]
puts("\a負の数を入力しないでください。");
の\aはどんな意味がありますか?

168 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 13:41:27 ]
>>167
ビープ音を1回鳴らす。

169 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 13:53:52 ]
\a = alert
実際の動作は処理系依存。
ビープ音もあれば画面をフラッシュさせることもあるらしい。

170 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 14:11:57 ]
前者はaudible alarm、後者はvisible alarmと言うこともあるね。

171 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 16:08:05 ]
int no;
int sum;
no=1;
sum=2;

int no=1;
int sum=2;
は同じですか? どちらを使うべきですか?

172 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 16:09:39 ]
後者は古い規格だと使えない事がある

173 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 16:23:02 ]
>>172
それはないやろ。



174 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 16:23:55 ]
いいえ。このスレ的には全く問題ありません。

175 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 16:25:57 ]
>>172
そうなんですか。前者を使うほうがいいんですね。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<146KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef