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

C言語なら、俺に聞け! <18>

■ このスレッドは過去ログ倉庫に格納されています
0001きょうはいいテンキーです。日下部陽一NGNG
漏れは38才、21年間プログラムを一生懸命作ってきた。
いろいろな言語を極めたが、一番手になじむのはCだった。
Cのことならぜんてわかるから、疑問な点があったら漏れに聞け。

だが、いちいちFAQに載った質問に応えるほど暇じゃない。
課題丸投げなら別スレにいけ。

・comp.lang.c Frequently Asked Questions
http://www.eskimo.com/~scs/C-faq/top.html

・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html

Cプログラマならこれを買っとけ。
・プログラミング言語C(K&Rと呼べば通だ)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/yfcbookshelf-22/250-3950205-1475419

K&Rで挫折するような救いがたいやつはこれでも読め
・作ってわかるCプログラミング(アヒル本と呼べば通だ)
http://dennou.gihyo.co.jp/books/void_c/
http://www.amazon.co.jp/exec/obidos/ASIN/477411328X/249-4698746-2014711

推薦図書/必読書のためのスレッド PART3
http://pc.2ch.net/test/read.cgi/tech/1016722820/

・前スレ C言語なら、俺に聞け! <17>
http://pc.2ch.net/test/read.cgi/tech/1019372139/l50
0459ふかNGNG
うちの会社は専門卒以上だな。
未経験は25まで。
俺は大卒の未経験中途で25のとき今のところへ入社。
でもチチャーイ会社だよ。
学生ならちゃんと活動して大手へ行くべし。
0460デフォルトの名無しさんNGNG
>>458
〜かしらって使わない?ネット上で。
0461デフォルトの名無しさんNGNG
大手は逝きたくない・・・・
逝きたいと思っても行けないだろうけど。
0462デフォルトの名無しさんNGNG
漏れは大学やめて働こうとおもてるんだけど。
学歴は高卒ってことになるよね。しび〜あ〜。
0463デフォルトの名無しさんNGNG
童貞は25までじゃないと入れないのか…
0464デフォルトの名無しさんNGNG
NULL討論が始まってから怒涛の300レスだったな・・・
0465デフォルトの名無しさんNGNG
>>462
違う。
大学中退
0466ふかNGNG
高卒ってどうなんだろうね?
漏れのまわりは他社も含めて大卒ばかりだYO。
持ち帰り中心の小さなソフトハウスとかならあるのかな?<高卒採用
0467458NGNG
>>460
俺も実はよく使う罠
0468デフォルトの名無しさんNGNG
>>465
履歴書には高卒って書く。
人に言う時は高卒と中退を使い分け。
0469デフォルトの名無しさんNGNG
>>468
ぽっかり空いた数年間について聞かれないか?
0470372NGNG
しゃあ!
できそうだ・・・・
取りあえず完成したらキレイ書き尚しと・・・
0471デフォルトの名無しさんNGNG
聞かれる。
聞かれたときは答えに困るけど、正直に中退してぶらぶらしてましたって言う。

なんかスレと関係なくなってきたので適当に書いてみるか。

#include <string.h>
int main (void) {
 char* マジ="寝たい";
loop:
strcat (マジ, "ったら寝たいんだょぅ…");
goto loop;
return マジ;
}
0472デフォルトの名無しさんNGNG
グローバル変数はデフォールトではstaticですよね?
externをつけなければ他のファイルから参照することはできないですよね?
0473ふかNGNG
変数名も日本語か・・・。
今,iStudy中・・・。
0474デフォルトの名無しさんNGNG
>>471
そのコード、つっこんでほしいの?
0475デフォルトの名無しさんNGNG
>>471
漏れはもうアモバンを飲んだので、寝るのは時間の問題だ・・・
0476デフォルトの名無しさんNGNG
>>472
チガイマース
int global_i;
だったらそれは外部的!
0477デフォルトの名無しさんNGNG
>>417
そんなに眠いなら寝ろ
0478デフォルトの名無しさんNGNG
>>471
0479デフォルトの名無しさんNGNG
>>476
え!?
じゃあ関数みたいにstaticをつけないと他のファイルからも参照できちゃうの?
0480デフォルトの名無しさんNGNG
 char* マジ="寝たい";
loop:
strcat (マジ, "ったら寝たいんだょぅ…");

これはいかん。
0481デフォルトの名無しさんNGNG
その通り>>479
0482デフォルトの名無しさんNGNG
>>481
すっかり勘違いしていたよ。
どうもありがとう!
0483ふかNGNG
そいや,プロトタイプで
extern は必須?
つか意義は?
漏れ,もうだめぽ
0484デフォルトの名無しさんNGNG
extern宣言しても参照できないのがstatic
0485デフォルトの名無しさんNGNG
>>483
Cなら関数プロトタイプは無くてもいいはず
0486482NGNG
とりあえず必要なければstaticをつけることにしよう。
0487デフォルトの名無しさんNGNG
FFのCG見てるとSQUARE入りたくなって仕方が無い。
といってもそもそも入れないだろうし、うっかりゲーム業界なんて入ったら死ぬかも。
0488ふかNGNG
プログラマとゲームプログラマは似て非なる職業
0489デフォルトの名無しさんNGNG
たしかCは関数の宣言が無くても下手すれば違う翻訳単位の関数を使えたよな・・
0490デフォルトの名無しさんNGNG
練るか…?

質問なんだけど
C++ の RTTI でクラス ID を分岐させることってできないの?

class_id_type hoge = get_RTTI_type( p);
switch( hoge ) {
case RTTI_class_A: 〜; break;
...
}

こんなやつ。
<typeinfo> ではいちいち
if( dynamic_cast<...> ) ...
if( ... )

を繰り返すのはメンドウだ…
0491デフォルトの名無しさんNGNG
ゲームつくりってどれだけ辛いの?
0492デフォルトの名無しさんNGNG
suretigai
0493ふかNGNG
思い出した!
研修のころは
プロトタイプに変数名必要ない
externは必ずつける
と,教えられたんだ。
んで現場にでて,みんなexternつけてないから,
externはつけなくなっちゃったんだな
0494デフォルトの名無しさんNGNG
>>492
それを言ったらうど(以下略
0495デフォルトの名無しさんNGNG
>>490
classとか言われると手も足も出なくなる自分が情けない。
C++もやらないとだめかな〜
0496デフォルトの名無しさんNGNG
>>495
C++はスレ違い。
0497ふかNGNG
>>489
翻訳単位ってなんぞ?
0498デフォルトの名無しさんNGNG
(*´д`)
0499490NGNG
スマソ C++ スレ探すのもメンドウな
アンニュイな(以下略・・
0500デフォルトの名無しさんNGNG
(*´д`)
    コンパイラニ アタエラレル ニュウリョクノ タンイ ヨ,Pre processerノ シュツリョク ネ
0501ふかNGNG
Javaのクラスなら少しはわかるが
C++はサパーリ。クラスIDってなんぞ?
つかCのスレだからな・・・
0502デフォルトの名無しさんNGNG
>>495
案ずるより生むがやすし
やってみそ
0503デフォルトの名無しさんNGNG
>>502
らじゃー
あの分厚い本と格闘か(遠い目)


Javaは死滅するって聞いたのでやめておきます。
0504ふかNGNG
>>500
#ifdef TYPE_A
int funcA(char*);
#else
int funcA(int);
#endif
みたいな?
0505デフォルトの名無しさんNGNG
実は洩れクラスが無いと生きていけなくなった人間でう・・・
0506ふかNGNG
今月の「UNIX USER」によれば
アメリカのプログラマの扱う言語のトップにC++を抜き差って,
Javaが踊り出たそうな。
漏れもJavaはそれほどだが・・・
0507デフォルトの名無しさんNGNG
>>506
数で見ちゃダメでふ。
0508デフォルトの名無しさんNGNG
実は洩れクラリスがいないと生きていけなくなった人間でう・・
0509ふかNGNG
YOっしゃ〜,今日のノルマオワソ!
も少ししたら寝るぽ
0510デフォルトの名無しさんNGNG
プログラマになったら女プログラマとやれる?
0511デフォルトの名無しさんNGNG
くだらない話してて虫完成してないよ〜〜。
また明日か・・・それまでにbuuがどこまで伸びるやら・・・。
0512デフォルトの名無しさんNGNG
>>511
くだらないとはなんだYO!くだらないとHA!
0513ふかNGNG
漏れの周りは女プログラマが少ないぽ。
金融系のJOBについたら運用系の女プログラマとやれるYOと
まわりは逝ってるYO
0514490NGNG
>>501
いや、おいらも受け売りなんだけどさ・・
ポインタが指すオブジェクトが派生してて何なのかわからん場合
それを識別する RTTI っていうのがあってたぶん、dynamic_cast
ダウンキャストするために、内部でクラスの情報を持っているらしい。
それがクラスID。

ガイジンさんはこの機構を自分で実装していて
おいらは言語でできないもんだろーか。と思った次第でスワ
gamedev.net っつー、ゲーム屋の集うトコロテン…

っつか、ねむ…。

http://www.gamedev.net/columns/gameengineering/oosm/page3.asp
0515ふかNGNG
>>508
練りに練った構造体とモジュール化した関数ぢゃダメですか?
0516デフォルトの名無しさんNGNG
>>513
いいな〜
0517ふかNGNG
>>516
漏れは製造系のJOBだから関係ないぽ(涙
金融系に逝くならコボルもマスターしておけば,
運用のおねえちゃんに受けがいいと思われ・・・
0518デフォルトの名無しさんNGNG
>>514
switchで使えるような物は得られないんじゃないかなぁ。
独自にクラスのIDを整数で返す仮想関数を実装するしかないのでは。
0519デフォルトの名無しさんNGNG
>>517
お、お、おぉ・・・・
Webプログラミング関連はやめてそっちを回ろうかな。
0520508NGNG
>>515
洩れかよ!?
いや、やっぱりクラリスでなきゃ...
0521ふかNGNG
>>519
そうそう,やっぱりこれからは
コボルやピーエルナントカといった汎用機マンセーの時代だYO
0522デフォルトの名無しさんNGNG
クラリスってなんぞよ?
0523デフォルトの名無しさんNGNG
>>521
これから回る会社の中に汎用機を主に扱うところがあるの。
こぼるやPL/Iを使っているみたい。
決めた。そこを第一志望にしよう。
0524ふかNGNG
#include <stdio.h>

const char* str="もう寝ます。おやすみなさい\n" ;

void main(){
puts(str);
}
0525デフォルトの名無しさんNGNG
>>524
二回改行ですか?
私も寝よう。
0526514NGNG
>>518
そうですなぁ…。やはりそれしかないかなぁ…。
0527天然少女NGNG
Cの仕様だと自動変数は不定だから初期化しないといけない。
処理系依存って事なんだけど、どうして処理系によって初期化前の初期値が異なってくるのでしょう?
そこら辺の仕組みを教えて下さい。
0528デフォルトの名無しさんNGNG
>>527
処理系依存だったか?
不定では?
0529天然少女NGNG
その不定値が処理系によって異なります。
どうして異なるかが知りたかったんです。
0530デフォルトの名無しさんNGNG
あれは乱数として使っちゃおうという罠
0531デフォルトの名無しさんNGNG
>どうして異なるかが知りたかったんです。

どうしてってANSIが決めなかったから。
javaはゼロ初期化されるらしいけど
0532天然少女NGNG
乱数になるのでしょうか?(藁
コンパイラに依存するのかハードウェアに依存するのかも良く分からないんです。
0533デフォルトの名無しさんNGNG
>>532
OSに依存すると思う・・・
0534デフォルトの名無しさんNGNG
>>527
児童変数はふつうスタックっていう一時的なデータを置く場所に置きます。
そこは、関数の引数や、前に使い終わった変数なんかの値が
そのまま残ってます。
コンピュータは内容をクリアするにも時間がかかるので、一般的に
前に使った物をいちいち消さないんですわ。

それで、初期化しないと新しく作った児童変数の値は
そのゴミの内容になってまう。スタックの使い方はコンピュータや
OS、メモリ状況によって違ってくるのでコトなるんです・・・。

C faq あたりにも載ってるかもしれん・・。
0535天然少女NGNG
>>531 う〜ん、チョット伝わって無い気がします。
仕様でゼロ初期化と決めなかった事自体は構わないんです。
だけど、その不定な値がどのように決定されるか知りたいんです。

変な質問でゴメンなさい。
0536デフォルトの名無しさんNGNG
>>535
決めるんじゃなくて残っているものがそのまま使われるんでしょ。
0537デフォルトの名無しさんNGNG
自動変数って名前(呼び方)、ANSIで定義されてたっけ?
0538デフォルトの名無しさんNGNG
>>537
autoキーワードがあるから自動変数でいいかと。
0539天然少女NGNG
>>534 なるほど。>>534さんは天才ですね。ひょっとして常識(汗
また質問しに来ます。有難うございました。

0540デフォルトの名無しさんNGNG
自動変数が置かれるスタックってのはホワイトボードみたいなもんで、
前に使った内容がそのまま残ってるんだよ。

前の人が何かいてたかしらんけど、
だいたい、直前に呼ばれた関数の引数とか、そいつが使ってた自動変数の中身とか、
コンパイラがこっそり演算するのに使ってたデータだとかが消えずに残ってるの。

どのように使われてたかは、コンパイラしか知らない。
コンパイラの知識とアセンブラの知識があれば、大体どのように使われていたかは
推測できるけど、そういうテクは、使っちゃいけないと言うのが最近の決まりです。

Cのスタックってのはね、「書いたら消す」という約束を守らない会社の
ホワイトボードみたいなもんなの。
決まってる訳じゃなくて、まえに誰かが書いたのがそのまま残ってるの。
0541デフォルトの名無しさんNGNG
>>535
>>534が言ってるのでだいたいあってます。
0542デフォルトの名無しさんNGNG
自動変数のアドレスを返す関数をつくって、そのアドレスが指す先にあるものを参照すると残っている場合が多いよね。
まもなく書き換えられるだろうけど。
0543デフォルトの名無しさんNGNG
>>542
ポインタと言いなはれ
0544デフォルトの名無しさんNGNG
>>543
すまん
0545天然少女NGNG
って言うか、自動変数の初期化をしていないのが原因のバグが有ったんです。
コード書いた人と処理系が違うので、理由を明確に説明してあげたかったんです。
皆さん親切に感謝!
0546デフォルトの名無しさんNGNG
>>545
そのコード書いた人失格。
でもコンパイラが教えてくれない?
0547デフォルトの名無しさんNGNG
>>539
そういう細かいところに疑問を持つのはいいことだと思いますの。
スタックと児童変数の関係を理解したら、今度は
ヒープと malloc, free や、なぜ児童変数の配列は固定長でなければ
ならないのか、考えてみるとさらに理解が深まりますにょ。。

って、すでに知ってたらごめんなさい、だけど…。
0548デフォルトの名無しさんNGNG
>>545
ついでに「未初期化の変数を使用した」旨の警告メッセージを
読み飛ばさないように教育しといてね。

警告メッセージは全部つぶすのが基本なんだけど、
そのなかでも普通はエラーにしてもいいんじゃないかっていうレベルの
警告もいくつかあるからね。
0549デフォルトの名無しさんNGNG
>>548
警告抑制してつぶしていたりして(w
0550デフォルトの名無しさんNGNG
>>545
なるほど…同じ職場ならコーヒー一杯おごってもらえ。
あなたにはその権利がある。かもよ。
0551デフォルトの名無しさんNGNG
>>549
gcc src.c >&/dev/nullとか(藁
0552デフォルトの名無しさんNGNG
>>545
興味をもつのはいいと思うけど、「じっさいにこーだからだめ」は説明つかないときに反論できないからお薦めしない。
動作が未定義な事は避ける、これが納得できないやつはプログラマ失格だとからだで覚えさせtやれ。

あと、処理系依存はドキュメントでも確認する、できれば避ける、も励行して欲しい。
0553デフォルトの名無しさんNGNG
(´-`).。oO(質問するときは俺も○○少女を名乗ろうっと)
0554デフォルトの名無しさんNGNG
>>553
別に○○少女でなくても丁寧に答えてくれるだろ。
酷い態度でなければ。
0555デフォルトの名無しさんNGNG
(´-`).。oO(○○美少年を名乗れば優しいおねーさんが丁寧に教えてくれるのかなぁ…)
0556デフォルトの名無しさんNGNG
>>553
今日はNULLあたりでマジになってたのが多かったから
それなりの答えが返って来ただけで
普段だったら、>>527の質問で
「女の子の仕組みを教えて下さい」
って切り返して終わるのがオチと思われ
0557デフォルトの名無しさんNGNG
>>556
このスレは違う。
0558デフォルトの名無しさんNGNG
>>555
きっとモーホーなお兄さんが全力で教えてくれるぞ。関係ないことまで。
801板のお姉さんたちでもいい。
■ このスレッドは過去ログ倉庫に格納されています