C言語なら俺に聞け(入門編)Part 116
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2013/06/14(金) 20:22:05.73★前スレ
C言語なら俺に聞け(入門編)Part 115
http://toro.2ch.net/test/read.cgi/tech/1368444993/
★過去スレ
http://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
★教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 164代目
http://toro.2ch.net/test/read.cgi/tech/1370255305/
★C++言語については避けてください。C++対応明記スレへどうぞ。
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること。
# サイズが大きい場合はアップローダ等を利用してください。
http://codepad.org/C/C++の宿題片付けます 165代目
http://ideone.com/
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
0232デフォルトの名無しさん
2013/06/23(日) 20:24:32.40消費者はそう思ってない
またグラフィックだけのクソゲーか
と飽き飽きしてる
それも当然だグラフィックしか売りがなければ
暫くすればすぐによりグラフィックが優れたゲームが作られる
無意味なんだよ今の業界がやってる仕事はね
誰の記憶にも残らないすぐに最新作に上書きされる為だけにゲームを量産している
あまりにも不毛だ
0233デフォルトの名無しさん
2013/06/23(日) 20:27:12.901回きりでも諭吉使う価値あるんだよねえ
ところでゲーム屋さん、何がどのようにオーケストラ並みなの?
作曲してる人たちやDAC作ってるハード屋さんの仕事は、諭吉に匹敵すると思うんだけど
えーと・・・
0234デフォルトの名無しさん
2013/06/23(日) 20:33:16.90ツクールレベルならRubyとかスクリプト言語で十分。
だけど将来もしかしたら3Dやるかも、とかだったらやっぱりC/C++のほうがいいね。
あなたにデニスリッチーの加護があらんことを。
0235デフォルトの名無しさん
2013/06/23(日) 20:37:09.56いや、だからお前文字情報だけのゲーム作って売ってみろって
お前の言ってることが正しければみんな文字情報ゲー買うだろ
今どんな生活してるか知らんけど、普通のリーマンだとしたら生活水準かなり上がるぞ
お前の言ってることが正しければリスクもない
0236デフォルトの名無しさん
2013/06/23(日) 20:59:00.58>>226 の皮肉がわからない馬鹿一名を除いて
0237デフォルトの名無しさん
2013/06/23(日) 21:09:25.88ありがとうございました。
0238デフォルトの名無しさん
2013/06/23(日) 21:21:51.52ピンキリだけどゲームでも腕のいい作曲家だと年収もオーケストラやってる上手い演奏家と同じくらいだよ。
0239デフォルトの名無しさん
2013/06/23(日) 21:55:13.13どうせコピペを繰り返してもなにも身につかないから
基本機能で不自由さを噛み締めるのが良い
0240デフォルトの名無しさん
2013/06/23(日) 22:00:38.490241デフォルトの名無しさん
2013/06/23(日) 22:07:09.88程度の高い話期待するなら、そういうスレに移動
0242デフォルトの名無しさん
2013/06/23(日) 22:11:42.81それがム板の残念なとこ
0243デフォルトの名無しさん
2013/06/23(日) 22:13:23.160244デフォルトの名無しさん
2013/06/23(日) 22:21:22.410245デフォルトの名無しさん
2013/06/23(日) 22:23:40.310246デフォルトの名無しさん
2013/06/24(月) 07:45:29.55えへへ〜、奥村さんの本をみてかきます、めんどくさいから
0248デフォルトの名無しさん
2013/06/24(月) 10:29:37.670249デフォルトの名無しさん
2013/06/24(月) 11:14:59.21最近haskellのクイックソートのコードをみて、こういうことだったかと腑に落ちたわ。
どの言語ではじめるのがいいですかって質問してる初心者に、Cが基礎だって薦めるやつはウンコだな。
0250デフォルトの名無しさん
2013/06/24(月) 11:32:31.320251デフォルトの名無しさん
2013/06/24(月) 12:27:08.17Cから始めるしかない
0252デフォルトの名無しさん
2013/06/24(月) 16:56:16.680253デフォルトの名無しさん
2013/06/24(月) 17:22:30.63CMMCPで計算モデルを知ると、言語変わっても対応しやすくなる。
0254デフォルトの名無しさん
2013/06/24(月) 17:44:34.80ググっても蚊のサイトしか出ない
0255デフォルトの名無しさん
2013/06/24(月) 19:52:16.74すまん、CTMCPだ。
(Concepts, Techniques, and Models of Computer Programming)
0256デフォルトの名無しさん
2013/06/25(火) 20:21:42.28インクルードガードされたヘッダファイルって2回目は読み込まないんですよね?
でもインクルードしたらどのソースファイルからも宣言した構造体とか使えます。
インクルードで文字列を置き換えてるだけなら、
ヘッダファイルの内容を一箇所でしか使えないと思うんですがどうなっているんでしょうか。
0257デフォルトの名無しさん
2013/06/25(火) 20:34:08.74IDEとかを使ってて不思議に思うのかも知れないが
CやC++コンパイルってのは基本的に、各.cや.cppに対して行う
.cが2つあれば、コンパイルは2つ走るワケで
「ひとつのコンパイル単位の間で」一度ずつしか読まれないだけよ
0258デフォルトの名無しさん
2013/06/25(火) 20:47:01.44一つのコンパイル単位において一回だけ、というだけで
複数のコンパイル単位については、必要ならばそれぞれについて一回インクルードされますよ
0260デフォルトの名無しさん
2013/06/25(火) 20:58:52.43いやー凄い勉強になりました
これが納得いかなくてずっと悩んでたもので
試しにヘッダファイルに int x = 10; と入れてみて二箇所から読んでみたらちゃんと再定義のエラーになりました。
一箇所から2回読んだ時は、インクルードガードされるので大丈夫なんですね
ありがとうございました
こっちからはなにかよくわかっていませんが、持ちネタの「仮定義」tentative defenision のよーな木が
extern は要らない子っ!!!!
0262デフォルトの名無しさん
2013/06/25(火) 21:40:53.08じゃあ番兵 #define の識別子をきみょーきてれつにするんだ!
0264デフォルトの名無しさん
2013/06/25(火) 21:48:53.53いやそれヘッダ開いてコピペされるだけだから…#pragma onceとか使うしかないっしょ
0265デフォルトの名無しさん
2013/06/25(火) 22:48:00.100266デフォルトの名無しさん
2013/06/26(水) 00:14:02.45そりゃ業務で分割コンパイルも経験した事のないヤツにはexternは不要だろうな
キーワード extern を1回も使わなくても複数の翻訳単位で系を構成することはできます(棒)
extern は要らない子っ
0268デフォルトの名無しさん
2013/06/26(水) 10:55:37.73関数のプロトタイプはexternなしでもいいし、変数もグローバル変数使わなければいいしな。
0269デフォルトの名無しさん
2013/06/26(水) 10:59:18.240270デフォルトの名無しさん
2013/06/26(水) 11:03:22.030271デフォルトの名無しさん
2013/06/26(水) 11:07:49.591.11:
関数宣言についたexternは何を意味するのか。
A:
こういう書き方をすることで、関数の定義がたぶん別のソースファイ ルにあるということを、ほのめかすことができる。しかし以下の2つ に違いはない。
extern int f();
int f();
References:
ANSI Sec. 3.1.2.2, Sec. 3.5.1; ISO Sec. 6.1.2.2, Sec. 6.5.1; Rationale Sec. 3.1.2.2; H&S Secs. 4.3,4.3.1 pp. 75- 6.
0272デフォルトの名無しさん
2013/06/26(水) 11:16:18.07オブジェクト指向ではないC言語はどうしても大域変数が欠かせない場面が多い
>>267は実務をしらないニートの発言
0273デフォルトの名無しさん
2013/06/26(水) 11:30:33.05手元にあったgitのソースにgrepかけてみたら、変数のexternはerrnoの一個しかなかったわ。
普通に組んでたらいらないんじゃないの。
0274273
2013/06/26(水) 11:41:12.99ごめん。
0275デフォルトの名無しさん
2013/06/26(水) 11:44:50.09変数を持たせてそのポインタを持って回る事になるが、このプログラミングスタイル
は管理が大変な上にエラーの原因になりやすい
externを使った方が遥かに楽な場面が多い
0276デフォルトの名無しさん
2013/06/26(水) 12:14:07.85グローバル変数を使うときでも制約はありますが extern キーワードを使わなくともリンクできます(棒)
0279デフォルトの名無しさん
2013/06/26(水) 12:33:09.810280デフォルトの名無しさん
2013/06/26(水) 12:40:42.95#define H8_3069F_SCI_SMR_CKS_PER1 ( 0<<0 )
#define H8_3069F_SCI_SMR_CKS_PER4 ( 1<<0 )
#define H8_3069F_SCI_SMR_CKS_PER16 ( 2<<0 )
#define H8_3069F_SCI_SMR_CKS_PER32 ( 3<<0 )
0281デフォルトの名無しさん
2013/06/26(水) 12:42:52.63どれか一つのファイルにはexternは必要だぞ
全部書いてなかったらリンクできない
0282デフォルトの名無しさん
2013/06/26(水) 12:44:39.50こういうのは古いけど今でも立派に通用するテクニックだ
0283デフォルトの名無しさん
2013/06/26(水) 12:50:46.95どうやってリンクするの?
0284デフォルトの名無しさん
2013/06/26(水) 12:55:36.54時間の無駄だぞ
0285デフォルトの名無しさん
2013/06/26(水) 13:03:32.22「externは不要」というのは間違い。明示的に書くことで外部宣言されていることが分りやすくなるから。
「externは書いた方が親切」これが正解。
0286デフォルトの名無しさん
2013/06/26(水) 13:03:35.29--- a.c
extern int *a;
--- b.c
int a[100];
なぜ動かないか最初は理解出来なかった
0287デフォルトの名無しさん
2013/06/26(水) 13:05:02.34それ関数の話?
0288デフォルトの名無しさん
2013/06/26(水) 13:06:27.26ちょっと違うなあ
http://blog.bitmeister.jp/?p=614
>externのついた大域変数は必ずいずれかのモジュールに実体がないとダメで、
>externのつかない大域変数は基本的にexternありと同じだが、いずれのモジュールにも
>実体がなければリンカが実体を作る、という感じになるでしょうか。
リンカに任せるのかよ
バグの温床になりそうだな
0289デフォルトの名無しさん
2013/06/26(水) 13:10:52.54>fs Says:
>6月 11th, 2011 at 11:00 PM
>このような言語仕様になった(externの省略が許されるよう緩和された)理由は、
>もともとUNIX他のオペレーティングシステムのリンカーがFortran言語を前提に
>作られている現状を追認するためなのではないかと思います。Fortranは
>上記の「初期値式を持つ定義」は許されない代わりに、extern宣言は不要ですから。
「extern不要!」と言ってるやつはロートルじゃねーの
俺はexternを省略するな、と教わった口だからな
0290デフォルトの名無しさん
2013/06/26(水) 13:35:54.070291デフォルトの名無しさん
2013/06/26(水) 13:39:45.880292285
2013/06/26(水) 14:08:30.530293285
2013/06/26(水) 14:33:07.27仮定義
初期化子を指定しない定義を仮定義という。同じ変数の仮定義は、1つの翻訳単位に複数存在しても構わない。
定義と同様、実体は確保される。仮定義が一つの翻訳単位に複数存在した場合、コンパイラはそれらを1つにまとめ、
0の初期化子を持ったものとして定義する。ただし、全翻訳単位において既に定義が存在すれば、extern宣言された
ものとして振る舞う。この挙動は紛らわしい為、特に必要でない限り仮定義を用いるのは避けた方が無難である。
int n;
尚、同じ仮定義が複数の翻訳単位に存在する場合の、リンク時の動作は規格化されていない。
故に、この場合の動作は未定義である。gccではこの場合、コンパイラが解決している模様。
また、定義と仮定義が同時に存在する場合もコンパイラが解決している模様(言うまでもなく、
定義は2つ以上存在してはならない)。
http://d.hatena.ne.jp/XuHuang/20070624/1182669569
0294デフォルトの名無しさん
2013/06/26(水) 14:34:11.67>この挙動は紛らわしい為、特に必要でない限り仮定義を用いるのは避けた方が無難である。
これを正当化してるわけか
糞だな
0295デフォルトの名無しさん
2013/06/26(水) 14:56:31.49externなしでも勝手に変数をまとめちゃうような変態機能とかあんのか。
0296デフォルトの名無しさん
2013/06/26(水) 15:13:13.96老害しか使わない馬鹿機能だから知らなくていい
0297デフォルトの名無しさん
2013/06/26(水) 15:26:03.630298デフォルトの名無しさん
2013/06/26(水) 15:39:46.150299デフォルトの名無しさん
2013/06/26(水) 15:53:25.720300デフォルトの名無しさん
2013/06/26(水) 16:10:39.970301デフォルトの名無しさん
2013/06/26(水) 19:06:50.7430代で常駐先がなくなって未経験の異業種で人生やり直すのがオチw
常駐先企業の人件費抑制に利用されただけの人生だったな残念w
システムエンジニアになろう〜新入社員研修編〜
ttp://www.nicovideo.jp/watch/sm4010880
0302デフォルトの名無しさん
2013/06/26(水) 19:12:44.20知ってることと実装で使っちゃうことはまったく別の話だろ
0303デフォルトの名無しさん
2013/06/26(水) 19:31:39.63それだけでも良いんじゃない?
0304デフォルトの名無しさん
2013/06/26(水) 19:54:14.25もう無知ではない
だが使うのは奨励されない
0305デフォルトの名無しさん
2013/06/26(水) 20:43:40.94全部引数で渡せよ
0306デフォルトの名無しさん
2013/06/26(水) 20:47:37.52それでももちろんいいが、OOP言語じゃないと見通しが著しく悪くなるし、
アクセス制御も出来ないっしょ?
C言語では必要悪
0307デフォルトの名無しさん
2013/06/26(水) 20:55:28.54コンパイル時ではなく起動時に確定した後、変わることはない値とか
準マクロ的に使いたくなる
0308デフォルトの名無しさん
2013/06/26(水) 20:59:27.490309デフォルトの名無しさん
2013/06/26(水) 21:00:07.610310デフォルトの名無しさん
2013/06/26(水) 21:11:49.11規格書にもポータブルでないと明記されている。
企画書の何処に書かれているか分からないゴミクズが炎上学習企んでるだけ WWWW
0311デフォルトの名無しさん
2013/06/26(水) 21:21:12.93だからアクセス制御ないからバグが入るって
>>310
やっぱりか
クズはクズだなあ
0312デフォルトの名無しさん
2013/06/26(水) 21:22:46.79アクセス制御とか言い出したら
グローバル変数なんて完全に開けっぴろげだろw
それに構造体も隠蔽可能だぞ
ヘッダには宣言だけ書いて
全部関数を通じて操作させればいいだけ
生成は動的になるけど
0313デフォルトの名無しさん
2013/06/26(水) 21:25:38.32Cで隠蔽とか普通に可能
それができるのです(棒)
初期化せずに宣言だけする形をとれば extern なんかつける必要はありません(棒)
MASM5->MASM6 では EXTERNDEF なるディレクティブが新設されたくらい当たり前に新しい考え方
>俺はexternを省略するな、と教わった口だからな
本質を理解しないと新しいことに対応できなくなりますよね
化石言語とやらでいまだにOSが書かれている件について
リンカがね
0319デフォルトの名無しさん
2013/06/26(水) 21:50:43.65>規格書にもポータブルでないと明記されている。
でそれはどこ?具体的に引用できないようでは馬鹿が喚いているのとかわらないよね
0320デフォルトの名無しさん
2013/06/26(水) 21:51:19.31>gccではこの場合、コンパイラが解決している模様。
コンパイラがリンクするわけがない。リンカがリンクするんだ。それを書いた奴は誰?URL をさらしてくれないか?
表からみえる gcc はコンパイラドライバであってコンパイラではない
>定義と仮定義が同時に存在する場合もコンパイラが解決している模様(言うまでもなく、定義は2つ以上存在してはならない)。
定義という言葉自体が曖昧。この問題を正確に記述するのであれば、「初期化を伴う定義」と「宣言」または「仮定義」の二つのみを使うべき
初期化を伴う定義はリンクするオブジェクトのすべてにおいて二箇所以上に存在してはならない、それだけの話だ
残念ながらCならばそんなことをする必要はないMASM6だって必要なかったくらいだからねその著者もあやしいものだね
0323デフォルトの名無しさん
2013/06/26(水) 22:09:56.74inline 関数などリンク時に同一にまとめられる識別子は
「複数定義を同一にまとめる」という属性を付けるけど
それの話か?
リンカやオブジェクトファイルの仕様がCの言語仕様書に明記されるのか?かなり疑問だ
まだまだこのネタいけるね
0326デフォルトの名無しさん
2013/06/26(水) 22:18:23.060327デフォルトの名無しさん
2013/06/26(水) 22:24:02.59スレ違いだ
0328デフォルトの名無しさん
2013/06/26(水) 22:26:22.51環境依存というわりには「適用できない環境」なるものを具体的に列挙できない件について
0329デフォルトの名無しさん
2013/06/26(水) 22:33:06.23態度でかくね?
0330デフォルトの名無しさん
2013/06/26(水) 22:39:05.270331デフォルトの名無しさん
2013/06/26(水) 22:44:24.80昔からある日本の大企業の社員の雇用を守る為にIT技術者が人件費抑制のために使い捨てにされていってるだけw
■ このスレッドは過去ログ倉庫に格納されています