char *c[43] = {"C言語のことは漏れに聞け!"};
死ねよてめー・・・
6 :
デフォルトの名無しさん:02/11/14 22:44
ヽ \
/ \ \
∧_∧/
(;´Д`) i i i
/ ヽ _ i i i--、
./| | | |  ̄ ̄ ̄ |:::::|.
/ \ヽ/| | ノ__ノ..
/ \\| |
/ /⌒\ し(メ .i i i . .
/ / > ) \ ノノノ
/ / / / .\_ ザックザック
し' (_つ /:::::/::... /ヽ
; "ノ・ ./∴: / )i iヽ-、_へ ,ヘ
'',, : :―― / / i i i iヽ . ̄ ゙― ノ /
n_ _/; i .ノ / /ノ-' ̄ ゙ ― 、__ノ
_ノ 二二二、_( _Д_ ;)-ヽ_ノ-'
>>1 ゙ー ''~ ∨ ̄∨
キタ━━━━━━━(゚∀゚)━━━━━━━ !!!!!
>>1 乙
8 :
デフォルトの名無しさん:02/11/14 22:46
ある日突然他人のPIDが見れるようになった。
PID 1192
∧_∧ ∧_∧
Σ( ´∀`) (´∀` )
( ) ( >>1 )
| | | | | |
(____)__) (__(___)
ドキドキ・・・ PID 1192
∧_∧ ∧_∧
(; ´∀`)KILL 1192 (´∀` )
( つ ( >>1 )
| | | | | |
(____)__) (__(___)
ヤター!
∧_∧
Σ( ´∀`) フッ・・・
⊂ つ ...::::...
| | | :::::::::::::::
(____)__) (__(___::
10 :
デフォルトの名無しさん:02/11/14 22:46
まもなくここは 乂1000取り合戦場乂 となります。
\∧_ヘ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
,,、,、,,, / \〇ノゝ∩ < 1000取り合戦、いくぞゴルァ!! ,,、,、,,,
/三√ ゚Д゚) / \______________ ,,、,、,,,
/三/| ゚U゚|\ ,,、,、,,, ,,、,、,,,
,,、,、,,,U (:::::::::::) ,,、,、,,, \ ぶーぶーぶー /
//三/|三|\ タリー
∪ ∪ (\_/)タリー タリー
( ´Д) タリー タリー
/ つ (\_/) (\_/)ノ⌒ヽ、
(_(__つ⊂(´Д`⊂⌒`つ(´Д` )_人__) ))
こっちが正統派だな。
C言語質問所 <43>はあきらかな荒らしだ
1 に賛同。
>>3 >>6 >>8 >>10 ,. -───-: 、
/::::::::::::::::::::::::::::::::\
/ '':::::::::::::::::::::::::::::::''''' ヽ
!::::::::::ィ::ハ:::;::::::::::::::::::::::::::!
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
#include <stdio.h>
int main(void)
{
int i;
for(i=0; i<43; i++)
printf("%s\n", c[i]);
return 0;
}
>>1に注目
GUIなどの標準Cではできない事の質問は使用している開発環境のスレへ行け。
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへ行け。
コンパイラを探しているなら
>>2 を見よ。
また、このスレは論争スレへのポインタでもある。 ←キタ━(・∀・)━!
>>4-5 の過去ログリスト、カンマ演算子で区切るってのはどうだろう?
その方がほんの少しすっきりする気がする。
ヽ \
/ \ \
∧_∧/
(;´Д`) i i i
/ ヽ _ i i i--、
./| | | |  ̄ ̄ ̄ |:::::|.
/ \ヽ/| | ノ__ノ..
/ \\| |
/ /⌒\ し(メ .i i i . .
/ / > ) \ ノノノ
/ / / / .\_ ザックザック
し' (_つ /:::::/::... /ヽ
; "ノ・ ./∴: / )i iヽ-、_へ ,ヘ
'',, : :―― / / i i i iヽ . ̄ ゙― ノ /
n_ _/; i .ノ / /ノ-' ̄ ゙ ― 、__ノ
_ノ 二二二、_( _Д_ ;)-ヽ_ノ-'
>>1 ゙ー ''~ ∨ ̄∨
>>18 どれがどの番号だか数えないと分からんから却下却下却下却下却下。
コマンド引数ってキャラ型ですよね?
数字をソース中で使う時はatoiしないとだめですか?
>>20 行末のセミコロンをカンマに変えるだけ(それ以外は変更なし)
という意味で言ってるんだが。
もう
>>1は引っ込みがつかなくなっているな。
わざとネタふりしそうだ。
引っ込む必要がどこにあるのかと問いたい
>>21 その通り。
別に、自作した関数で変換しても構わないが。
>>14 for(i=0; i<43; i++){
if(i > 0)
printf("%3d ", i);
printf("%s\n", c[i]);
}
の方がよさげ
糞スレは
落ちろ
29 :
デフォルトの名無しさん:02/11/14 23:13
30 :
デフォルトの名無しさん:02/11/14 23:11
み、みんな!
お、落ち着け!
/∧_/∧ /∧_/∧ オロオロ
((´´ДД``;;)) ((;;´´ДД``)) オロオロ
// \\ // \\ オロオロ
⊂⊂(( ヽノヽノつつ ⊂⊂ヽ// )) つつ オロオロ
しし((_)) ((_))JJ
反応しちゃダメだ!
31 :
デフォルトの名無しさん:02/11/14 23:14
唐揚げ
はじめて、使います。今Cを勉強しようと思ってるんですが、
言語が全然読めなくてふりがなが付いている本を探しているのですが無いですか
教えて下さい。お願いします。
>>33 ネタは「スレ立てるまでもない〜」でやってください
わかりました
☆ シャットダウン中・・・ ☆
┌──────────────────────―─┐
│ |
│ |
│ /■\ |
│ (´∀`∩) |
│ (つ 丿 |
│ ( ヽノ |
│ し(_) |
│ |
│ Now Onigiring. ... |
│ |
│ |
│ スレッドを終了しています。. |
│ しばらくおにぎりでお待ちください。 |
│ |
└───────────────────────―┘
シャットダウンの途中でエラーが発生した場合は、
「無視(I)」 を選択して続行してください。
「無視(I)」 を選択して続行してください。
☆ シャットダウン中・・・ ☆
┌──────────────────────―─┐
│ |
│ |
│ /■\ |
│ (´∀`∩) |
│ (つ 丿 |
│ ( ヽノ |
│ し(_) |
│ |
│ Now Onigiring. ... |
│ |
│ |
│ スレッドを終了しています。. |
│ しばらくおにぎりでお待ちください。 |
│ |
└───────────────────────―┘
シャットダウンの途中でエラーが発生した場合は、
「無視(I)」 を選択して続行してください。
「無視(I)」 を選択して続行してください。
41=36 頃せ
>>27 > for(i=0; i<43; i++){
43が気持ち悪いので
#define CMAX ((int)(sizeof(c)/sizeof(c[0])))
for(i=0; i<CMAX; i++)
☆ シャットダウン中・・・ ☆
┌──────────────────────―─┐
│ |
│ |
│ /■\ |
│ (´∀`∩) |
│ (つ 丿 |
│ ( ヽノ |
│ し(_) |
│ |
│ Now Onigiring. ... |
│ |
│ |
│ スレッドを終了しています。. |
│ しばらくおにぎりでお待ちください。 |
│ |
└───────────────────────―┘
シャットダウンの途中でエラーが発生した場合は、
「無視(I)」 を選択して続行してください。
「無視(I)」 を選択して続行してください。
∧_∧ ∧_∧
_( ´∀`) (´∀` )
三(⌒), ノ⊃ (
>>1 .) おまいは
 ̄/ /) ) | | |
. 〈_)\_) (__(___)
∧_∧ .∧_∧
( ´∀) (´∀` )
≡≡三 三ニ⌒)
>>1 .) 何考えて
/ /) )  ̄.| | |
〈__)__) (__(___)
∧_∧ ,__ ∧_∧
( ´)ノ ):;:;)∀`)
/  ̄,ノ''
>>1 . ) このスレ立てたんだよ
C /~ / / /
/ / 〉 (__(__./
\__)\)
ヽ l //
∧_∧(⌒) ―― ☆ ―――
( ) /|l // | ヽ ヴォケがーー!
(/ ノl|ll / / | ヽ
(O ノ 彡'' / .|
/ ./ 〉
\__)_)
ヽ、.三 ミニ、_ ___ _,. ‐'´//-─=====-、ヾ /ヽ
,.‐'´ `''‐- 、._ヽ /.i ∠,. -─;==:- 、ゝ‐;----// ヾ.、
[ |、! /' ̄r'bゝ}二. {`´ '´__ (_Y_),. |.r-'‐┬‐l l⌒ | }
゙l |`} ..:ヽ--゙‐´リ ̄ヽd、 ''''  ̄ ̄ |l !ニ! !⌒ //
. i.! l .::::: ソ;;:.. ヽ、._ _,ノ' ゞ)ノ./
` ー==--‐'´(__,. ..、  ̄ ̄ ̄ i/‐'/
i .:::ト、  ̄ ´ l、_/::|
! |: |
ヽ ー‐==:ニニニ⊃ !:: ト、
おれたちはとんでもない思い違いをしていたようだ。これを見てみろ。
まず「クソスレ」を英字で表記する
『KUSOSURE』
これを逆にすると、
『ERUSOSUK』
そしてこれを更に日本語に直すと
『エルソサク』
スレを立てたのが
>>1と言う事を考えれば末尾に『真性DQN』を加えるのが当然だ。
すると導き出される解は
『エルソサク真性DQN』
そして最後の仕上げに意味不明な文字『エルソサク』
これはノイズと考えられるので削除し残りの文字を取り出す。
するとできあがる言葉は・・・・・・『真性DQN』。
つまり!『真性DQN』とは『まさに
>>1』を表す言葉だったのだ!!
\もうね、アボガド/ \ 馬 / \ 鹿 かと/
∩ ∩
| つ ⊂|
∧ノ~ ! ,'っ _c,!
ヽ ミ| ・ \ ⊂/ ・ \
γ⌒^ヽ ミ| ... '_) | __,,▼
/:::::::::::::ヽ. ミ|. (,,゚Д゚) |・ (,,゚Д゚)
/.::::::::(,,゚Д゚) | (ノ |) | (ノ |)
i:::::(ノDole|) | 馬 | |・・ .鹿 |
゙、::::::::::::ノ 人.._,,,ノ ι.・,,_,ノ
U"U U"U U"U
/|| ミ
/ ::::|| ミ
/:::::::::::||
|:::::::::::::::|| ̄ ̄ ̄ ̄||
|:::::::::::::::||│ / ||
|:::::::::::::::|| ̄\ ガチャッ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
|:::::::::::::::||゚ ∀゚)─ || < クソスレ停止スイッチオン!をやっていいですか?
|:::::::::::::::||_/ || \______________________
|:::::::::::::::||│ \ ||
|:::::::::::::::||∧ ∧∩ ||
|:::::::::::::::|| ゚∀゚)/ .||
|:::::::::::::::||∧ ∧∩ ||
|:::::::::::::::|| ゚∀゚)/ .||
|:::::::::::::::|| 〈 .||
|:::::::::::::::||,,/\」 .||
\:::::::::::|| ̄ ̄ ̄ ̄
\ ::::|| 彡
\|| 彡 \ │ /
/ ̄\ / ̄ ̄ ̄ ̄ ̄ ̄ ̄
─( ゚ ∀ ゚ )< 停止スイッチ
\_/ \_______
/ │ \
∩ ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< オン!
. クソスレ〜〜〜! >( ゚∀゚ )/ | / \__________
________/ | 〈 | |
/ /\_」 / /\」
 ̄ / /
"
Kitty が2匹ほどいるな
52 :
デフォルトの名無しさん:02/11/14 23:29
もうええかげんにせえよ。
アクセス禁止くらいたい奴が 1 人いるらしい
>>1 もうええかげんに糞スレ乱立するのはやめろよ
アクセス禁止くらいたい奴がいるらしいな
あっちのスレの荒らしは正当化して、こっちを荒らしているやつには悪金か(ワラ
だれか望みを適えてやれよ。
削除理由は・・・
あっちのスレは立てるタイミングからして糞だろ。
「あっちのスレ」はそもそも板荒らし。
>>1はよほど自分でスレッドを立ててみたかったんだろうか・・・
main関数を他から呼ぶ場合ってあるんですか?
void hoge(void)
{
int n;
n = main();
}
みたく。
>>64 ない。
もし呼んだら何か手を打たないと終わらないかスタックがあふれるぞ。
>>64 呼ぶことを許しているコンパイラは多いが、規格では禁止されている。
☆ シャットダウン中・・・ ☆
┌──────────────────────―─┐
│ |
│ |
│ /■\ |
│ (´∀`∩) |
│ (つ 丿 |
│ ( ヽノ |
│ し(_) |
│ |
│ Now Onigiring. ... |
│ |
│ |
│ スレッドを終了しています。. |
│ しばらくおにぎりでお待ちください。 |
│ |
└───────────────────────―┘
シャットダウンの途中でエラーが発生した場合は、
「無視(I)」 を選択して続行してください。
「無視(I)」 を選択して続行してください。
>>67 たしか禁止してるのはC++だったような・・・
だとしたらmainがint型を返す意味ってあるんでしょうか?
いつも0しか返したことないんですけど…
>>71 エラーのときは 0 以外を返したほうがよいね
>>71 OSが受け取るから、意味があるかどうかは環境によるんじゃないかな。よくわからんが。
でもmainの型はintと決まっているからintを返すべき。
>>61 だからあっちは次スレじゃないって。
いつできてんのよ。みてみろヴぉけ
>>72 int n = main();
とかできるんだったらエラーの種類によって違う値を返すのはわかるんですけど
そうじゃないのに値を返す意味があるのかなーと
>>75 規格で決まってるから。それが全てだ。
0は正常終了、1は異常終了を意味する。
これだけ覚えとけば十分。
void main()なんて書き方は絶対間違ってる
似たような質問で、exit(0)の引数はエラーが重大になるほど大きな値を入れるように
聞いたんですけど、やっぱりこれも自分じゃその引数の値によって処理を変えられるわけじゃ
ないですよね。
だからexitの引数自体もあんまり必要性がわからないです。
>>69-70 確認したらそうだった。スマソ。
・・・C++ 知ってる人は回答しない方がいいのかなあ。
>>80 CとC++の違いを把握してる人は回答してもいいのでは
>>79 だ・か・ら。
main() のリターンコードや exit() の引数は、そのプログラムが使うんじゃなくて、
そのプログラムを呼び出したシェルが使うんだよ。
プログラムが正常終了したのかどうかとか。
>>79 バッチファイルとかシェルスクリプトとかメイクファイルとか書く人が値によって処理を
かえるの!
オレも訊きたいけど、緊急脱出するとき
return(1);と
exit(1)だったらどっちがいい?
>>82 てことはmainもexitも0かそれ以外を返せばいいだけで、エラーの重大度によって
exitの引数を変えても意味は無いんですか?
>>84 とりあえずreturn 1;に括弧はいらないと思う。
>>84 時と場合によるだろ。
main以外ではreturnとexitじゃ効果が変わるし。
>>87 オレはつけるよ。癖でさ。
なんか見やすい。ってかかわんねーか
>>84 ただちにプログラムが終了するなら return でもいいけど、exit() が望ましい。
>>85 意味あるかどうか無いかはプログラムによる。
外側に、単に正常終了か異常終了かを伝えたいだけならそれでもいいし。
もっといろいろな場合分けをしたい場合はそれに応じたコードを返す必要がある。
普通に関数を作って、エラーコードを返すような場合と同じ。
>>90 main以外でreturnしてもexitのようにプログラムが終了したりしないだろ。
>>89 もれはむしろ見にくいなぁ
まあコーディングスタイルの話はやめとこ
return(1)ってやる奴ってint i=(1);って書いてるのか?
>>93 俺的にはあとからソースをGrepかけるときとかに
正規表現で引っ掛けやすいからかっこ付ける派。
>>89 漏れも、昔は付けてた。
でも一旦裸にしたら、それが快感になった。
>>90 おいおいmain以外の関数書いたことないのか・・・
>>95 =のあとの括弧は、オレは後で必要になったときつける。
でもreturnみたいに関数っぽいと、癖で()ってやっちゃって
消すのめんどいから「←」をポチッっとな
100 :
デフォルトの名無しさん:02/11/15 00:00
>>98 そういう人もいる。
なんせ質問すれだから・・・
上級スレってないんかああ
100
return のどこが関数っぽいのやら。
>>102 関数っぽいじゃん
文字数もprintfとかと同じくらいだし。
どんなソースでも使うから。変数っぽくはねーだろ
>>103 あなたの辞書に、変数と関数の他にキーワードという単語を追加してください。
>>91 その「場合分け」は自分がするのわけじゃないんですよね?
そのうち、continueとかbreakにも()つけそうな予感。
return(0);
return(hoge());
return(foo ? 0 : 1);
↑すべて無駄・アホ。どこが見やすいのやら。
というか付けようが付けまいがたいしてかわんねーよ
いちいち突っ込んだりするからこんな事なるんだろ
お前ら大人になれよ
>>108 そういう君は、
a=(b+c);とかを見ても何も言わないんだ。
偉いね。
>>105 「自分」 が 「プログラム」 という意味ならそれで正しい。
ただし、そのプログラムを呼び出すシェルスクリプトもあなたが書くなら
間違っている。
つまり、シェルスクリプトは (必要であれば) プログラムのエラーコードを
受け取り、解釈して動作を変えなければいけない。
>>108 わざわざあげるなんてよっぽど必死なんですね(ワラ
てめぇらC FAQ 17章 スタイルの1を読んでください。
>>105 「自分」 が 「プログラム」 という意味ならそれで正しい。
ただし、そのプログラムを呼び出すシェルスクリプトもあなたが書くなら
間違っている。
つまり、シェルスクリプトは (必要であれば) プログラムのエラーコードを
受け取り、解釈して動作を変えなければいけない。
つーか、うまく書き込みできねーYO・・・
>>108 自分の意見が通らないからって勝手に人を子供扱いして自分を保ったりしないで、
もっと大人になれよ。
そろそろ関数適用の()と優先順位を変える()が一緒なのが悪い論争だろうか。
時が逆流してるな
>>111 おー、なるほど。ありがとうございます。
てこたぁ俺が今までexitの引数をいろいろ変えてたのは無意味だったわけか・・・
>>121 受け側が全然無視してる場合はそうだね。
特に Windows でプログラムを書く場合においては、デバッグ時に終了理由を
確認する以外に用途が無い。
シェルスクリプトやバッチ書いてみりゃありがたみがわかるってもんよ
文字列の終端文字が\0であることは保証されていますか?
終端文字が\0でないのってあったっけ?
>>127 そういう意味で言ってるんじゃないんだが...
129 :
デフォルトの名無しさん:02/11/15 00:56
いや、保証するしないの話じゃないと思うが。
保証はされてないだろ。
定義の問題かな。\0終端されてないものは文字列とは言わない。
文字列「定数」なら終端は'\0'だし、
文字列を扱うライブラリ関数は終端に'\0'を入れる慣習を前提としているが、
たんなる文字配列のどこかに'\0'が入っているという保証はない。
文字列の管理方法によってどうしでも変わるだろ。
例えば先頭 2 bytes に長さを格納して、終端文字なんかつけないやり方だってある。
あとこれは稀だが、終端文字が全 bit On ってな場合もある。
そもそも、<string.h> のライブラリを使うにしたって、文字列の終端文字が '\0'
であることが保証されている、じゃなくて、使う側が保証しなくちゃいけない。
C言語には「文字列」はない。
charの配列を\0で区切ることで、
それっぽいことを実現しようと
している。
んじゃなかったですか?
だから、文字列の終端を表す文字が '\0'であることが
規格で保証されているか? っていう話だろ。
だったら保証されてる。
どこにそんな事が書いてある?
文字列リテラルの終端文字が\0であることは保証されている、なら正しいが。
だから「文字列」という言葉の捉え方次第だろ。
一般的な意味合いにとるか、Cの標準文字列操作関数がサポートしている
データ形式に限定するか。
>>139 つまりこう言いたいのか?
「 '\0'で終端された文字の列を文字列と呼ぶ。
したがって、定義より文字列の終端は常に'\0'である。」
それを「保証されてる」と言ったら誤解しまくるだろー。
今後このスレでは「文字列」という言葉は使わずに、文字列リテラルか文字配列を使うこと。
うーむ、やはりC言語は難しいですね。
137のような認識だと、バッファオーバーフローとか
頻発するかも。
>>141 >文字の列
ダサい表現ですね (w
>>143 #include <string.h>
にプロトタイプが入ってるのは「文字列リテラルを扱う関数」ですか、
「文字配列を扱う関数」ですか?
俺は「文字列を扱う関数」だと思ってたよ。
>>144 ハァ?
列(sequence)ってのは普通の計算機用語で、
ダサいも何もないが…
まあ、厨は見たことないかもな。
>>141,142
そりゃどんなものでも保証する側は存在するでしょ。
でもそういうのを保証されてるというんじゃないのかな。
ま、水掛け論にしかならないのでもうやめるけど。
149 :
デフォルトの名無しさん:02/11/15 01:21
規格にはstrcpyやstrcmpは文字列(string)を受け取るとかいてあるよ。
もちろん文字列リテラルに限った話じゃない。
えー、「文字の列」って言葉として不自然な
感じを受けませんか?
計算機用語としてどうかは知りませんけど。
いや話がかみ合わなくなるから便宜的に明確に区別しようという話であって・・・
どっちでもいい話題なら区別しなくていい。
つーか、'\0' で終端がつけられたデータ列を文字列と呼ぶなら、やっぱり
保証するしないの話じゃないと思われ。
ペンキで赤く塗ったものは赤い事が保証されていますかと訊ねるようなものだ。
あー、つまりこういうので合意できるんでないか。
Cの標準では、文字列をあらわすとき、終端に'\0'を入れる約束になっている。
文字列リテラルは必ずそうなっているし、文字列を扱う関数は
入力がその約束を守っていることを前提としている。
しかし、もちろん文字列を扱っているつもりなのに'\0'で正しく終端されて
いない場合もありうる。
自分で文字列をいじるプログラマは、自分でその約束を守らなければならない。
したがって元々の質問
>>124 は曖昧だ。
「文字列を受け取る関数では、'\0'で終端されていると思ってよいですか?」なら答えはYes。
「文字列リテラルの終端は'\0'と保証されていますか?」もYes。
「文字列(ということになっている)配列は、必ず終端に'\0'が入っていますか」なら、
それを保証するのはプログラマの責任。
さあ!集まった!集まったああ!
Cスレ名物の論争だよ!!
ほらそこの兄ちゃん!
黙ってみてるだけじゃなくて、あんたも参加していってよ!
さあ、さあ本日のメインイベント!
「文字列ってなんだ( ゚Д゚)ゴルァ!」
の始まりだよおおお
>>152 計算機用語としてはまったく不自然でない。
計算機用語がそもそも不自然だというならそうかも知れんが、
ここで使うのはまったく問題ない。
つまりオレが正しかったのか・・・
知ったかなオレ(・∀・)イイ!
だから、文字列リテラルでもライブラリでもいいよ別に。
論点はそこじゃなくて、俺が言ったことを別の言い方で
表現すると、そのCの規格内で定義されている「ナル文字」
が '\0'以外の場合があり得るかって聞いてんだろ?
って言ってるんだよ。
お前ら意味を厳密に考えすぎなんだよ。
質問者の意図とレベルをちったあ考えて合わせてやれよ。
>>154 あんたは変数を「既約分数」と名づけたら、
プログラマが何もしなくても誰かがずっと既約分数であることを
保証してくれるとでも思ってるのか?
ハァ?
160 の逝っている事をどう受けとっていいかわかんねー
>>154 たとえが悪いな。ペンキにしろよ。
おまえが赤く塗った壁が風化して色が落ちていっても、お前は赤だといい続ける
他人が見ればどうみても黒いのに・・・
>>137 曖昧な質問を君がそう解釈したのは分った。
なら、「こういう解釈だとすればこうだ」と答えればよい。
単に「保証されてる」じゃ誤解するに決まってるだろ。
>>159 質問者は論争を呼ぶためにわざと曖昧な質問にしてるんだから、
乗ってやらなきゃ悪いだろ(藁
||
∧||∧
( ⌒ ヽ トゥトゥトゥマシェーリー
∪ 。ノ トゥトゥトゥマシェーリー
∪∪
漏れそんなに変な事言ったかなあ・・・??
お前らが目覚ますような名言があるんだよ。
なせばなる!
ナル文字がどうとかじゃねーんだよ。
気合でなんとかなるんだよ。
それが男気ってもんだよ。
オレはそう思うよ。
>>157 そうですか。
「配列」なら違和感なく受け入れられるんですが・・・。
まあ、「配列」ってのも知らない人には変な言葉でしょうしね。
141さん、すいませんでした。
てか、ネタのつもりだったんですが。
叩かれまくりたい 167 (COBOLer) の登場
せっかく155でまとまったと思ったら、また話が拡散して
きましたか?
>>162 char string[] = "foo";
今後、書き換えていっても、stringが常に'\0'で終端されていることが
「保証」されてるのか?
結局誰が一番的をえてるの?
vectorもsequenceもlistもstringも
「一列に並んだもの」という意味だね。
…いや、ただそれだけ。
>>171 いや、あとは論争好きのやつらが楽しんでるだけ。
まあ、俺は
>>155 で特に不満はないよ。みんなそうじゃない?
>>176 ポインタじゃないから書き換えられる。
stringがポインタの場合は未定義
184 :
デフォルトの名無しさん:02/11/15 01:49
データa,bをファイルから入力し、
四則演算の結果s,d,p,qをa,bと共にファイルに出力する
のって・・どうするの?
185 :
デフォルトの名無しさん:02/11/15 01:49
186 :
デフォルトの名無しさん:02/11/15 01:49
文字列の終わりは$だろ。
わざわざ「何か?」などと書かなくてもつっこみ放題
なんだよ、収束しちまうよ。
もっと煽ろうぜ(w
質問 キターーー!!
>>184 読み込んだものをsscanfやstrto*系関数を使って数値にしたら?
191 :
デフォルトの名無しさん:02/11/15 01:49
char *string = "foo";
>>184 どうするのってどこからわかんねーのよ。
ファイル操作か?四則演算か!?
ファイル操作がなきゃできるのか?
||
∧||∧
( ⌒ ヽ トゥトゥトゥマシェーリー
∪ 。ノ トゥトゥトゥマシェーリー
∪∪
>>172 「'\0' で終端がつけられたデータ列を文字列と呼ぶ」 という前提がある限り、
それを壊すような操作をしたらそれは 「文字列ではなくなる」 という事だと
思うんだけど・・・。
そういう話じゃないなら、いいです。
宿題丸投げの予感
195 :
デフォルトの名無しさん:02/11/15 01:52
>>192
ぜんぶデス
すみません
おいみんな!
>>184が質問だってよ!
本領はっきだぜ!
また曖昧な質問だな…
誰かちゃんと仕様をお客さんにインタビューしてくれ(w
>>195 もしかしてファイル入出力の方法がわからない?
それは自分で勉強して・・・
また曖昧な質問がきた。
これで飯3杯は食える。
203 :
デフォルトの名無しさん:02/11/15 01:54
面白いように釣れる(w
つまんないなー。やっぱ論争にかぎるぜ!
っていうかたぶん質問系は宿題スレにいってるYO!
本質の議論が終わって、水掛け論になってもう進まなくなったときには、
次の話題を振るのが一番だね。
>>203 ハァ?釣れる?バカかおまえ。漏れたちはいつでも何事にも全力投球だ。
宿題丸投げOKにしようぜ。
>>203 よーし、じゃあまずファイルに入っているデータの
フォーマットを詳細に教えれ。
213 :
デフォルトの名無しさん:02/11/15 01:58
>>210 俺はもう寝るから勝手にやってくれよ(w
215 :
デフォルトの名無しさん:02/11/15 01:59
___
/ \
/ ∧ ∧ \ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ・ ・ | < おまいら ひま だな
| )●( | \__________
\ ー ノ
\____/
>>215 ___
/ \
/ ∧ ∧ \ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ・ ・ | < おまえも ひま だな
| )●( | \__________
\ ー ノ
\____/
論争厨を黙らせるには怒濤の質問が一番
じゃあCスレのキャッチコピーは
「漏れたちはいつでも何事にも全力投球!
論争もありまっせ!」
>>216 ___
/ \
/ ∧ ∧ \ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ・ ・ | < おれも ひま だぞ
| )●( | \__________
\ ー ノ
\____/
>>215 ∧_∧ / ̄ ̄ ̄ ̄ ̄
( ´∀`)< オマエモナー
( ) \_____
| | |
(__)_)
>>216 ∧_∧ / ̄ ̄ ̄ ̄ ̄
( ´∀`)< オマエモナー
( ) \_____
| | |
(__)_)
データa,bをファイルから入力し、
四則演算の結果s,d,p,qをa,bと共にファイルに出力する
のって・・どうするの?
マジネタです!教えてください。おながいします!
>>217 そうやって論争に負けたからって論争自体を潰そうとしてるの見え見え。
___
/ \
/ ∧ ∧ \ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ・ ・ | < 来週またロボトミー手術をうけるんだ
| )●( | \__________
\ ー ノ
\____/
お前ら!そんなヒマあったら感動しろ!
#include <stdio.h>
int p,t,a,d,c,v,i,m[90]={0},s,r[]={-10,-9,-8,-1,1,8,9,10};void k(){if(m[p]==0)
for(i=0;i<8;i++){for(c=0,v=p+r[i];m[v]==3-t;v+=r[i])c++;if(c&&m[v]==t){a+=c;v=
p;if(d)do m[v]=t,v+=r[i];while(m[v]!=t);}}}char*h="・○●\n";int main(){for(i=
1,m[41]=m[49]=2;i<10;m[i++*9]=3)m[40]=m[50]=t=s=1;for(;;a=d=0){for(p=9;p<82;++
p)k(),printf("%.2s",&h[m[p]*2]);if(a)for(d=a=s=p=8;a==8;k())t-2?(scanf("%d %d"
,&p,&i),p+=i*9):++p;else if(s)s=0,printf("pass");else break;t=3-t;}return 0;}
ダミーすれのレス数超えたYO!
みんなおめでどー
∧_∧
( ´∀`)< ぬるぽ
何がわからんのかわからん。
>>224勝ち負けでしか判断できないのは少年漫画の読み過ぎです。厨房板に行って下さい。
235 :
デフォルトの名無しさん:02/11/15 02:08
流れ的には、
1,ファイルに保存された数値a,bを文字列として読む
2,文字列を数値に変換してa,bに代入
3,変数s,d,p,qに演算して代入
4,ファイルに出力
でいいよな?
>>235 ファイルのフォーマットがわからないとダメなんだよな。
>>223 …ほんとにネタじゃないんだろうな。
じゃ聞くが、
・入力ファイルと出力ファイルは別のファイルでよいんだな?
・ファイル名は決まっているのか、実行時に与えられるのか?
与えられるとしたらどうやって?
・入力ファイルに入っている数値は整数か、実数か?
文字列として入っているのか、バイナリで入っているのか?
・出力の形式も同じか?
>>233 ただの煽りはほっとけよ。さっきの論争では別に勝ちも負けもなかったし。
おじちゃんもう待ちきれないよ。
#include <stdio.h>
int main(void)
{
int a,b,s,d,p,q;
FILE *fp = fopen("釣り","rb");
a = fgetc(fp); b = fgetc(fp);
fclose(fp);
s=a+b; d=a-b; p=a*b; q=a/b;
fp = fopen("釣られ","wb");
fputc(fp,a); fputc(fp,b);
fputc(fp,s); fputc(fp,d); fputc(fp,p); fputc(fp,q);
fclose(fp);
return 0;
}
バイナリ符号無し1バイト単位。エラーチェックなし。
これで上等だろ。
細かいことにこだわるのは、
プログラマーに必要なことでしょう。
みなさん頑張って下さい。
>>233 論争に勝ち負けというのは存在します。少年漫画とは関係ありません。
少年漫画という例えが出るほうがガキです。厨房板に逝って下さい。
アフォ煽り放置
漏れが風呂入ってる間に100レスですか
>ファイルに保存された数値a,bを文字列として読む
これもちょっと微妙な表現・・・。
#include <stdio.h>
int main(void)
{
int a,b,s,d,p,q;
scanf("%d %d", &a, &b);
s=a+b; d=a-b; p=a*b; q=a/b;
printf("%d %d %d %d %d %d", a, b, c, d, e, f);
return 0;
}
お前等いいからコードで話せ。
>>244 ああそうだよ。14歳のガキだよ。
まだ禿てねーよ馬鹿
>>248 それをシェルでリダイレクトしろってか?
>>250 俺が14のころはちんぽズル剥けだったが。
どうでもいいけど、ネタでageんな
age
249 名前:デフォルトの名無しさん :02/11/15 02:13 ←ここ
お前等いいからコードで話せ。
250 名前:デフォルトの名無しさん :02/11/15 02:12 ←ここ
重いもんな
>>248 直接入力ですよね、、それ。ファイル入出力です。
>>237 整数でその飯は言っているファイルが存在していてプログラム中に
ファイル名指定してあるものでOKです
おまえら一番使うソートってなんですか?
>>258 qsort使うからしらん(どう実装されているかなんてわからん)
261 :
デフォルトの名無しさん:02/11/15 02:17
>>257 お前、見ただけで直接入力ってわかってんじゃねーか!
ホントは自分で書けるんだろが。
>>239 ありがとうございますた。参考にさせていただきます。
qsortってどうなってんの?
ソースきぼんぬ
>>239 ありがとうございますた。参考にさせていただきます。
>>262 scanf()が標準入力から位は
初心者でもわかるのかも。
>>264 確かVC++6.0だと最初はクイックソートでやって、要素数が少なくなると他の方法に変えていたと思う。
標準出力と標準エラーってどう違うんですか?
fprintfでstdoutとstderrを使ってもどちらも単にDOS窓に表示されるだけなんですけど。
マジレス。
ヘッダファイルってどうやってみんの?
stdio.hとか開いてみても、
関数の中身がぜんぜんないよ!
>>268 /* test.c */
#include <stdio.h>
int main()
{
printf("stdout\n");
fprintf(stderr,"stterr\n");
return 0;
}
これをコンパイルしてtest >test.txtとやってみな。
hoge > foo
>>268 実行結果をリダイレクトすればわかるかもね。
>>269 ヘッダーファイルに関数は普通かかないから・・・
ライブラリのソースをもっているならそれを見て。
>>241論争に勝ち負けが存在すると考える方がガキです。少年漫画に例えられてわざわざ反論する方がガキです。厨房板に行って下さい。
じゃあコンパイラはどうやって関数を認識してんの!?
>>277 どうって?
ライブラリなら.oとか.objとか.libいうファイルでどこかにおいてあると思うけど。
あとはリンクするだけ。いちいちコンパイルしていたら効率が悪いからね。
ライブラリ・・・
BCCだとある!?
( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/ ←
>>230 (_フ彡 /
>>280 BCCってフリーの奴?
もちろんあるけど、ソースはないと思う。
見つからない・・・
あきらめますた
誰か269に「コンパイル」「リンク」について
説明してあげてね。
オブジェクトファイル。
いや、なんかいろいろあったんですがね。
stdioとかの名前がついたものがないもんでね。
ちょっと怖くなってやまました
コンパイルとリンクはわかるYO!
コンパイルってソースを機械語に代えるもんでしょ?
リンクはコンパイルしたソースを集めて一つにするんでしょ?
何割あってる?
>>290 libc.objかな?
VC++なら確かそうだったから。
>>292 それがわかってて、どうして 277 のような疑問が出てくる?
>>290 stdio.hはあるだロー
stdio.libなんてのは普通ないよ。
>>287 bccならbccをインストールしたフォルダの下にLibフォルダがあると思うが
glibcでも見ろ。
300げっと!
>>292 んとね、漏れは直接ヘッダを参照してると思ったの。
実際はリンクする時に見てるってこと?よくわかんないけど。
>>295 stdio.hはあったけど、ソースなっしんぐ
BCC32にはねーな・・・
まあどのオブジェクトファイルにあるか分からなくてもあまり問題ない気もするけど。
見てもコンパイル済みじゃ俺にはわからん・・・
>>300 ( ̄□ ̄;)!!
ばれてる・・・
でもマジレスです。
>>301 だから、
***なぜソースが入ってると思ったんだ?***
>>301 ヘッダファイルは多くのファイルで共有する部分(関数のプロトタイプとかマクロとか構造体定義とか)を集めたもの。
>>304 やっぱりそうか…
そのDQNぶり、まちがいないとオモタYO!
ソースの味がしたから
ちなみにこのスレの1もオレです。
ていうかね、qsortがあるんだったら、自分で実装するよりも
絶対効率いいよね!?それを考えるとアルゴリズム勉強する気がなくなる・・・
>>305 いちいちソース参照してコンパイルしてリンクしてると思ったんじゃねーの。
>ちなみにこのスレの1もオレです。
…なんだか複雑な気分だ。
DQNの手下になったみたいな。
>>1に
>また、このスレは論争スレへのポインタでもある。
こんなくだらんコメント追加してあるからJPSだと思った。
>>309 だからライブラリなんてものが存在するんだろうが。
それを自分で書こうとすることは勉強としてはよいことだと思う。
>>309 ソートの効率は、必ずしも良くないことがある。
プログラム作る効率はいいんでしょうが・・・。
オレはまだ始めて2ヶ月くらいでさー
ひたすらプログラム書いてきたけど
中身がどうなってるとかわかんないんだYO!
>>306 ヘッダファイルには関数のソースはないの?
たぶんドキュンな質問だろうけど、ヘッダファイルから直接includeしたほうが
効率いいきがする・・・
>>290 $ locate stdio.hかファイル検索
コンパイルの過程でヘッダがインクルードされ関数のプロトタイプを参照できる様に
なる。
関数の実体は別のオブジェクトファイルに存在。
リンク時に個々のオブジェクトファイルのアドレスの解決が行なわれる。
ロードは実行ファイルをメモリに移して実行する。
このスレは「厨房JPSを一人前のCプログラマに育てるスレ」になりますた。
>>318 むずかしくてわからんけど、リンクする時にはじめて
関数の中身がわかるってこと?
>>317 だから、いちいちコンパイルしていたら効率が悪いでしょ。
それに、関数そのものをincludeしたらひとつのプロジェクト内に複数の同じ関数(の実体)が現れる可能性がでてくるでしょ。それって大丈夫なのか?
JPS氏はCOBOLやってました?
COBOLのINCLUDEって、そんな感じだったような。
>>324 それはちがうw
>>323 またよくわからんけど、コンパイルするのは大変なのか!?
リンクの方が高速なのか!?
>>322 Cは関数単位でコンパイルすることは知っているよね?
同じ関数は一度コンパイルすれば修正したり環境を変えないかぎりはコンパイルし直さなくていいの。
>>325 オレは中学校くらいにおやじのBASICをちょっとやって、
それから5年間、プログラムから離れていました。
現在19さいでつ。
>>326 リンクはどのみちやらなきゃならないだろ。
>>327 関数単位?ソースファイル単位じゃなくて?
>>326 コンパイル→リンク
と
リンク
じゃどう考えてもコンパイルの分前者が効率悪いだろ。
>>330 ああそうだ。ごめん。
最小単位が関数だ。
>>327 うんと、その一度のコンパイルは、オブジェクトファイルの方でするの?
で、あとはまとめてリンク?
>>333 コンパイルしてオブジェクトファイルを作成するの。
つーかこの話、Cと直接関係あるのかね
JPSのスレになってしまったようなのでJPSが成長したころにまた来ます。
>>336 ひとつの関数は複数のファイルに渡って書けないから。
表現が悪いかな・・・
>>334 (゚Д゚;)ハッ!
そういやtest.objとかできてるよね。
あれを他のprintfとか入ってるobjとリンクしてtest.exeをつくってるの!?
JPS氏には
「エキスパートCプログラミング - 知られざるCの深層」
アスキー出版社
をお勧めします。
>>340 つーかここの住人はみんなそれ読むべき。
ほとんどの話題はその本の内容で解決するし。
キタ━(・∀・)━!!!!!
ちょっと分かった気がする。なるほどね。
そりゃ確かにいちいちコンパイルするはずないよねー。
なるほどー。
一応訊くけど、stdio.hってヘッダをあらかじめコンパイルしてxxx.objを作って
リンクの時に合わせるだけって感じ?
>>340 その本を参照して来る奴を最近よく見かけるが同一人物?
>>343 ヘッダーはコンパイルしないよ。
関数ごとにソースファイルをつくってコンパイルして、できあがった多数のオブジェクトファイルをアーカイブにしているものもある。
>>340 アマゾンいったけど、取り扱いしてないYO!
しかも確かそれは上級者むけじゃ・・・
オレはまだ前橋の「C言語ポインタ完全性は」も半分くらいだよ・・・
>>344 いや、150にVB厨認定されたものですが・・・。
>>346 ん・・・。
じゃさ、xxx.objに関数の実態があるの?
そうだとしたらそれはどうやってつくったの?
>>340 奴なら「プログラムはなぜ動くのか」程度でいいかも
ヘッダファイル(インクルードファイル)に書いてあるものはいろいろあるが、
関数だけに話を絞るとだな、
たとえばmainから何かライブラリ関数を呼ぶとするだろ?
コンパイラは、関数の引数の型や返り値がわからないと
エラーチェックが出来ない。
それに、引数や返り値の型によって、どうやって受け渡すかが
違うこともある。(メモリに入れて渡すか、レジスタか、レジスタ
の種類など。)
それをコンパイラに教えるための宣言(プロトタイプ宣言)が
ヘッダに書いてある。
>>343 微妙に違う。
ソースをコンパイルする時、コンパイラはどの関数が使えるのかを知らない。
それをコンパイラに教えるのがヘッダファイル。
>>349 コンパイルだっつーの。
ソースで配られているものなら自分でインストール時にコンパイルするし、
VC++やBCCなら出荷前にコンパイルしてある。
>>349 stdio.hには関数の情報を書いて、stdio.c(ってファイル名じゃないだろうけど仮名)には
関数の実体を書いてコンパイルしてstdio.objみたいなファイルを作っておく。
リンクするときはstdio.hの関数情報を元にstdio.objをリンクする。
なんかJPS氏を見てると、昔の自分を思い出すね。
自習派の人は、結構最初はこんな感じじゃなかった?
あと、ポインタは
「秘伝C言語問答 - ポインタ編」
SOFTBANK BOOKS
がわかりやすいかも。
コンパイラがデフォルトで知らないライブラリはリンク時に指定する必要があるね。
gccはなぜか標準の数学関連の関数をリンクしようとしない・・・
>>356 ずううっと昔にこのスレで似たような質問をして馬鹿にされたことがあります。
>>355に追記。
だからユーザーはstdio.hとstdio.objがあればリンクできる。
stdio.cはいらない。コンパイラによっては親切にstdio.cも添付してくれてるだけ。
>>359 VC++の場合、ソースもインストールすればデバッグ時に使ってくれるね。
>>357 たいていのUnixのコンパイラの伝統。
浮動小数点ライブラリをめったに使わなかった
(システムプログラムばっかり書いてた)
16ビットミニコン時代のなごり。
>>360 そうそう。
実は俺も以前、ソースが添付されてる意味を履き違えてたのよ。
コンパイルするときにソースを参照してるんだろうと思ってた。
実際はデバッグ時に使うだけなんだよな。
>>351 コンパイルしてる時は、プロトタイプ宣言だけを見てるの?
で、とりあえず形だけ作って、xxx.objにして
リンクする?その時はじめてどんな関数かわかる?
>>359 なるほど!それ分かりやすい!!さんくす!
>>356 こんなあれこれ人に聞いたりしないだろ、普通。
考える力が無くなる。
アマゾンのレビュー見る限りではエキスパートCプログラミングは良さそうだ。
これを除くと中上級者Cプログラマ向けの本と言うのは皆無らしい。
プロトタイプって言葉は知ってたのか。
なるべく用語使わないで簡単に説明しようとして「関数の情報」とか書いちゃったよ。
>>365 そうだ、自分でやってみなよ。
main.cにはmain関数を、sub.cにはmain関数から呼び出される関数を、sub.hにはsub.cにある関数のプロトタイプを書く。
まずはsub.cをコンパイルして、sub.cをどこかに移す(削除してもいい)
次にmain.cを書いて(sub.hをインクルード、sub.cにある関数を呼ぶ)bcc32 main.c sub.objとしてコンパイル&リンクする。
これでなんとなく分かると思うよ。
おまえら今日はやけに親切だな
ちなみに分割コンパイルという手法
VC++だとリビルドしないかぎりビルドし直しても修正していないファイルはコンパイルしなおさないね。
ひまだからな!
>>366 いや、理解できない部分が、ということで・・・。
>中上級者Cプログラマ向けの本
K&Rはどうですか (w
論争みたいに殺伐としていないからな!
>>372 K&Rは最後の付録を除けば特に初心者でも問題無いと思うけど、どうだろう。
bcc32も-cオプションでコンパイルのみをやってくれるのか。
その辺は統一しているのかな。
K&Rはなんといってもあの大きさがイイ!!
C++とかPerlの作者が書いた本といったら・・・
いや、ま、なんつーか書籍はスレ違いってことでひとつ。
>>374 C言語初心者には問題ないかもしれませんが、
プログラムも初心者だときついような・・・。
JPS氏の疑問も解決したみたいなので、
もう寝ます。
スレ分割の効果か
>>368 やってみる!今日は寝ます。みんなさんくす!
とりあえず明日は10時ころおきて、やってみます。
>>381 sub.cをコンパイルするときは-cをつけろよ。
文字列論争あり、初心者質問に普通に答えるもあり、つまりいつものCスレだ。
>>378 俺は2冊目によんだCの本がK&Rだった
K&R読んだとき初めにこの本を読めばよかったと思ったよ
技術評論社のすぐわかるC/C++じゃぁさっぱりだった
なんか、JPSでもってる感じになってきたな。
また無駄、いや有意義な時間を過ごさせてもらいました。
>>385 他人に説明するってのは自分の理解度を確認する良い指標になる
同じようなことを何度も説明しても意味は無い。
389 :
デフォルトの名無しさん:02/11/15 07:57
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(゚Д゚)ハァ?
お前ら、5時間で388レスでつか…。
392 :
ポインタ房&rlo;ポインタ房:02/11/15 10:14
式の中での添え字は、ポインタとは無関係。
このことは、ポインタ配列についても同じことが言えるんでしょうか?
>>392どう言った点で同じ事が言えるかどうかを聞いているのかが曖昧。だが恐らく答えは「yes」
房タインポってどうやってやるの?
No43スレが2つある中で、一発でこちら側を引き当てました。
そんなオレは心理テストで言うとどのように判断すればよいでつか?
1・真のプログラマ
2・偽のプログラマ
boolでおながい。
397 :
デフォルトの名無しさん:02/11/15 11:33
for文を使って最大値最小値を求めて
for (;;) {
puts("最大値最小値");
break;
}
for文を使って最大値最小値を求めてさまよい歩く羊たちの沈黙。
今度から 1 のテンプレで 「依頼」 も原則禁止にして欲しいな。
自助努力しなさそうな人には教える気になれん。
>>400 > 今度から 1 のテンプレで 「依頼」 も原則禁止にして欲しいな。
え?このスレはCと同じで禁止事項なんてないよ。
未定義の動作を規定しているだけだよ。
で俺の解釈は
>>397は未定義動作と思ってるけど?
なんかさ、スレッド一覧でこのスレのタイトル見たら逆向いてるだけど、オレのブラウザが変なのか?
(004) ;}"!け聞にれ漏はとこの語言C"{ = ]34[c* rahc :21
なんでなんで!?
削除依頼完了
でもしくじった・・・
ageればいい
407 :
デフォルトの名無しさん:02/11/15 13:10
データファイルが
A B C D
E F G H
・・・・
とあって、1行目を飛ばして、2行目のEから読み込みたいときは
どうすればいいですか?
>>407fseek,fgetposかfgetsを2回,後は自分で調べて下さい。
>>407 fgets() で 1 行づつ読める。
だから、fgets() で 1 回空読みすれば次は 2 行目を読み込む事になる。
char buf[BUFSIZ];
fgets(buf, BUFSIZ, fp); /* 1行目読み飛ばし */
fgets(buf, BUFSIZ, fp); /* 2行目読み込み */
あるいは
int c;
while ((c = getc(fp)) != EOF && c != '\n'); /* 1行目読み飛ばし */
>>408 「何バイト目」 じゃなくて 「何行目」 の時は fseek() + fgetpos() は
不適じゃないか
412 :
デフォルトの名無しさん:02/11/15 13:21
では、n行目を読み込みたいときは
n-1回空読みしないとダメですか?
>>412 そうでつ。
読み出すべきバイト位置がわかっていない場合は、カセットテープと同じように
扱うしかない。
>>414 本当は'\n'が読まれるまで繰り返すべきだがサンプルだから手抜き。
それにそれなら二番目のほうがシンプルだし。
# setvbuf()とは関係なかろう。
>>415 BUFSIZはstdio.hで定義されている
>>416 stdio.hでは、getc()も定義されててfgets()も宣言されてますがなにか?
>>417 もしかしてstdio.hで定義されている値を使うつもりか?(^_^;)
てっきり上の方で自分で定義するのかと・・・
まあ、410 は、BUFSIZ が正しく #define されているなら何ら問題は無い。
あるとすれば、時々 「2 重定義だ」 と怒るプリプロセッサがいるから、
#ifdef 〜 #undef 〜 #endif を使わなければいけない事があるかも知れない
事ぐらいだ。
「サンプルだから手抜き」だと小一時間。
手抜きといえどもまさかそれを使うとはおもわんかった。
つーか 417 が何を訴えたいのかわからん。
普通手抜きなら数字を直に書くよな。
そりゃそうだ。
ついでに言えば、fgets() では可能な限り、定数マクロじゃなくて sizeof 使うよな。
age
>>422 >415が何を訴えたいのかわからんかったので。
>>423 fgets(buf, sizeof(buf), fp);ってのも長いじゃん。
>>426 > fgets(buf, sizeof(buf), fp);ってのも長いじゃん。
将来bufがbuf[SUFSIZ * 2]などに変更されたときに
全ての箇所を変更しなくてはならなくなるよりもまし。
そ れ で は 定 数 の 意 味 が な い だ ろ
>>426 ハァ?
直にと言っているんだからfgets(buf,256,fp)のように書くということにきまってんだろ。
一体誰が長い短いの話をしてるんだ・・・
>>426 わからなかったら当てずっぽうの適当逝ってないで質問しろよ。
まあ、415 の 2 行目の意味がはっきりしない事には同意する。
>>430 > まあ、415 の 2 行目の意味がはっきりしない事には同意する。
415じゃなくて416ダターヨ。416の2行目をいってると思っていい?
>>431 あ、納得。
415 を指して言っているのかと思った。
でも結局、
> わからなかったら当てずっぽうの適当逝ってないで質問しろよ。
あ、いや。
つまり 415 は、BUFSIZ は stdio.h で定義されているから、バッティングするぞ
と言いたかったわけか。
的外れだけど。
うーん、stdio関連の関数を使ってる場合にBUFSIZを自分で定義すると取られ
るとは、ちょっと意外だったな。気をつけることにしよう。
まあ、規格にないマクロに頼るのは止めた方がいいよ。
#define BUFSIZ sizeof(int)
とかやられている可能性も無きにしもあらず。
いくらサンプルでもバッファサイズくらい責任持とう。
>>435 > 規格にないマクロに頼るのは止めた方がいいよ。
ダウト
JIS X3010-1993 7.9.1
BUFSIZはsetbuf関数によって使われるバッファの大きさを表す汎整数定数式に展開する。
と規格で定められている。
# まぁsetbuf関数によって使われるマクロをsetbuf関数以外の場所で
# 勝手に使用するのはあまりお勧めできないのには同意。
失礼。436 フォローありがと。
>>427 > 将来bufがbuf[SUFSIZ * 2]などに変更されたときに
> 全ての箇所を変更しなくてはならなくなるよりもまし。
将来bufが
char *buf = malloc(BUFSIZ); などに変更されたときに
全ての箇所を変更しなくてはならなくなるよりもまし。
と言ってみる。
>>438 > 将来bufが
> char *buf = malloc(BUFSIZ); などに変更されたとき
配列とポインタは別物です。
たまたまCでは同一視できる箇所が多いので誤解を生みやすいけど
別物にしたら、それ相応のリファクタリングをするべき。
> と言ってみる。
なんて自信なさげに逃げ道作る労力をかける暇があったら、
素直にsizeofの方が良かったって認める労力に使っとけよ。
プ。 1匹だけか。
見苦しい罠。
442 :
JPS ◆M0LaMzf5rY :02/11/15 16:30
関数の内部での*hoge[5]と(*hoge)[5]の違いは分かっYO!
可変長配列とか使う時、使い分けるんだよね?
でさ、関数のプロトタイプ宣言で「配列の配列」を渡したいときに
int kansu(int (*data)[5])みたくするよね?
この仮引数を、int *data[5]ってしても
関数の仮引数の宣言の時は、配列の宣言はポインタに読みかえられるんだから、
結局同じことのような機がするけど・・・
>>439 > 別物にしたら、それ相応のリファクタリングをするべき。
別物に変更してもリファクタリングしなくてよい手段が
あるのに、それすらせずに「リファクタリングすべき」
とか言われても説得力ゼロですな。
とは言っても 410のようなケースならsizeofで十分だと思うが。
> 素直にsizeofの方が良かったって認める労力に使っとけよ。
はあ?素直にって...誰かと間違えてんの?
もっと視野を広く持つようにしようね。
> 別物に変更してもリファクタリングしなくてよい
(゚Д゚)ハァ?
一長一短という方向に話を持っていくなら分かるが・・・。
>>443 > 別物に変更してもリファクタリングしなくてよい手段が
> あるのに、
> とは言っても 410のようなケースならsizeofで十分だと思うが。
具体的な手段も出せずに逃げ回るのだけは得意ですね、説得力ゼロです。
> はあ?素直にって...誰かと間違えてんの?
間違ってないよ。ちゃんとあなたは逃げ回るのが得意で
暗いとこが好きなゴキブリ君だと思ってます。
# まぁインスタンスは違うだろうがクラスは一緒
JPS がナチュラルに流されてるのが笑えるな。
>>442 *hoge[5] は int*[]、つまり int** 型。
(*hoge)[5] は int(*)[5] 型。
>>445 はあ?じゃ勝手にそう思ってろ。
ここまでアホとは...
以後放置ね。
448 :
JPS ◆M0LaMzf5rY :02/11/15 16:56
>>446 (*hoge)[5] はint**型でないんだ・・・。
えーと、ホゲはintの配列へのポインタだよね?
どうして ↑
この部分がポインタに読み返られないの?
449 :
JPS ◆M0LaMzf5rY :02/11/15 17:00
あ!そういえばさ、配列は最外周の要素以外省略できないんだよね?
それって
>>446のとかん計ある?
>>448 言われてみれば、どういう方式でそう認識されるのか考えた事無いな。
こう書くとこうなる、と丸暗記しかしていない。
ところで、int** と int(*)[5] では、メモリの確保のされ方が違うのはわかってるね?
>>449 配列は最外周の要素以外省略できない、ってどないな意味?
438は自分がゴキブリではないことを否定しませんでした。
>>448 C-FAQ 6.18:を読め。一部引用
配列がポインターに成り下がるという規則は(質問6.3参照)、
再帰的 には成り立たない。配列の配列(例えばC言語における
2次元配列)は、 配列へのポインターに成り下がるのであって、
ポインターへのポイン ターに成り下がるわけではない。
>>449 > 配列は最外周の要素以外省略できない
ああ、配列を仮引数に指定した時に、一番左の添字しか省略できない、って意味ね。
もうちょっと分かりやすく書いてくれ。
関係あると言えば関係あるかも知れない。
もともと仮引数を配列のように書けるのはシンタックスシュガーで、ポインタと同じ
意味。
だから中身の数字は指定してもしなくてもどうせ無視されると言う話。
>>451 もうそれはいいよ
>>452 今してるのはその話じゃない。
>>452 ああ、2 次元配列をどう渡すんだ、という意味でなら、関係無くも無いね。すまそ。
>>450 > ところで、int** と int(*)[5] では、メモリの確保のされ方が違うのはわかってるね?
わからん。インクリメントやデクリメントされたときの
ポインタの移動量は違うと思うが、確保のされ方に変わりはあるのか?
456 :
JPS ◆M0LaMzf5rY :02/11/15 17:19
>>450 たとえばint data[][2]={{1,2},{1,2}}っておkでしょ?
でもint data[][]={{1,2},{1,2}}はだめでない?
これは宣言で初期化する場合の話だけど、関数の仮引数でも同じだとしたら
*hoge[5] は int*[]、つまり int** 型。
(*hoge)[5] は int(*)[5] 型。
っていう
>>446のは
*hoge[5] は int*[]、つまりint [][]となって
最外周の要素が省略されているため、配列からポインタによみかえられる。
(*hoge)[5] は int(*)[5]つまりint [][5]となって、最外周の要素が省略された
配列となる。
みたいに考えられないかなって。
>>455 見ての通りだよ。
片や int **pp、ポインタ変数へのポインタ。
片や int (*pa)[5]、配列へのポインタ。
pa[0] と pa[1] は、必ず連続している。
pp[0] と pp[1] は、必ず連続しているとは限らないし、多くの場合は連続していない。
・・・っての書いてたら、どうも 456 見る限り JPS の方が理解があるみたいだな。
459 :
JPS ◆M0LaMzf5rY :02/11/15 17:27
>>450 メモリの確保のされかた・・・
int**は正真正銘ポインタのポインタだから、たとえば可変長配列を使う時とか
mallocしたり、アドレスを渡さない限り、どうにもなんない・・・あら。
int(*)[5] は配列へのポインタだから、配列の要素数5は確実に確保されてる
って感じでつか?
すまん、訂正。
*pa[0] と *pa[1] は、必ず連続している。
*pp[0] と *pp[1] は、必ず連続しているとは限らないし、そもそも指す先が
領域確保されているかどうかも分からない。
462 :
JPS ◆M0LaMzf5rY :02/11/15 17:30
おおお!!!すげーぞオレ!!
これもあれも2chのみんなのおかげだYO!サンクス!
とりあえずやっとC FAQが読めるようになってきたから
配列とポインタのあたり呼んで見ます。
まじさんくす!!
正確には、pa[0][0] 〜 pa[0][4] は必ず確保されている。
pa[1][0] が確保されているかどうかは分からない。
464 :
デフォルトの名無しさん:02/11/15 17:33
なんかlevel高いね.うちの会社がlevel低すぎるだけか?(W
ちょっと語弊があるな。
「必ず確保されている、と見なしていい」 だ。
一方 int** は、pp[0] だけは確保されていると見なしていいが、pp[0][0] だとか
があるかどうかは極めてグレー。
まだ何か穴があるかも知れないけどその時は誰かフォローよろしく。
漏れは眠くなったので寝ます。
と言いつつ訂正。
int** は、pp[0][0] だけは確保されていると見なしていいが、pp[0][1] だとか
pp[1][0] があるかどうかは極めてグレー。
int*は何も確保しないし、
int**も何も確保しませんが、何か?
>>467 int*が何も確保しないって事はどこを指しているの?
466とかは、すくなくとも一点だけは指していて
その後がどの位連続して確保されているかはわからない
ってことを言ってるんじゃないの?
int (*)[5] だって何も確保しない
>>469 マジで!?メモリ上のどこにあるかはしらんって意味?
それともどこにもまったくないの?
んなこたーないよね
471 :
デフォルトの名無しさん:02/11/15 18:27
本人刚刚学习VC++,对于“#pragma once”语句不太理解,哪位能说明一下。
先谢了!
>>470 int (*a)[5];
とやって確保されるのは(int [5] を差す)ポインタの領域だけ
ポインタの先までは確保しない
よって
>>463 みたいなことを言うのはナンセンスでしかない
>>472 ポインタの領域は確保されるの分かるけど、
int5個分は確保されないってこと?
でも初期化できるしょ?その宣言だと。
初期化してるとしたら、初期化子はどこに確保されてんの?
>>473 なんで初期化されると思ったの?
「電話番号100人分書けるメモ用意しといて」といわれて
「友達役を100人雇っておきました」というくらい余計なお世話じゃないか?
475 :
デフォルトの名無しさん:02/11/15 19:09
a[0]□→未定義
a[1]□→未定義
a[2]□→未定義
a[3]□→未定義
a[4]□→未定義
よく読んでなくて恐縮ですが
ポインタ配列->行固定列可変
ダブルポインタ->行可変列可変
*可変=アロック汁*
って認識は間違ってる?
>>474 仮の話。初期化したとしたらさ、5このポインタ変数は
メモリ上のどこにあるの?
ポインタ配列を初期化するってことはポインタにアドレスを入れるって事でしょ
int a,b,c,d,e;
int *p[5]={&a,&b,&c,&d,&e};
じゃないの?
>>478 int a[5], b[5], c[5], d[5];
int (*p)[5] = { a, b, c, d };
じゃないのか?
>>478 そりゃそうだね。勘違いしてた。
でも469は間違いだよね。つまり確保しる領域のサイズは
(sizeof(int*))*5ってこと?
ポインタ配列を使う利点は列が可変になるって事
int *a[5];
for(int i=0;i<5;i++) a[i]=malloc(i);
って事ができるのよ
ダブルポインタのばやい行も可変
malloc(i+1);だ
ふ〜ん。みんな頑張ってるね〜。
>>484 malloc(sizeof(int))でないの?
>>486 実態ってポインタの本体の事?
ポインタ変数を5こ格納する領域は?
そうだね
malloc(sizeof(int)*(i+1));だね
*a[0]はint1個
*a[1]はint2個
*a[2]はint3個
...
と確保されるよ
やばい。勘違いしまくりだった。
ポインタ一個分だけ確保するのか?
>>488 実体=確保された(安全に使用できる)メモリ領域
>>489 あ、可変だよってことを言ってくれてたんだね。
単純に整数いれてるだけかと思ったら違った。
malloc(sizeof(int)*(i+1));
で
a[0][0]
a[1][0] a[1][1]
a[2][0] a[2][1] a[2][3]
確保されるんだよね。
>>491 ??どういう意味?
「実体」は何も確保しませんが は
「確保された(安全に使用できる)メモリ領域 」は何も確保しませんが
ってことではないべ?
int *a[5];
ならint型ポインタ5個確保するよ
実体は未定義
ここはC言語初心者スレですか?
>「確保された(安全に使用できる)メモリ領域 」は何も確保しませんが
そのとうり
int *p;
ポインタ1個宣言して「実体」を確保したといえますか?
>>496 (安全に使用できる)メモリ領域は確保しませんがって事?
それならわかった。ていうか今まで長いレス、勘違いしてたから。
476の言うとおりだし、俺もわかったんで。
>>495 そのとおりですが何か?
>>497 mallocってメモリ確保でしょそれで
「確保された(安全に使用できる)メモリ領域 」って言ったのだが
日本ゴムずい
>>497 初心者スレなら上級者の俺は書くのがためらうなあと思っただけ。
気に触ったらごめん。上級者スレでも立てるか。
>>500 あっムカってきちゃったの? そりゃそりゃ、俺のねらいどおりでヤッタって感じ。
>>501 ( ̄□ ̄;)!!
まあ、オレは怒ったりしないよ。良かったでつね。
Cだけで書かれたブロック崩しのソースがほしいんでURLしっているかた
教えてください。お願いします
>>505 マネーかよ!!
しってる方お願いします。google検索しても出てくるのはポケコンばっかりで…
回転寿司屋で呑むか?
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]
atoiってなんて読むの?
あすきぃとぅいんてじゃ
>>513 ああ、インテってintでしょ?
じゃあ「えーとぅーあい」くらい?
>>515 >>ああ、インテってintでしょ?
ガ━━(゚Д゚;)━━ソ!
517 :
デフォルトの名無しさん:02/11/16 01:19
「あとい」
あと一歩、あと一歩なんだ!
519 :
デフォルトの名無しさん:02/11/16 01:22
あとーいだな
>>516 atoiって ASCI to Integer でないの?
521 :
デフォルトの名無しさん:02/11/16 01:26
えーてぃーおい
さて、どこから突っ込もうか。
” null ”は "ヌル"ですか?それとも”ナル”ですか?
あなる
>>525 オレはヌルっていうけど、ナルでもいいらしい。
言語によって言い方が違うんだって!
「ニル」って変な発音で話してる人がいた。
ヌルヌル・・・・・ハァハァ
俺の周囲だと、NULLを表すときはヌル、
'\0'を表すときはナルと言う奴が多く俺も伝染した。
NULLはヌルポインタ、'\0'はヌル文字って言っちゃ・・・ダメ?
ヌルと呼びなれてたときに転職したら、
その職場ではナル派が圧倒的に多かった。
別にどう呼んでも構わないと思うんですけど、
昔モービルと呼んでいた物がモバイルに変わった位に違和感がありました。
nilって?
>>534 LispでFALSEを表すアトムだよ。
>>527 ああ。
でも言語と言ってもプログラミング言語じゃないぞ。
確かドイツ語がヌルで英語がナルだったかな。英語ではノーに聞こえるけど・・・
>>536 そうだ!「ヌル」はドイツ語だったYO!
英語だと「ノル」に近い「ナル」だと思う。
int i,j;int** pp;int** qq;
pp=(int**)malloc(sizeof(int)*3);
for(i=0;i<3;i++){
pp[i]=(int*)malloc(sizeof(int)*5);
for(j=0;j<5;j++) pp[i][j]=i*5+j;
}
memcpy(qq,pp,sizeof(int)*3*5);
for(i=0;i<3;i++){
for(j=0;j<5;j++) printf("%d ",qq[i][j]);
printf("\n");
}
メモリエラー出ちゃいます???
>>sizeof(int)
ハァ?
>pp=(int**)malloc(sizeof(int)*3);
pp=(int**)malloc(sizeof(int*)*3);
間違え
プ。
542 :
デフォルトの名無しさん:02/11/16 03:01
カキコのテスト
543 :
デフォルトの名無しさん:02/11/16 03:02
mallocに頼るなよ。
マジックナンバーをコードの中に書いてmallocとはそいつのレベルが分かるな。たとえネタだとしても。
ネタと簡単な例はマジックナンバー可。
10行サンプルにマジックナンバー云々言う奴のレベルはそれ以下。
>>545-546 じゃあ何行ならいいんですか?ってw。複数人の目に触れるんだから、
読みやすいコードに越したことはないだろ。 #define ぐらい使ってもいいと思うがな。
549 :
デフォルトの名無しさん:02/11/16 08:22
スマン void main(void) とか言う時の、void ってなんっすか?
色々読んでるけど、なんかイマイチしっくり来ない。。。。
キター?
>>549 /* エキスパートCプログラマーが書くコードの例 */
#define Kusakabe_Youichi void
Kusakabe_Youichi main(Kusakabe_Youichi){
return 0;
}
これならシックリきますね :)
しっぽりこない。。。
いいから int を返せよ・・・。
つーか、void 型の関数内で return 0; とか書くなよ・・・。
#define 整数型インテジャー int
整数型インテジャー main(){
return 0;
}
>>整数型インテジャー
狂ったか?
整数型でないインテジャーが存在するのか。
目から鱗が落ちたよ。
555 ありがとう!!
typedef long int 長整数型インテジャー;
>>559 C:\Work\Test.c(12) : error C2018: 文字 '0x92' は認識できません。
C:\Work\Test.c(12) : error C2018: 文字 '0xb7' は認識できません。
C:\Work\Test.c(12) : error C2018: 文字 '0x90' は認識できません。
C:\Work\Test.c(12) : error C2018: 文字 '0xae' は認識できません。
C:\Work\Test.c(12) : error C2018: 文字 '0x90' は認識できません。
C:\Work\Test.c(12) : error C2018: 文字 '0x94' は認識できません。
C:\Work\Test.c(12) : error C2018: 文字 '0x8c' は認識できません。
C:\Work\Test.c(12) : warning C4091: 空白の宣言が見つかりました。
C:\Work\Test.c(12) : error C2143: 構文エラー : ';' が '^' の前に必要です。
C:\Work\Test.c(12) : error C2143: 構文エラー : ';' が '^' の前に必要です。
C:\Work\Test.c(12) : error C2018: 文字 '0x83' は認識できません。
C:\Work\Test.c(12) : error C2018: 文字 '0x83' は認識できません。
C:\Work\Test.c(12) : error C2018: 文字 '0x93' は認識できません。
C:\Work\Test.c(12) : error C2018: 文字 '0x83' は認識できません。
C:\Work\Test.c(12) : error C2018: 文字 '0x83' は認識できません。
C:\Work\Test.c(12) : error C2018: 文字 '0x83' は認識できません。
C:\Work\Test.c(12) : error C2018: 文字 '0x83' は認識できません。
C:\Work\Test.c(12) : error C2018: 文字 '0x81' は認識できません。
C:\Work\Test.c(12) : error C9999: つーかネタはもういいよ。
561=559=555
つーか誰も答えてないな。
>>549 void はが無効な (値が無い) 型であること、無指定である事を表す。以上。
int *p;
p = malloc(sizeof(*p));
初期化してないポインタを使ってますが
これってありなんですか?
>>564 > 初期化してないポインタを使ってますが
そのように見えるが、実際は使っていない。
sizeof(*p) はコンパイル時に評価されて、数値に置き換えられる。
ただし、564 のコードが何をやりたいのかは分からない。
この場合、sizeof(*p) は sizeof(int) と一緒だ。
>>564 sizeof 演算子は引数を評価せず結果の静的型だけを見るので問題ない。
>>564 変な書き方をするやつがいるものだな・・・
こういうのはありか?って例なんだからいいじゃん。
>>569 例にしたって、564 が質問してきたからには書いた香具師がいるんだろう。
564 が書いたわけじゃないよな。
すみません、ひとつ質問させてください。
構造体のディープコピーをしたい場合、
memste(元構造体ポインタ,先構造体ポインタ,構造体サイズ)
で可能でしょうか?
それとも、やっぱり一つ一つのフィールドごとコピーするのでしょうか?
教えてください、お願いします。
上はmemsteではなくmemcpyです。すみません。
構造体は普通の代入でコピーできる。
構造体代入の実体は大抵 memcpy() だったりして。
>>571 memcpy() でできます。
572 の通り、普通に = 演算子でも代入できます。
ただし、単に構造体の内容がコピーされるだけで、その中のポインタが指す先
までは複製されません。
malloc() 等でメモリの動的割り当てをしている時は気をつけてください。
>>573 やってみました。たしかに動作しました。
論外君で申し訳ありませんでした。
ところで連続質問になってしまうのですが、
構造体同士を普通の代入でコピーした場合って、
1.memcpyでサイズ分全部コピーする
2.各フィールドをそれぞれ自動でコピーする
のどちらの動作になるのでしょうか?
それとも処理系依存でしょうか?
連続で申し訳ありませんが、教えてください。お願いします。
573 の通り、でした。
>>575 処理系依存です。
なお、大抵のコンパイラの実装は memcpy() です。
ただし最適化されなくても転送処理がインライン展開されるので、コード上で
memcpy() を呼ぶよりも速いはずです。
>>577 なるほど、そうなのですか。
皆さん、自分のような論外君に優しく教えていただきまして、
皆さんありがとうございました。
これからも精進します。
>>578 むしろ気が萎えるから、論外君とか教えてクンとか、自分からそう名乗るのは止めてくれ。
VC++とCbuilderってどっちがいいですか?
どっちも1万くらいなんで、詳しい事はわからず決めかねてるんですが。
アマゾンいってみたら、ボーランドの方が売れてるみたいなんですよね。
>>580 VC++.NET>C++Builder>VC++6.0
>>580 VCよりBuilderのほうがいいんですか?
作りやすさはBuilderだろうけど、ちょっとマイナーかな。
C++Builderは多重継承が出来んからクソ
.NETってなんなの?初心者用の.NETスレたててYO!
Javaつぶし。
VC++6.0の後継がVC++.NET?
そう。
VC++は6.0まではVisual Studioの中心的存在だったはずなんだが・・・
>>588 じゃあVC++.NETはVC++7.0って考えていいのかな?
>>591 うん。
IEも次はIE.NETにするらしいし、、、
.NETについて勉強してこよう!
ふと思ったんだけどさ、今C言語はじめたばっかで
C++とかC#の役に絶つかな?
>>595 プログラミングについての感覚は、他の言語でも役に立つ。
言語固有のテクニック等で言えば、C++ にはある程度役に立つが
C# にはほとんど役に立たないし逆に害になる事もある。
C++ は C のスーパーセットだが、C# は全く別の言語だ。
>>596 なんでC#なんかつくったんだYO!ビルゲイツのあふぉが。
じゃあ学校で教える言語もC#にしろYO!
ところでね、実際、PGの人とかはC言語とか使ってるの?
それとももうC#?
>>597 俺んところはC#の仕事なんて絶対無いどころかC++さえない。
バッチ処理とかはいまだCで書いてるし、
WebアプリはJavaばかり。
結構そんなもんだと思う。
>>599 さすがゲイツ。すまそ。
でも日本でそうなるには何万年もかかりそう
ところで質問が無いから雑談タイムだけどw
やっと日本にも[脱Windows]の波がやってきたね。
でも、役人に[改造linux]が使えるかどうか。
そもそもちゃんと ソースをいじれるのかw?
ソースハ?
ゲイツがなんだYO
手に馴染んだ道具が一番だろ
Macが(・∀・)イイ!
>>602-606 すれ違い。ネタがないなら書かなくていいよ。
なんか最近、ここのレベルが下がってきたな。
コピー先バッファのサイズよりも大きく書き込んだら
メモリ壊すとはよく言うけど、
コピー元バッファのサイズよりも大きく読み込んでも
絶対大丈夫なもんなの?
>>609 ここは初心者スレです。
レベルの高い話がしたいなら上級者スレでもたててください。
>>610 絶対とはいえないが、たぶんうまくいくでしょう。
でも絶対とは言えない限り、やるべきではありません。
>>610 そうでもない。オーバーしたアドレスによっては
リードアクセスだけでもページフォルト起こす可能性があるよ。
>611 >612
レスThx!!
さて、この目の前にある現行ソースをどーするか……
こっからはマ板の領域だな、ではさらば。
>>611 いつからレベルの高い低いに、純度の高い低いをごっちゃにしていい事になったの?
あとバッファの話、やっちゃいけないのはアクセスできるできないの問題じゃ
ないでしょう。
>>612 Windows2000でいえば「メモリーが"read"になることはできませんでした。」ってやつでしょ?
結構おきるよね。
scanfの%uにchar *を与えていたためにこのエラーが出て、最初はどうしてもわからなかった・・・・
>>614 609については前半は同意しますが
後半は余計だと思われたんですが。
ここにいるのは初心者のかたも多いと思うので
失礼では?
>>616 ん?余計なのは前半じゃない?
確保したバッファ外にアクセスするのは絶対に許されないと思うんだけど・・・
>>618 なんかプログラムの終了時にそういうエラーが出て、理由がさっぱりわからなかったの・・・・
まさかscanfが原因だったとはね・・・
ああ、精神レベルの高い低いか。納得。
scanfじゃなくてsscanfだ。
ん?やっぱり分からん。どういうこと?
>>624 私?
int *を与えるべきところchar *を与えていたら、その時は問題ないんだけど、mainからreturnするとそういうエラーが出たの。
なぜかexitで抜けると出ないし、linux+gccでは最適化オプションをつけないとセグメンテーション違反にならなかった(つけてもexitで抜けるとならなかった)。
これにはまいった・・・もちろんきちんとsscanfの仕組みを理解していなかった私が悪いんだけど。
ちなみにドット区切りのIPアドレスを4つの数値に変換してcharの配列にいれるというプログラムです。
原因が分かったあとはsscanfでintの配列にいれて、そのあとにcharの配列にコピーするようにしました。
それはようするに
コピー先バッファのサイズよりも大きく書き込んだら
にあたるのではなくって?
>>627 でもそれなら書き込んだときにエラーが出るはず(もちろんバッファを越えて書き込んだんですが)。
それに確かWin2000ではreadに・・・と出たはず・・・
609だがたしかに、言い方が悪かった。
レベルの高い低いは、つまらない煽りやあまりにもスレとかけ離れたレスが
見受けられるという意味で書いた。多少なら、息抜きになっていいんだけどね。
Cの技術レベルは関係ない。俺も技術があるわけでもない。
毛嫌いする人がいるがスタイル論争も俺は好きだし、意見の交換になっていいと思う。
ただ、それがエスカレートしてきて全くたわいのないレスが続くとね。
>>628 別に範囲外に書き込んだからって即座にエラーになるとは限らないよ
リターンアドレスでも書き換えちゃったんじゃないの?
>>626 inet_addr() 使えよ・・・。
memory cannot be read
「メモリーはreadになれませんでした」か。
すごい訳だな(w
「メモリーは読まれる事ができません」、だよなあ。
これでも日本語的にはまだアレだけど、意味はずっと通じやすい。
誰も Microsoft に 「バグ」 として報告してないのか。
・・・「仕様です」 とか返されたらどうしよう (;´Д`)
>>633 たぶん
"memory cannot be %s" (←ここに"read"とか"write"とかが入る)
こんな感じのを無理矢理訳して
"メモリーは%sになれませんでした"
にしたのではないか
と推測してみる
write じゃなくて written か
>>636 ずっとreadをリードと読んでいたけど、レッドが正解か。
char キャーって呼べ。チャーっていったらブッコろス。
チャルがかわいくていいと思うのですがいかがでしょうか?
640 :
デフォルトの名無しさん:02/11/17 02:21
チャーだろ。
シャー
char キャーって呼べ。チャーっていったらブッコろス。
644 :
デフォルトの名無しさん:02/11/17 02:41
char:t∫a:r
と、書いてある。
正確に書けない。鬱
大学講師がチャーっていいやがってよ。加藤チャーかよ。ぶっころそうかとおもったぜ。
enumはイニュム?
チャーでいいよ。
エナム
イーナム
エニュムが正しいんだろうけど・・
enumがそんななら、charがチャーでも問題ないね。
LPCSTR
エルピーシーストロァー
stdioは?
intは「インテ」ですよね!
ストゥドゥアイオー
656 :
デフォルトの名無しさん:02/11/17 03:49
>>653 そして、インテグラTypeR だとかほざく奴が
すんません 僕です。
回線斬ってクビくくってきます。
>>649 イニュームだYO!
enumeration列挙
オレはイーナムって言う。
てかあんま使わない・・・
まだ起きてんのかJPS。
早く寝ないと夜型プログラマになっちゃうぞ。
皆さんおはようございます。 イマ中学校一年生で、C言語に興味を持ち始めて
いろいろやろうとしています。でも borland C++ compiler 5.5でコンパイル
しようとすると( インクルードファイル ’stdio.h'をオープンできない )という
エラーが一つ出ます。WIN2000(サービスパック入れてない)の環境変数設定はしました。
先輩たちの助けが必要です。お願い申し上げます。
660 :
デフォルトの名無しさん:02/11/17 05:51
bcc32のあるディレクトリに設定用ファイルがあるんで、
bcc32.cfgに
-I"c:\bcc55\include"
とかいれる。
661 :
デフォルトの名無しさん:02/11/17 05:54
C:\Program Files\bcc55\bin 以下に bcc32.cfg と ilink32.cfg 置いた?
C:\Program Files\bcc55\readme.txt 参照
朝から本当に申し訳ありません。イマC:\borland\bcc55\Binのなか
を覗いたらbcc32.cfg ファイルはないようです。あとilink32.cfg
ファイルもないようです。この二つは自分で作らなければならない
でしょうか?(メモ帳でしょうか?)
できました!! 先輩のみなさん朝から優しく教えていただいて
本当にこころから感謝します。これからもがんばりますので、お願いします。
>>666 カタカナでは正確に表せない。イとエの中間。
中学で習っただろ?
666 はリア消
ちなみに give の i と同じ発音
日本人は give をギヴと発音する多いがそれだと通じにくい
どっちかというとゲヴに近い発音
waterた
563よ有難う!voidとは型式無指定だったのね。。。。
アメリカに行った時、書き間違えた個人小切手の上に銀行窓口の
おばちゃんが「VOID」ってでっかく手書きしたから、?っておもてた。。
674 :
デフォルトの名無しさん:02/11/17 10:02
引数の数がわからない関数を呼び出すにはどうしたらよいでしょう?
int call(int (*func)(), int num_args, void *args[])
{
// return func(args[0], ..., args[num_args-1]); としたい!
}
VOIDDD
stdarg.h
int (*func)(...)
でできるんかいな。
>>674 int apply( int (*fun)(), int argc, void **argv ) {
switch( argc ) {
case 0:
return fun();
case 1:
return fun( argv[0] );
case 2:
return fun( argv[0], argv[1] );
...
679 :
デフォルトの名無しさん:02/11/17 11:26
Java、VBをやっているものです。
一応C/C++の文法覚えまして、ポインタもなんとなく理解できました。
そこで質問なんですけど、ポインタを使わずにStaticで宣言した
変数を使っても同じことだなぁと思うんですがいかがでしょうか?
どう考えてもポインタって意味がないような気がするんですが。。。
>>679 Java ではクラス変数だけしか使わなかったのか?
DOS時代のヒープ恐怖症のプログラマじゃあるまいし…
たとえば、sprintfをstatic変数でどう代替するん?
>>679 Java をやってる割には global 変数なんか使うのか
どーせ VB しかまともにやったことないんだろ?
>>682 ああ、グローバル変数のことか・・・
>>679のポインタを使わずにstaticってのがわからんかった。
ポインタをどう使うかが腕の見せ所なんだが…。
>>683 staticも知らんのに答えてるのってなんだか・・・・(ゲフゲフッ
>>685 staticってグローバルにするものじゃないんだが・・・
>>679 どう考えてもポインタって意味がないような気がするんですが。。。
(゚Д゚)ハァ?
ポインタがないとメモリを動的に確保することはできませんが何か?
686=688
必死だな(藁
>>686 今はスコープの話よりも、記憶域の話でしょ?
ポインタなんていらないっていうばかな考えは
staticをつければメモリ上同一アドレスにいるってことで
値渡しが行われないから、思ってるんでないか。
日本語へんだな
>>690 グローバル変数を使えばアドレス渡さなくても(ポインタを使わなくても)変数に値をセットできるってことじゃないの?
692 :
デフォルトの名無しさん:02/11/17 12:45
このすれレベル低すぎだ
他の関数で変数に・・・という意味ね
>>691 それはグローバル変数だからじゃなくて
静的記憶域をもつからでない?
オレも確実には言えないけど・・・
グローバル変数と、ファイル内static変数と、staticついたローカル変数は
たとえば関数内でオブジェクトそのものを操作して、関数を抜けたあとでも
ちゃんと値が保持されてるってことでないか?
>>692 そんなレスしか書けないレベルの低いお前(藁
晒しage
>>694 値が保持されていてもローカルじゃ他の関数から変数は見えないぞ。
それにアクセスするにはやっぱりポインタ使うしかないだろ。
>>696 値が保持されていてもローカルじゃ他の関数から変数は見えないぞ。
あ、そうか。
しかしポインタが必要ないってのはすごい考えでつね。
>>694 scanfみたいなものを言っているんだが・・・
んじゃstaticでかつクラス変数と言うことで話を進めてください。
クラスって何?
いつからCでクラスを使えるようになったんだろ。
なんだ、ここはクラスの概念がないスレか・・・・・
ポインタが必要なのはわかるし、グローバル変数も必要だよね。
分割コンパイルとかするとき。
でもファイル内のstatic変数と、staticついたローカル変数は
どんなとき使うの?
>>706 チョソですか?スレタイ読めよ
ここはクラスの概念がないCのスレです
リアル厨房はC++スレに行ってください
>>707 > ファイル内のstatic変数
staticのついたグローバル変数?
そのファイルでしか使わないグローバル変数を定義するとき
> staticついたローカル変数
strtokみたいなものを作るとき。
710 :
デフォルトの名無しさん:02/11/17 12:58
>>ポインタが必要なのはわかるし、グローバル変数も必要だよね。
>>分割コンパイルとかするとき。
この時点で意味不明で理解できてないことがよくわかる。入門書からやり直すことを進めます。
すいません。今殺伐モードですか?
>>709 strtokはよくわからんけど・・・
>そのファイルでしか使わないグローバル変数を定義するとき
そのままだけど、よく考えたらさ、ポインタ使っても変わらないよね?
ただ、ソース全体に共通するような変数で、他のファイルに既に名前がある場合とか
使うってこと?
>>710 今入門書よんでますが?
どこが違うの?
>>713 一行目はうなづけるけど、二行目がどうしてその理由になるのかわからない。
ハッシュつくるときはそれに関する関数をひとつのファイルにまとめて、
ハッシュテーブルはstaticなグローバル変数(配列というべきか)にした方がよくない?
>>714 ポインタにある一定のアドレスをずっと保持させておけば
ファイル内のstatic変数と同じような事になるんでない?
719 :
デフォルトの名無しさん:02/11/17 13:06
>>717 おまえの言うファイル内のstatic変数はなにをさすんだ?
>>717 そのポインタ変数は消えないでずっと残っているの?
>>718 どこって・・・全然理由になっていないから・・・・・
>>721 理由になってない?
グローバル変数があるのは、分割コンパイルのときに必要だからでしょ?
これが理由になってないの?
>>723 そのグローバル変数はextern?static?
> グローバル変数があるのは、分割コンパイルのときに必要だからでしょ?
でもどうしてこう思うんだろう・・・
725 :
デフォルトの名無しさん:02/11/17 13:11
ペインタとポインタって違うものなのでしょうか?
エラー番号設定したり。
>>724 は?なにも付けないよ。記憶域クラス指定子はつけないで宣言すんの。
だって他のソースファイルでも同じ変数使いたい時に
グローバル変数がないと不可能ジャン。
>>727 その通りだが、分割コンパイルのためなのか?(^_^;)
>>728 そうでしょ?じゃあ何のためにグローバル変数があんの?
>>729 「様々な関数で同じ変数使いたい時」だよ。
>>730 じゃあ複数のソースファイルにわけて分割コンパイルするときは?
グローバル変数じゃん
おいおいお前らJPSに負けんなよ
733 :
デフォルトの名無しさん:02/11/17 13:22
>>731 意味がとおってないぞ。グローバル変数が無くても分割コンパイルはできる。
理由にぜんぜんなっていない。
むしろグローバル変数を出来る限り使わなくするの方がいい、ってのが最近の傾向なのに。
>>731 ( ̄□ ̄;)!!
オレの持ってる本にはグローバル変数は分割コンパイルするときに必要って
書いてあるぞ!
でもグローバル変数なしで、他のソースファイルの変数を参照できんの?
それともただ単に、分けるなって話?
>>735 ここは10年前で時間が止まっているスレですか?
>>734 つまりオレと一緒ってことでしょ?
様々なって他のソースファイルのもって事だべ?
srand,randはグローバル変数を使っているのかな。
最近の言語やってたらそりゃポインタが必要ないかもと思うだろ
C言語でもはじめのうちはライブラリの都合で使うことになるが
基本的には無くても困らないからな
まぁ後で必要になるから少なくともそこまでは勉学に励め
>>738 わけようがわけまいが関係ないから分割コンパイルのためということにはならないと思う。
>>736 グローバル変数でなきゃ参照できないようなPGを作る時点で問題だろーが。
何のために引数と戻り値があるんだ?
そういえば昔関数の引数と戻り値を一切使わずに全てグローバル変数で受け渡しを行っていたPGがあってぞっとした。
自分がメンテ担当じゃなくて本当にうれしかった。
>>743 グローバル変数を使った方がうまくかけることもあるだろう。
externなグローバル変数はなるべく使わない方がいいとは思うが。
>>744 むしろstaticの方が分割コンパイルで効果を発揮するだろう。
できるだけ通用範囲を狭められるんだから。
>>743 でもさ、俺の持ってる本には
実際のプログラムは何人もの人が集まってやるので、
グローバル変数を使って、他人の書いたソースファイルとの関連性を持つ
みたいに書いてあるYO!
グローバル変数を使ったほうが良い場合なんてあるのか?
制御とかゲームなどの容量が制限される環境ならわかるが
>>746 staticついたファイル内変数はよく使う?
グローバル変数は使うなって事?
まあ、使うことはないけどさ・・・
構造体を戻り値にすれば良いだろ。
>>751 呼び出し元で指定(ヘッダーファイルで定義しておく)の構造体をつくって、そのアドレスを関数に渡すということ?
>>749 元データを引数に、ハッシュを戻り値にすればいいのでは
>>753 うーんと、、よくわからない。
構造体の中にハッシュテーブルを持って、その構造体のアドレスをハッシュ追加やサーチを行う関数に渡したらいいんじゃないかなと思ったんだけど、どう?
いまどきグローバル変数を勧めてる本って何なのか気になる
しかもグループ作業に必要ってどういった状況を想定してんだろ
分散作業かな?
プログラムの部分部分を手分けして作る時。を想定?
別にグローバル変数使ってもいいと思うけどな。
760 :
デフォルトの名無しさん:02/11/17 14:10
>>758 んなこたーない。部分部分を作るときこそ機能単位で処理を分けて必要なものは構造体あたりで渡すはず。
作者がなんちゃってプログラマーなだけだろ。
双方向リストの交換について悩んでいます。
struct node {
int key;
struct node *prev;
struct node *next;
};
という構造で、双方向リストを記述しているのですが、問題は、ノード同士の
交換です。
ノードが隣り合っている時に交換すると、ポインタの付け替えでつじつまが
合わなくなってしまうのです。具体的には、node->next->prevとかnode->prev->next
が自分自身を指しているので、それを変更するとおかしくなるのです。隣合って
いなければ大丈夫なのですが。
スマートな交換方法はないものでしょうか?
>>761 swap(x,y){
x=y;y=x;
}
と、しているようなもんだろ。
>>762 そうだったのですか。ということは、Node tmpとか用意して、
tmp = x; x = y; y = tmp;
とする必要があるのでしょうか?
>>763 STLは敢えて使わずに、Cだけで記述してみたいのです。
>>761 スワップ時に一時退避するnodeを用意してやればよいのでは。
>>766 そうなのですが、リンクリストで隣り合っていなければ、一時変数を用意
しなくてもうまくいくので悩んでいたのです。
>>767 やはりそうしないとだめなようですね。
便所でいろいろ考えてみたのですが、こんな案はどうでしょう?
A-Bとなっている時にAとBを交換する時
1.A−C−Bという風にダミーノードを挟む
2.B−C−A、交換する
3.B−A、つまりダミーノードを削除する
なんかすっきりしない方法ですが、これしかないのかなあ。
>>769 すなおに tmp node 使ったほうが速いんでないの?
>>770 そうしてみます。ありがとうございます。
外部変数ってのがよくわからないんですけど
わざわざ使う意味っていうのはあるんですか?
>>772 使わないとかけないかというと、不可能ではない。
参照する可能性のあるすべてのデータを引数として持ってまわればよい。
でも、そうすると引数がやたら増えて面倒なこともある。あまり極端だと
効率も落ちる。たとえば、I/Oエラーのときにlongjmpする場所とか、メモリ
が足りないときにlongjmpする場所とかのjmpbufがあるとき、それら
をすべて引数で渡すこともできるが、io_error_handlerとかmemory_error_handler
とかの外部変数にしとくほうが良いだろう。
あとはerrnoとか。(これも最近は変数と限らないけど、変数で済むなら
そのほうが効率が良い。)
極端なことを言えば、ファイルに1つ外部名を持つ関数さえあれば、あとは
外部名がいらないとも言えるわけだが(呼び出すと、データや関数へのポインタが
たくさん入った構造体を返す)。
>>773 ありがとうございます。
えーと、つまり引数が減らせるというメリットがあるわけですか?
なにやら、知り合いのPGさんがいうには組み込み系(?よくわかりませんが)
のプログラミングだと外部変数を多用することが多いということだったんですが
これはどういう意味なんでしょうか?
775 :
デフォルトの名無しさん:02/11/17 17:11
776 :
デフォルトの名無しさん:02/11/17 17:12
% bs2c.exe filename -o a.out
>>774 モジュール間の独立性を高くするには外部変数を使わないほうが良いが、
あまり大きくないプログラムで効率を重視する場合には、外部変数で
データを受け渡したほうがよいこともある。
引数を積むコードが不要になるから。
>>777 あと、スタック領域の節約にもなるね。組み込みだと重要。
#include <stdio.h>
typedef int (* fc)();
fc func(int);
int main(){
fc myfunc;
myfunc = func(3);
printf("%d\n", (* myfunc)(20));
return 0;
}
fc func(int n){
int fff(int a){
return n + a;
}
return fff;
}
23を表示して欲しいのですが、40と表示されます。教えて下さい。
>>779 closure かw
その前にコンパイルできるの?
>>774 速さやコード効率を追求すると外部変数の使用にぶがある。
ただ、そればっかだとコードの管理が面倒。
>>774 動的に確保するとフラグメンテーションが起きる
>>780 できますよ。でもaもnもmyfuncの引数になってしまうみたいです。
>>783 うん。うちの gcc でもコンパイルできた
でも関数内で関数定義するのは規格外じゃなかった?
うちの環境では結果は
-1995389801
最適化コンパイルすると Segmentation fault で落ちる
とりあえず、あなたのやろうとしてることは 779 のコードではできない
>>784 関数内で関数定義できないんですか。ありがとうございました。
関数内で関数定義できるといい事あったっけ?スコープとか、関数ポインタとか?
Pascalならできるけど・・・・
>>785 #include <stdio.h>
int f(int n) {
int ff(int a) {
return n + a;
}
return ff(3);
}
int main(){
printf("%d\n", (*f)(20));
return 0;
}
こうなら23と表示された。
>>787 なるほど。でもそれだとクロージャじゃないですよね。
>>788 クロージャについてはよくは知らん。
gcc -ansi -pedantic test.c
test.c: In function `f':
test.c:3: warning: ANSI C forbids nested functions
オプションをいじったらwarningがでた。
ANSI Cの規格外らしい。
792 :
デフォルトの名無しさん:02/11/17 23:37
ヒープソートを実装するときに、アップヒープって使いますか?
793 :
デフォルトの名無しさん:02/11/17 23:40
ヒップアップは使いません
796 :
デフォルトの名無しさん:02/11/17 23:48
?:って使う事ある?
絶対ifの方が見やすいと思うんだけど
k=k+(n%2?n:n+1);
>>796 max = a > b ? a: b;
と
if ( a > b )
max = a;
else
max = b;
なら、もれは前者の方が見やすいと思う
if(n) veryverylongfunc(a,b,c,d,e);
else veryverylongfunc(a,b,c,d,f);
みたいな時には使うよ
800 :
デフォルトの名無しさん:02/11/17 23:53
>>798 まじか。オレはif使っちゃう。?:を使うようにしよっと。コソコソ
ガーン、ぼくのアニーがキスしちゃったよー
enum
{
enum_a,
enum_b,
enum_c,
}
// デバッグ用。いちいち関数用意しなくても使えるのが利点
#define enum2str(e) (\
(e)==enum_a?"enum_a": \
(e)==enum_b?"enum_b": \
(e)==enum_c?"enum_c": \
"enum_unknown" )
>>802 残念だがそりゃ if 使った方が見やすい(てか分かりやすい)と思う
>>803 別に見やすいとはいってないよ。
enumの宣言の真下に書けてメンテしやすくて
テーブルと違って値が範囲外でもちゃんと動作して
リリース時にはリンクされないので
デバッグ時にこう使うこともあるってだけ。
805 :
デフォルトの名無しさん:02/11/18 00:13
voidを返す関数は、intを返してreturnしたほうがいいと思うのは
オレだけでつか?
>>805 それって1ステップくらい遅くなるんじゃない?
>>805 戻り値は何を意味するんだ?
なにも意味しないんなら無意味どころか害になるよ。
>>804 796 へのレスじゃなかったの?
>>805 言ってることがよく分からんけど、君だけだと思う
>>808 見易さ以外にも三項演算子を使うケースがあることを示しちゃまずかったかな?
戻り値ありの関数でreturnしないってのはどうよ。
クロージャーってのが良く分かんから調べてみたらこんな言葉があった。オブジェクトとは、処理が付加されたデータの事です。クロージャーとは、データが付加された処理の事です。
クロージャって要するにデリゲートのことだよ。
デリゲートってなんですか?
こんな感じか?
オブジェクト:クロージャ
メンバ関数:関数
メンバ変数:環境
cはクロージャとの方が親和性が高い気がするがどうだろう。
(゚Д゚)ハァ?親和性が高い?
>>810 それはただのアフォ
>>813 簡単に言えば関数のように使えるオブジェクトの事。
C しかやらないなら知らなくていい。
>>814 C で使えないものを 「親和性が高い」 と言って満足ですか?
>>816 > 簡単に言えば関数のように使えるオブジェクトの事。
え?delegateって「委譲」だと思ってますが何か?
Cでの関数へのポインタ、C++で言う関数オブジェクトを
C#ではdelegateという用語を使ってると思ってますが何か?
818 :
デフォルトの名無しさん:02/11/18 12:42
ネタスレより下がっているのは納得できないage
819 :
デフォルトの名無しさん:02/11/18 12:50
C#なんて知らないのでsage
ここはネタスレだったと思うが
821 :
デフォルトの名無しさん:02/11/18 12:55
Cってprintfできたら終わりでしょ?
>821
( ´д)ヒソ(´д`)ヒソ(д` )
delegate っていうのは関数ポインタを複数個格納して、
まとめてガリガリって呼び出すだけのモンです。
もちろん一個格納するときにも使えます。
あと、メンバ関数に関しては、呼び出し元オブジェクトへの
ポインタ(C#では参照という)セットで格納できるため、
メンバも呼び出せるように拡張された、関数ポインタです。
つーか、ここにいるC#キチガイ全員死ね。
おれC#好きだけどこいつら嫌い。
Cしかできないやつ
825 :
デフォルトの名無しさん:02/11/18 14:08
whileの中にカンマがついて条件が二個書いてあるの初めて見ました
これってどういう事ですか?
while(printf("]"),(c=getchar())!=EOF)
{
処理部
}
プロンプトを表示して入力町ってつもりと思われ。
>>825 カンマ演算子は、左右のステートメントを 1 つのステートメントとして扱う
以外は ; と一緒です。
なお、カンマ演算子は左側の評価値を捨てます。
Bまでしか経験ないんですけど。
>>829 何事も経験です。
まずはやってみなさい。
831 :
デフォルトの名無しさん:02/11/18 16:36
スレのタイトルをみて吐き気を催し、スレを一通り読んで
実際に吐いたのは私だけですか?
835 :
デフォルトの名無しさん:02/11/19 04:34
標準ライブラリのヘッダを見ていて思ったのですが
memmoveの第2パラメータは何でconstなんでしょうか?
知ってる方は教えて下さい。
>>835 渡したデータを勝手に書き換えたりしない
ってことを明示するため
>>836 memmoveで書き換えされなかったら意味無いんですけど…
838 :
デフォルトの名無しさん:02/11/19 05:12
第一パラメータは書き換えされるけど
第二パラメータは書き換えされんでしょが。
それだったらmemcpyで十分でしょう?
memmoveは領域が重なっててもコピー出来るので
第2パラメータの中身も書き換えられる可能性もあるんだから
constでは無いと思ったのですが、間違ってますか?
840 :
デフォルトの名無しさん:02/11/19 05:27
>>839 たとえ重なっていたとしても、第二引数が指すものは(ソース上では)書き換えないから。
標準的な関数でsrc,dst引数がある関数はほぼsrcはconstだな。
インターフェースの統一と言った方が良いかもしれない。
それにsrc=dest=sだとしても書き換えられるのはsrcとしてのsではなくて
destとしてのs。
constって、そう言う意味なの?
それ言ったら
char *strchr(const char *s, int c);
の戻値はどうしてchar*なんだ
そう言う意味
↓
書き換わる事があっても、直接は書き換えない事を明示する事
∧_∧ / ̄ ̄ ̄ ̄ ̄
(ω・ )ゝ < なんだって?
>>843 . ノ/ / \_____
ノ ̄ゝ
const char *strchr(const char *s, int c);
にしろってこと?
hoge(char *s, char *t);と
hoge(char *s, const char *ct);で中身が同じだったら
アセンブラ出力は変わらないと思う。
単に *ct = 0; とかあったらコンパイル時にエラーだすだけで。
実行時にチェックするコードは吐かない。
>>847 変わらないよ。だからどうしたんだ?ん?
変えないことを保証するようなインテリジェントなコードは吐かないってだけ。
INPUT FORMAT:
* 1行目:2つのスペースに分離された整数NおよびL
* 2行 N+1:NのNラインは数字をスペース分離しました。
SAMPLE INPUT (file palpath.in):
3 3
1 2 3
1 2 3
1 2 3
OUTPUT FORMAT:
単一の整数:回文のパスの総数。
この問題のテスト・データのための答えはすべて署名された32ビットの実体に入ります。
SAMPLE OUTPUT (file palpath.out):
86
>>850 Palindromic Tax Paths = 回文税パス
回文は同じことを前方へ後ろに読んだ数です、例えば1234321(しかし1231ではない).
回文は、長さで1つの数字と同じくらい短くなりえます。
(゚Д゚)ハァ?何言ってんの?こいつ
age
854 :
ポンキッキだっけ?:02/11/19 13:00
たけやぶやけた
いかたべたかい
たしかにかした
なつまでまつな
回文二十一面相
いよいよこのスレも焉わりか・・・。
あのさ、初期化されていない配列の要素が0である保障ってあるの?
>>856 staticがついているものやグローバルなら。
>>857 じゃあさ、配列の内容を0で初期化したいためだけに、
staticつけるのって定石?
全然ちがう。
違うよねー。やっぱうちの教授まちがってるよー
あのハゲになんとか言ってクレー
ansiだとstaticなくても0になるんじゃなかったっけ?
autoなら、ならない。
char t[10] = {'c'};
の後半部分が0になるのと混同しているものと思われる
char t[10] = {'\0'}; とするとか。
/* ランダムな配列(効率の悪い方法) */
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define NUMBER 20
int main(void)
{
int i,j,flag=0,data[NUMBER];
srand((unsigned)time(NULL));
for(i=0;i <= NUMBER;i++)
{
do
{
data[i] = (rand()%(NUMBER))+1;
for(j=0;j<i;j++)
if(data[i] == data[j])
{
flag = 1;
break;
}
}while(flag == 1);
flag = 0;
}
for(i=0;i<NUMBER;i++)
printf("%d ",data[i]);
return 0;
}
これってどこ間違ってる?
>>865 flag = 0l;を入れる場所が違ってた。
int main(void)
{
int i,j,flag=0,data[NUMBER] = {0};
srand((unsigned)time(NULL));
for(i=0;i <= NUMBER;i++) {
do {
data[i] = (rand()%(NUMBER))+1;
for(j=0;j<i;j++)
if(data[i] == data[j]) {
flag = 1;
break;
}
flag = 0;
} while (flag == 1);
}
for(i=0;i<NUMBER;i++)
printf("%d ",data[i]);
return 0;
}
i <= NUMBERということは、 i == NUMBERな時に
data[i] =... が実行されるので、buffer overrun.
そもそも、1〜Nの順列を、乱数で交換していくほうがいいとおもう
スマソ。バグってたので直した。goto文はマナー違反だが
動くことは動く。
int main(void)
{
int i,j,flag=0,data[NUMBER] = {0};
srand((unsigned)time(NULL));
for(i=0;i < NUMBER;i++) {
do {
data[i] = (rand()%(NUMBER))+1;
for(j=0;j<i;j++)
if(data[i] == data[j]) {
flag = 1;
goto label;
}
flag = 0;
label:;
} while (flag == 1);
}
for(i=0;i<NUMBER;i++)
printf("%d ",data[i]);
return 0;
}
ん?
最初のソースのflag=0を場所変えるだけじゃだめ?
>>870 だめですた。同じ値が2回以上出てしまいます。
>>870 goto文を取り去ってみたよ。
int main(void)
{
int i,j,flag=0,data[NUMBER] = {0};
srand((unsigned)time(NULL));
for(i=0;i < NUMBER;i++) {
do {
data[i] = (rand()%(NUMBER))+1;
for(j=0;j<i;j++)
if(data[i] == data[j]) {
flag = 1;
break;
} else
flag = 0;
} while (flag == 1);
}
for(i=0;i<NUMBER;i++)
printf("%d ",data[i]);
return 0;
}
goto見たの初めてだからちょっと感動した
Cはいくつかのループを一度に抜ける構文がないので、gotoを使った
方がすっきりする場合がある。もしくはループを別関数にしてreturn
するとか。
ちなみにこれは最悪のアルゴリズムなんだってね。
オレにはよくわからんけど。
876 :
デフォルトの名無しさん:02/11/19 22:01
int (*fns[])(struct gmstat*) = {gmmain, gmrank, gment, };
これってどういう意味ですか?
>>876 fnsはstruct gmstatへのポインタを引数に取りint型を返す関数の配列
へのポインタです。
じゃなかった、
fnsはstruct gmstatへのポインタを引数に取りint型を返す関数への
ポインタ配列です。
880 :
デフォルトの名無しさん:02/11/19 22:29
char (*next)[10]
と
char *next[10]
はなにが違うのでせうか?
881 :
bloom:02/11/19 22:30
884 :
bloom :02/11/19 22:43
やっぱりCのスレのレベルが下がってきている。
こんなのにもスカッと答えられる奴がいないのか。
オレがいるYO!
char (*next)[10]は
char型の配列(要素数10)へのポインタで
char *next[10]は
charへのポインタの配列(要素数10)だYO!
演算子の結合規則と優先順位の表を見ると解る、はずなんだが・・・
>>888 すばらしい。ついでに教えてください。
int * const (*next[10])(char **pStr)
これはなんでしょうか。
>>890 えーとね
neztはcharへのポインタのポインタを引数として、intへの変更不可のポインタを
返す関数へのポインタの配列?
なんか違う気がするが?
>>890 すいません。それってどういうときに使われるものなんですか?
>>892 すばらしい
>>893 はい、文字列のポインタへのポインタを引数に持ち、ポインタの先の値を変更禁止のint型のポインタを返す関数へのポインタを配列に10個ほど入れておきたいときに使います。
880は新手の荒らしなのか・・・
>>894 文字列のポインタじゃないと思われ。
あと変更禁止なのは、ポインタ自体だと思われ。
うーん、なんかJPSが成長してる気がする。
皆、みたか。俺たちの息子はこんなに立派になったよ!
>>897 そうか?何だか頓珍漢なことを言っているような気がするが。
>>891 nextが[]に先にくっついたとして、*の結合規則によってcharに先に
くっつくか、nextにくっつくかが変わるから、関係あるよ。
>>901 そういうレスでスレ消費すんな。ウザイよ。
以下このスレは煽りのみで1000を目指すスレになりました。
次スレどうすんの?
一応age
906 :
デフォルトの名無しさん:02/11/20 01:56
foo.h
extern int ( *r[2] ) ( int, int ) ;
foo.c
#include "foo.h"
int ( *r[2] ) ( int, int ) ;
hoge.h
static int r ( int, int ) ;
hoge1.c
#include "foo.h"
#include "hoge.h"
int r ( int x, int y ) {
return x + y ;
}
hoge2.c
#include "foo.h"
#include "hoge.h"
int r ( int x, int y ) {
return x - y ;
}
上のようなファイルを分割コンパイルする時に
関数の名前や修飾子を変えずに*r[2]の初期値を
r[0]=r(hoge1.c),r[1]=r(hoge2.c);
にする方法はありますか
907 :
デフォルトの名無しさん:02/11/20 03:04
>>906 gccでいいのなら、
==> foo.c <==
#include "foo.h"
extern int r1(int,int);
extern int r2(int,int);
int ( *r[2] ) ( int, int ) = { r1,r2 };
==> foo.h <==
extern int ( *r[2] ) ( int, int ) ;
==> hoge.h <==
static int r ( int, int ) ;
==> hoge1.c <==
#include "hoge.h"
int r ( int x, int y ) {
return x + y ;
}
int r1(int,int) __attribute__ ((weak, alias ("r")));
==> hoge2.c <==
#include "hoge.h"
int r ( int x, int y ) {
return x - y ;
}
int r2(int,int) __attribute__ ((weak, alias ("r")));
ありがとうございます。
でも、やっぱり通常の方法では無理のようなので、
staticをexternに変えマクロで対応する事にします。
DOS窓に♥を表示する方法を教えてください
DWORD written;
WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE),
&L"&heart;", 1, &written,0):
WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE),
&L"\x2661", 1, &written,0);
あ、Win9Xじゃ無理だから。
>>912 WINDOWS98ででき方法はありませんか
まず無い。
外字にパターン定義して出力ならできるかもね。
そういえば前、DOS 窓にスライム表示してた香具師がいたな。
どうやるんだっけ?
・・・スレ違いっぽいけど、過去ログ dat 落ちしてるしナー。
917 :
デフォルトの名無しさん:02/11/20 17:56
printf("あいうえお");のように日本語をそのまま渡しても大丈夫なのでしょうか?
もし日本語の中に%を含む文字があったらまずいと思うのですが。
Cのみで図形とか線とか書けますか?
>>917 SJIS/EUCなら%(0x25)を含む文字セットは存在しませんが何か?
920 :
デフォルトの名無しさん:02/11/20 18:03
\が含まれていたら?
923 :
デフォルトの名無しさん:02/11/20 18:05
"が含まれていたら?
結局printfにそのまま日本語を渡すのはまずいということですか?
printf("%s", "あいうえお");みたくすれということでしょうか?
926 :
デフォルトの名無しさん:02/11/20 18:20
?は\?とかかなければならないんだっけ?
>>920 存在しますが何か?
>>922 その場合、printfだけでなく、コメント中や文字列リテラルに
\を含む文字列「ソ(0x835C)」などが入ってるとコンパイルエラーに
なって嵌ったことがありますが何か?
>>923 SJIS/EUCなら"(0x22)を含む文字セットは存在しませんが何か?
プロジェクト内の一人がフォルダのパス作るために
sprintf(buf, "%s\\表計算\\", path);
とやって大変なことになったとかいう話なかったっけ。
おまえらprintfで日本語表示するときどうやってるのか問いたいです。
>>930 ごく普通にprintf("日本語");
問題あるようなら他の表現を使う。
おとなしく日本語対応のコンパイラ使えよ・・・。
printf("日本語漢字\x95\x5c示");
としてますがなにか?
>>933 そうすると何かいいことあるの?(^o^*)
936 :
デフォルトの名無しさん:02/11/20 19:08
mallocの使用は御法度なんですか?
コメントや文字列リテラルで使える文字セットは
(基本的な英数字や記号以外)処理系定義だから、
コンパイラのマニュアル読め
としか…
>>938 コメントは*/以外なんでもOKじゃないの?
>>921 一本の線を表示する簡単なソース書いてほしい。
printf("──────────");
>>942 すごく簡単ですねありがとうございます!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
>>921 縦の線を一本表示するソースを書いてくれませんか?
printf("|"); とかは無しね
printf("┃");
printf("P1\n# test.pbm\n5 5\n")
for( i=0; i<5; i++ )
printf("0 0 1 0 0\n");
>>921 斜めで黄色い色が付いている線を一本表示するソースを書いてくれませんか?
目に黄色いセロファンをあてて、なんとかプログラムつくって見ましょう。
printf("$E[33;1m/$E[0m");
printf("\x1B[33;1m/\x1B[0m");
<FONT color="yellow">/</FONT>
ANSI.SYSがありません。
>>1 | GUIなどの標準Cではできない事の質問は使用している開発環境のスレへ行け。
-- 中略 --
| 上記を逸した場合の結果は激しく未定義とする。
というわけで、ANSI.SYS が無くても漏れは気にしません。
>>948 斜めで黄色い色が付いている線を一本表示するソース
書いたよ (・∀・)
ということは、セロファンが一番正解という事か・・・
ポケコンだと表示されてない部分が黄色くなりそうだな
ポケコンの場合、セロファンなんか貼らなくてもデフォルトでそうだったりしますが何か?
乙華麗ー
立てちゃったのか・・・。
>>964 のつっこみの意味がよくわからないのですが、誰か知りません?
ansiだけに安心しろ!
なんちゃって(^^)
これは言葉のあやだけど、
966 氏ね。
969 :
デフォルトの名無しさん:02/11/21 00:56
日本語と英語の配列のとりかたの違いは?
charでシフトJISでしょうか?
wchar
char チャー
wchar ワチャー!!
チャースレに(・∀・)カエレ!
975 :
デフォルトの名無しさん:02/11/21 19:38
\∧_ヘ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
,,、,、,,, / \〇ノゝ∩ < 1098取り合戦、いくぞゴルァ!! ,,、,、,,,
/三√´д`) / \____________ ,,、,、,,,
/三/| ゚U゚|\ ,,、,、,,, ,,、,、,,,
,,、,、,,, U (:::::::::::) ,,、,、,,, \エーーーーーーーッ!?/
//三/|三|\
∪ ∪ (´д`)´д`(´д`)´д`(´д`)´д`(´д`)´д`(´д`)
,,、,、,,, ,,、,、,,, ,,、,、,,, ,,、,、,,, ,,、,、,,,
,,、,、,,, (´д`)´д`(´д`)´д`(´д`)´д`(´д`)´д`(´д`)´д`(´д`)
http://big.freett.com/scheme_a/num1000.swf
よしぁぁ!! 1000とったぁぁぁぁ!!
 ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
∩) (´´
∧∧ノ つ (´⌒(´
⊂(゚Д゚⊂ ノ≡≡(´⌒;;;≡≡≡
 ̄ ̄ (´⌒(´⌒;;
ズザーーッ
・・・・・・・・・
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄
∧∧ (´;;
⊂(゚Д゚⊂⌒`つ (´⌒(´
早すぎたか・・・・・・・・・
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄
∧∧
⊂( ゚Д゚⊂⌒`つ; (´⌒(´
ドッコイショと、・・・・・・・・・
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄
∧∧
(゚Д゚ ,)⌒ヽ
U‐U^(,,⊃'〜... (´⌒;;
何見てんだゴルァ!!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄
ポ ∧∧ ポ
ン (゚Д゚ ,) . ン
(´;) U,U )〜 (;;).
(´)〜(⌒;;UU (´ )...〜⌒(`)
ドボルザークが
レ・ミゼラブルの
ミュージカルを書いて
ファクスで送る
ソプラノ歌手の
ラップがウケて
シングル出せば
堂々一位
印税ガッポリ
1000
,. -‐-、__
,'´/,','二ヽヽ、
r'^Y´, -‐-,`ヽ}
;ヽ、Yム__ハ、`{_
,'゙ヽ._!= , =Y } i キン♪キン♪
∧ .ト、"ワ".イ/j ! キングゲイナ♪
{ `ー'ト、`゙´/イく
`、__,/\>'</ ∧
,' 〈 () / / |
,' ,/`ー./ (__,, |
(( / /∧ {ニニニ二|、 ))
/ (_, ∧ ヽ__j⌒7-ーヘヽ.
〈`ー / ヽ `~´∧ )ノ〉
ヽ./` ー-ニニニニ-‐へ´/
`iー┬r‐r┬┬ ''"
. レ' ⌒Y⌒ヽ.!
`ー─'`‐─'