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


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

C言語なら俺に聞け(入門篇) Part 36



1 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 11:40:35 ]
C言語の入門者向け解説スレです。

教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
  C/C++の宿題を片付けます 115代目
  pc11.2ch.net/test/read.cgi/tech/1217741118/

・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
・開発環境や動作環境も晒すと答えが早いかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
  C言語なら俺に聞け(入門篇) Part 35
  pc11.2ch.net/test/read.cgi/tech/1219761846/
過去スレ
  makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000

66 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 12:04:22 ]
自分で書いた汚いCコードを読み込んで綺麗に整形して出力してくれるアプリってないの?


67 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 12:06:26 ]
>>65
改行も1文字分

68 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 12:12:08 ]
インデント+α程度の整形ツールならあるけど

69 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 12:13:37 ]
>>62
>>65
なるほど、やっと理解できました!
でもgetcharは一文字入力なんですよね?
なんというか根本が解ってない感じだw

んー、まずaでループに入り1を出力、次に改行文字でループに入り1を出力……ってことですかね?

70 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 13:02:33 ]
まぁ、そんなとこだね。
「次に改行文字でループに入り」というよりは、
「次に得るのが改行文字なのでループから脱出せずに」だけれど。

71 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 13:13:40 ]
入力が行単位でバッファリングされてるとわかりにくいかも
打った文字はEnterを打つまで入力されない
Enterを打つと打った文字+改行が入力されて、getcharでそれを1文字ずつ取り出せる

72 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 13:25:23 ]
'a'と'\n'の値が両方1ってどんな処理系だよ

73 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 13:27:06 ]
>>72


74 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 13:28:03 ]
>>72



75 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 13:29:13 ]
>>72
ちゃんと元のコード読め


76 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 13:29:21 ]
畜生見間違えた
そこに括弧ついてんのかよ!

77 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 13:34:13 ]
……カッコ悪い

78 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 13:34:39 ]
>>76
ドンマイ!

79 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 01:15:59 ]
>>8
微妙に意味がちがう。
a = 1;
b = ++a;
b = a++;
では結果がちがう。


func ( a++, a+1, ++a)
のとき、funcの引数がどんなになるか挙動不明。



80 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 01:23:59 ]
>>79
単体で使った場合を聞いてたのにいまさらなにをw

しかも後半は引数がどうなるか不明つーより未定義動作じゃねーか

81 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 07:41:19 ]
バイナリファイルを直接数字に変換する方法はどうすればいいのでしょうか?
rubyではunpack("s*")を使うのはしってるんですけど。

82 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 07:52:47 ]
>>81
rubyのunpackは変換が目的だから、Cの場合はその必要が無い。
例えば、(今ぐぐって見つけた)リファレンスマニュアルの例だとこうなる。
unsigned char foo[] = {1, 2, 0376, 0375};
unsigned short * bar = (unsigned short *) foo;
printf("%u, %u\n", bar[0], bar[1]);

83 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 14:27:04 ]
www.vipper.org/vip929921.txt

すみません、なんでこのプログラムはEOFを入力すれば終了するのでしょうか?><


84 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 14:35:22 ]
>>83
!= EOF が偽になって getline が 0 を返すから > 0 が偽になって main を抜けるのでは?



85 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 17:36:33 ]
Cでは0xffのように16進数を使用できますが、2進数は使えますか?

86 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 17:44:22 ]
>>85
使えません

87 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 17:46:51 ]
あたかも2進数記述しているようにみえるマクロならある

88 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 17:48:51 ]
>>86-87
ありがとうございました

89 名前:デフォルトの名無しさん [2008/09/18(木) 19:09:38 ]
インクルードについて教えてください。

あるサンプルソースコードを入手して、
~~.slnを実行して、デバッグしたら動きました。

ファイル入出力をしようと思って、
メイン関数が書いてある.cファイルで#include <iostream>とすると、
1>c:\program files\microsoft visual studio 8\vc\include\cstdio(35) : error C2059: 構文エラー : ':'
1>c:\program files\microsoft visual studio 8\vc\include\cstdio(36) : error C2143: 構文エラー : '{' が ':' の前にありません。
が大量に出てきてしまいました。

インクルードしただけです。
何がいけなかったのでしょうか?

90 名前:デフォルトの名無しさん [2008/09/18(木) 19:11:44 ]
すみません、上のものです。
C++なので、スレ違いでした。
去ります。すみません。

91 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 20:27:31 ]
.cファイルで#include <iostream>

そりゃダメだろ

92 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 02:10:43 ]
C++でコンパイルするオプション付けりゃいいんじゃん。

93 名前:デフォルトの名無しさん [2008/09/19(金) 16:34:15 ]
C言語のコンパイラで質問があります。
WindowsXPで、BCC DevelopperとBorland C++ Compiler 5.5.1を使用しています。
プロジェクトを一つ作り、そのプロジェクト内で複数のC言語ファイルを作成しているのですが、
一番最初に作成したC言語のファイルしか、コンパイル、メイク、実行ができません。
どうすれば他のC言語のファイルをコンパイル、メイク、実行する事が出来るのでしょうか?

94 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 16:36:57 ]
bcc32 main.c foo.c bar.c




95 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 16:42:27 ]
それを言うならメイクじゃなくてリンクでは

96 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 16:45:33 ]
それはC言語の問題でもコンパイラの問題でもなくて、
BCC Developerのプロジェクト管理機能の使い方に関する問題だよな?

97 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 16:49:56 ]
質問です。


int a

if(a)



この場合のifの条件aとはどういう意味ですか?


98 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 16:51:44 ]
if(a!=0)
とまったく同じ意味

99 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 17:02:27 ]
えー

100 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 17:06:59 ]
えーといわれても
何が不満なんだ?

101 名前:97 mailto:sage [2008/09/19(金) 17:16:27 ]
>>98
ありがとうございました。

>>99は僕じゃないですが、ダジャレですかね?w

102 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 20:22:19 ]
スレが凍りついた

103 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 23:18:37 ]
ローグってCで書かれてるの?

104 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 23:25:16 ]
>>103
だよ。



105 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 23:32:50 ]
そうか、じゃあ俺もCで書いてみようかな

106 名前:デフォルトの名無しさん [2008/09/20(土) 02:58:12 ]
int i;
char buf="cjd";
for(i=0;i<buf[i];i++);
上記for文の境界条件はマイナーですか?

107 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 03:07:02 ]
何をしないのかわからない>>106

108 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 03:08:48 ]
>>106
文字列の長さだけまわしてるつもりなら、それはおかしいだろ。


109 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 03:19:36 ]
(・∀・)ニヤニヤ

110 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 03:40:45 ]
仮に
char *buf = "cjd";
だったしても、そんな書き方するヤツはプログラムやめたほうがいい。

111 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 04:37:52 ]
Windowsの場合
#ifdef WIN32

#endif
で処理を分岐するんですが
MACは、何を指定すればいいでしょうか?

112 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 04:45:32 ]
MACの場合に#defineされるシンボル
決まってなければ、自由に

113 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 05:01:24 ]
知らないなら黙っててください
邪魔です

114 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 05:02:35 ]
>>113>>111?



115 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 05:03:10 ]
禿同

116 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 05:05:27 ]
>>112みたいな無知ほど書き込みたがる
知らないならすっこんでろっつーの

117 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 05:12:30 ]
知らないならすっこんでろつうか知っている人いないと思う
そんなもの決め事だから

118 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 05:13:41 ]
cc -D MACOS 。。。。。

#ifdef MACOS

#endif

119 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 09:49:46 ]
>>110
K&R、つまりC言語を設計した人にC言語を辞めろと申すか?

120 名前:デフォルトの名無しさん [2008/09/20(土) 10:09:36 ]
>>119
いいから見直せ

121 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 10:09:56 ]
俺には i<buf[i] の意味がわからん。
比較することにどんな意味があるんだ?

122 名前:デフォルトの名無しさん [2008/09/20(土) 10:19:19 ]
bufに入っている文字の
(使用中の処理系での)コードとそれが何文字目かということに、
何らかの関係があるんだよ。

123 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 11:00:24 ]
>>120
すまん早とちりしてた
>>106のおかしなプログラムに対するレスだったのか

124 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 12:34:34 ]
printf("foo")
は関数で末尾にセミコロンが付くと正確には文になるのですか?
そういった場合printf文というのが適切なのですか?



125 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 12:39:44 ]
>>124
その通り
正確には単文

Pascalはセミコロンが文と文の区切りに使われるが
C言語はセミコロンは文の終了を表す

126 名前:デフォルトの名無しさん [2008/09/20(土) 15:46:13 ]
×単文
○式文

pascal 厨が下手に口を出すからボロが出る
文と複合文はあっても単文はない

127 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 15:47:28 ]
>>126
馬鹿ですか?
{}で囲まれたのが複文
そうでないのが単文

128 名前:デフォルトの名無しさん [2008/09/20(土) 16:00:49 ]
つっこみをよく読めアフォ

129 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 16:03:28 ]
126==128
お前がアフォ

130 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 16:05:35 ]
(・∀・)クスクス

131 名前:デフォルトの名無しさん [2008/09/20(土) 16:20:47 ]
もう一度言う、「単」文という用語はCにはない

132 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 16:25:48 ]
C言語 単文 複文 の検索結果 約 619 件中 1 - 30 件目 (0.26 秒)
C言語 式文 複合文 の検索結果 約 162 件中 1 - 30 件目 (0.32 秒)


133 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 16:27:27 ]
お前らくだらん事でもめないでISO/IEC9899:1999もしくは
JIS X3010:2003の何ページのどこここにあります、ってやってくれ

無駄にスレを伸ばすな

134 名前:デフォルトの名無しさん [2008/09/20(土) 16:39:25 ]
>>132
おまえの情報源はそんなものか
お里が知れるな



135 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 16:41:20 ]
(・∀・)クスクス

136 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 16:43:07 ]
>>134
お前も煽ってばかりいないで>>133のアドバイスのように
ちゃんと答えてやれ

答えられないと証拠も無いのに、と言われるだけだぞ

137 名前:デフォルトの名無しさん [2008/09/20(土) 16:52:58 ]
>>136==125

俺だって、ちゃんと「式文」と教えただろうが無礼者め

138 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 16:55:05 ]
>>137
それは証拠にならない
規格書のどこに書いてあるか言ってみろ

139 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 16:56:52 ]
その答えがわかったら、バグが減るの?

140 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 16:57:54 ]
話を逸らすな馬鹿者

141 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 16:58:45 ]
(・∀・)クスクス

142 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 16:59:30 ]
a = 10, b = 10 , c++;
ってあったら文はa = 10, b = 10 , c++でおk?

143 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 17:00:46 ]
式≠文

式文って式+セミコロンのこと?

144 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 17:06:44 ]
>>142
厳密には「;」まで含む。



145 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 17:08:15 ]
規格書にも書いてない造語を勝手に作って人を欺いている
バカがいると聞いて来ますた

146 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 17:09:50 ]
↑ずっと見てたくせに(プ

147 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 17:12:07 ]
メモリリークって自プログラムの範囲外まで影響が及ぶことはありますか?
メモリリークとは、各プログラムが確保した領域が開放されないままプログラムが終了したときに、
確保されたまま他のプログラムが使えない領域が残ることだと思い込んでいたのですが違うのでしょうか?

例えば、以下のようにしても勝手に開放されているように思えるのですが、
これはOSが面倒みてくれている、という解釈で正しいですか?

char *c;
c = (char *)malloc(1000000);
return 0; //開放せずに終了

char *c;
c = (char *)malloc(1000000);
c[1000000] = 'a'; //ここで異常終了

148 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 17:14:55 ]
>>147
OSによる
これこそ環境依存

149 名前:デフォルトの名無しさん [2008/09/20(土) 17:15:32 ]
>>147
大丈夫OSが何とかしてくれる
と思ってて問題ないよ

150 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 17:17:37 ]
>メモリリークって自プログラムの範囲外まで影響が及ぶことはありますか?
はい
>メモリリークとは、各プログラムが確保した領域が開放されないままプログラムが終了したときに、
>確保されたまま他のプログラムが使えない領域が残ることだと思い込んでいたのですが違うのでしょうか?
いいえ
>これはOSが面倒みてくれている、という解釈で正しいですか?
OSによる

151 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 17:18:00 ]
おいおいmutex持ったまま強制終了したらOSは面倒見てくれないぞ

152 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 17:20:34 ]
>メモリリークとは、各プログラムが確保した領域が開放されないままプログラムが終了したときに、
>確保されたまま他のプログラムが使えない領域が残ることだと思い込んでいたのですが違うのでしょうか?
はい

153 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 17:37:53 ]
このスレは池沼の集まりか

154 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 17:38:58 ]
そう、お前がその筆頭。



155 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 17:39:48 ]
winとかunix系とかDOSとか、そのあたりのOSはfree()し忘れても、プロセスが終了するとメモリは開放される。

156 名前:デフォルトの名無しさん [2008/09/20(土) 17:45:07 ]
INT 21H, AH=31H


157 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 18:00:35 ]
まとめると
>>147
にある状況はwindows、unix系ではOSが何とかしてくれる
でもプログラムのやりようによっては解放されないこともある(mutexとかなんとかで)
ってことで大丈夫でしょうか

158 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 18:00:56 ]
>>148-152,155
ありがとうございます。
常駐するようなもの以外は、それほど過敏になることはないんですかね。

159 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 18:01:13 ]
>>151
そいつはメモリリークというより、リソースリークじゃね?


閑話休題

mallocだと大体のPC環境だと後始末してくれる処理系になってるけど、
共有メモリとかでリークすると、プロセスが終了しても残ったりすることもある。

160 名前:デフォルトの名無しさん [2008/09/20(土) 18:32:09 ]
>>138
Cに規格書はない
もしかして規格票って言いたかったのか?

161 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 18:34:53 ]
↑馬鹿

162 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 18:44:55 ]
JISでは規格票が正式名称だが、ISOやANSIのものは規格書と呼んでなんら問題ない。

163 名前:デフォルトの名無しさん [2008/09/20(土) 19:04:02 ]
ISO や ANSI のどこに「規格書」って書いてあるんだよ? 確か英語だったはずだが・・・

164 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 19:08:24 ]
>>121
某エディタのソースコードにあって、
文字列か文字の幅を返す関数にそのfor文が使われていました。



165 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 19:11:06 ]
>>163
単なる和訳だろ。

166 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 19:20:07 ]
>>164
それはない






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

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

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