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

C言語なら俺に聞け(入門編)Part 116

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2013/06/14(金) 20:22:05.73
C言語の入門者向け解説スレッドです。

★前スレ
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
>>231
消費者はそう思ってない
またグラフィックだけのクソゲーか
と飽き飽きしてる
それも当然だグラフィックしか売りがなければ
暫くすればすぐによりグラフィックが優れたゲームが作られる
無意味なんだよ今の業界がやってる仕事はね
誰の記憶にも残らないすぐに最新作に上書きされる為だけにゲームを量産している
あまりにも不毛だ
0233デフォルトの名無しさん2013/06/23(日) 20:27:12.90
フルオーケストラ、最後に聴きに行ったのは今年の2月だったかな
1回きりでも諭吉使う価値あるんだよねえ

ところでゲーム屋さん、何がどのようにオーケストラ並みなの?
作曲してる人たちやDAC作ってるハード屋さんの仕事は、諭吉に匹敵すると思うんだけど
えーと・・・
0234デフォルトの名無しさん2013/06/23(日) 20:33:16.90
>>230
ツクールレベルならRubyとかスクリプト言語で十分。
だけど将来もしかしたら3Dやるかも、とかだったらやっぱりC/C++のほうがいいね。
あなたにデニスリッチーの加護があらんことを。
0235デフォルトの名無しさん2013/06/23(日) 20:37:09.56
>>232
いや、だからお前文字情報だけのゲーム作って売ってみろって
お前の言ってることが正しければみんな文字情報ゲー買うだろ
今どんな生活してるか知らんけど、普通のリーマンだとしたら生活水準かなり上がるぞ
お前の言ってることが正しければリスクもない
0236デフォルトの名無しさん2013/06/23(日) 20:59:00.58
売れるゲームのはなしなんか誰もしてないぞ
>>226 の皮肉がわからない馬鹿一名を除いて
0237デフォルトの名無しさん2013/06/23(日) 21:09:25.88
>>234
ありがとうございました。
0238デフォルトの名無しさん2013/06/23(日) 21:21:51.52
>>233
ピンキリだけどゲームでも腕のいい作曲家だと年収もオーケストラやってる上手い演奏家と同じくらいだよ。
0239デフォルトの名無しさん2013/06/23(日) 21:55:13.13
そういえば最近のツクールには Rubyのスクリプトがついているんだったな

どうせコピペを繰り返してもなにも身につかないから
基本機能で不自由さを噛み締めるのが良い
0240デフォルトの名無しさん2013/06/23(日) 22:00:38.49
程度が低いぜこのスレは
0241デフォルトの名無しさん2013/06/23(日) 22:07:09.88
ここは入門スレだから
程度の高い話期待するなら、そういうスレに移動
0242デフォルトの名無しさん2013/06/23(日) 22:11:42.81
IDないから好き放題でまとまりがないんだよな
それがム板の残念なとこ
0243デフォルトの名無しさん2013/06/23(日) 22:13:23.16
ID有りのスレから逃げてくるのが多いから仕方がない。
0244デフォルトの名無しさん2013/06/23(日) 22:21:22.41
どこですか、それ
0245デフォルトの名無しさん2013/06/23(日) 22:23:40.31
文字は究極のドット絵
0246デフォルトの名無しさん2013/06/24(月) 07:45:29.55
True Type Font
0247 ◆QZaw55cn4c 2013/06/24(月) 08:30:53.83
>>214
えへへ〜、奥村さんの本をみてかきます、めんどくさいから
0248デフォルトの名無しさん2013/06/24(月) 10:29:37.67
えへへ〜、奥さんの○をみてかきます
0249デフォルトの名無しさん2013/06/24(月) 11:14:59.21
アルゴリズムの入門書のクイックソートのCの実装をみていまいち理解できなかったけど
最近haskellのクイックソートのコードをみて、こういうことだったかと腑に落ちたわ。

どの言語ではじめるのがいいですかって質問してる初心者に、Cが基礎だって薦めるやつはウンコだな。
0250デフォルトの名無しさん2013/06/24(月) 11:32:31.32
パラダイムシフトが必要なんだよね、haskell読むのって。
0251デフォルトの名無しさん2013/06/24(月) 12:27:08.17
宗教的理由により生涯ただひとつの言語しか覚えてはいけないという制約があれば
Cから始めるしかない
0252デフォルトの名無しさん2013/06/24(月) 16:56:16.68
唯一の神しか信じてはならない
0253デフォルトの名無しさん2013/06/24(月) 17:22:30.63
>>249
CMMCPで計算モデルを知ると、言語変わっても対応しやすくなる。
0254デフォルトの名無しさん2013/06/24(月) 17:44:34.80
CMMCPって何?
ググっても蚊のサイトしか出ない
0255デフォルトの名無しさん2013/06/24(月) 19:52:16.74
>>254
すまん、CTMCPだ。
(Concepts, Techniques, and Models of Computer Programming)
0256デフォルトの名無しさん2013/06/25(火) 20:21:42.28
質問です。
インクルードガードされたヘッダファイルって2回目は読み込まないんですよね?
でもインクルードしたらどのソースファイルからも宣言した構造体とか使えます。
インクルードで文字列を置き換えてるだけなら、
ヘッダファイルの内容を一箇所でしか使えないと思うんですがどうなっているんでしょうか。
0257デフォルトの名無しさん2013/06/25(火) 20:34:08.74
>>256
IDEとかを使ってて不思議に思うのかも知れないが
CやC++コンパイルってのは基本的に、各.cや.cppに対して行う
.cが2つあれば、コンパイルは2つ走るワケで
「ひとつのコンパイル単位の間で」一度ずつしか読まれないだけよ
0258デフォルトの名無しさん2013/06/25(火) 20:47:01.44
#includeっていうのは指定したヘッダーファイルの内容をその場所にぶちまけてるってだけ
0259 ◆QZaw55cn4c 2013/06/25(火) 20:52:01.63
>>256
一つのコンパイル単位において一回だけ、というだけで
複数のコンパイル単位については、必要ならばそれぞれについて一回インクルードされますよ
0260デフォルトの名無しさん2013/06/25(火) 20:58:52.43
>>257-259
いやー凄い勉強になりました
これが納得いかなくてずっと悩んでたもので
試しにヘッダファイルに int x = 10; と入れてみて二箇所から読んでみたらちゃんと再定義のエラーになりました。
一箇所から2回読んだ時は、インクルードガードされるので大丈夫なんですね
ありがとうございました
0261 ◆QZaw55cn4c 2013/06/25(火) 21:34:56.45
>>260
こっちからはなにかよくわかっていませんが、持ちネタの「仮定義」tentative defenision のよーな木が

extern は要らない子っ!!!!
0262デフォルトの名無しさん2013/06/25(火) 21:40:53.08
undefしてマクロ再定義し、includeを2度する邪悪なソースを見たことがある
0263 ◆QZaw55cn4c 2013/06/25(火) 21:47:01.53
>>262
じゃあ番兵 #define の識別子をきみょーきてれつにするんだ!
0264デフォルトの名無しさん2013/06/25(火) 21:48:53.53
>>263
いやそれヘッダ開いてコピペされるだけだから…#pragma onceとか使うしかないっしょ
0265デフォルトの名無しさん2013/06/25(火) 22:48:00.10
常駐先の人件費抑制に利用されただけの人生だったな残念w
0266デフォルトの名無しさん2013/06/26(水) 00:14:02.45
>>261
そりゃ業務で分割コンパイルも経験した事のないヤツにはexternは不要だろうな
0267 ◆QZaw55cn4c 2013/06/26(水) 04:07:29.94
>>266
キーワード extern を1回も使わなくても複数の翻訳単位で系を構成することはできます(棒)
extern は要らない子っ
0268デフォルトの名無しさん2013/06/26(水) 10:55:37.73
>>267
関数のプロトタイプはexternなしでもいいし、変数もグローバル変数使わなければいいしな。
0269デフォルトの名無しさん2013/06/26(水) 10:59:18.24
C言語のスレなんだが
0270デフォルトの名無しさん2013/06/26(水) 11:03:22.03
Cだとextern不可避のことってあるんだっけ。
0271デフォルトの名無しさん2013/06/26(水) 11:07:49.59
http://www.kouno.jp/home/c_faq/c1.html#11

1.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
>>268>>270
オブジェクト指向ではないC言語はどうしても大域変数が欠かせない場面が多い

>>267は実務をしらないニートの発言
0273デフォルトの名無しさん2013/06/26(水) 11:30:33.05
>>272
手元にあったgitのソースにgrepかけてみたら、変数のexternはerrnoの一個しかなかったわ。
普通に組んでたらいらないんじゃないの。
02742732013/06/26(水) 11:41:12.99
よくみたらけっこうあったわ > 変数のextern
ごめん。
0275デフォルトの名無しさん2013/06/26(水) 11:44:50.09
オブジェクト指向でないから、大域変数を完全に使わないとすれば、構造体に
変数を持たせてそのポインタを持って回る事になるが、このプログラミングスタイル
は管理が大変な上にエラーの原因になりやすい

externを使った方が遥かに楽な場面が多い
0276デフォルトの名無しさん2013/06/26(水) 12:14:07.85
大域変数宣言する際に、externをつけなくてもいいという話なんじゃないの?
0277 ◆QZaw55cn4c 2013/06/26(水) 12:31:20.85
>>268
グローバル変数を使うときでも制約はありますが extern キーワードを使わなくともリンクできます(棒)
0278 ◆QZaw55cn4c 2013/06/26(水) 12:32:53.04
>>272
>>277
キーワードを先に示しているのに‥‥
趣味でも英語読むのに実務で英語読まないとかありえるのですか‥‥
0279デフォルトの名無しさん2013/06/26(水) 12:33:09.81
持ちネタはもういいよ
0280デフォルトの名無しさん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
>>276
どれか一つのファイルにはexternは必要だぞ
全部書いてなかったらリンクできない
0282デフォルトの名無しさん2013/06/26(水) 12:44:39.50
http://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.5.4.html

こういうのは古いけど今でも立派に通用するテクニックだ
0283デフォルトの名無しさん2013/06/26(水) 12:50:46.95
>>277
どうやってリンクするの?
0284デフォルトの名無しさん2013/06/26(水) 12:55:36.54
狂人に構うなよ
時間の無駄だぞ
0285デフォルトの名無しさん2013/06/26(水) 13:03:32.22
「externは必要」というのは間違い。省略した場合はexternが付いているのと同じだから。
「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
>>285
それ関数の話?
0288デフォルトの名無しさん2013/06/26(水) 13:06:27.26
>>285
ちょっと違うなあ

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.07
C言語自体が化石言語……
0291デフォルトの名無しさん2013/06/26(水) 13:39:45.88
化石言語が未だに大学で教えられている件について
02922852013/06/26(水) 14:08:30.53
関数の話かと勘違いしちゃった…
02932852013/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
つまりQZは

>この挙動は紛らわしい為、特に必要でない限り仮定義を用いるのは避けた方が無難である。

これを正当化してるわけか
糞だな
0295デフォルトの名無しさん2013/06/26(水) 14:56:31.49
>>293
externなしでも勝手に変数をまとめちゃうような変態機能とかあんのか。
0296デフォルトの名無しさん2013/06/26(水) 15:13:13.96
>>295
老害しか使わない馬鹿機能だから知らなくていい
0297デフォルトの名無しさん2013/06/26(水) 15:26:03.63
プロなら知ってないとまずい。
0298デフォルトの名無しさん2013/06/26(水) 15:39:46.15
プロ?ニートのどこがプロなの?
0299デフォルトの名無しさん2013/06/26(水) 15:53:25.72
うるさいゴミ
0300デフォルトの名無しさん2013/06/26(水) 16:10:39.97
とニートが発狂しております
0301デフォルトの名無しさん2013/06/26(水) 19:06:50.74
客先常駐で偉そうな客先社員に見下されて何の経験にもならない雑用を押し付けられて精神病むのがオチw
30代で常駐先がなくなって未経験の異業種で人生やり直すのがオチ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
>>302
もう無知ではない
だが使うのは奨励されない
0305デフォルトの名無しさん2013/06/26(水) 20:43:40.94
externとか不要だろ
全部引数で渡せよ
0306デフォルトの名無しさん2013/06/26(水) 20:47:37.52
>>305
それでももちろんいいが、OOP言語じゃないと見通しが著しく悪くなるし、
アクセス制御も出来ないっしょ?

C言語では必要悪
0307デフォルトの名無しさん2013/06/26(水) 20:55:28.54
定数を指すマクロも極力引数渡しするのかな…

コンパイル時ではなく起動時に確定した後、変わることはない値とか
準マクロ的に使いたくなる
0308デフォルトの名無しさん2013/06/26(水) 20:59:27.49
普通に構造体でなんとかなる
0309デフォルトの名無しさん2013/06/26(水) 21:00:07.61
組み込みやドライバなら許す
0310デフォルトの名無しさん2013/06/26(水) 21:11:49.11
>>293
規格書にもポータブルでないと明記されている。
企画書の何処に書かれているか分からないゴミクズが炎上学習企んでるだけ WWWW
0311デフォルトの名無しさん2013/06/26(水) 21:21:12.93
>>308
だからアクセス制御ないからバグが入るって

>>310
やっぱりか
クズはクズだなあ
0312デフォルトの名無しさん2013/06/26(水) 21:22:46.79
>>311
アクセス制御とか言い出したら
グローバル変数なんて完全に開けっぴろげだろw

それに構造体も隠蔽可能だぞ
ヘッダには宣言だけ書いて
全部関数を通じて操作させればいいだけ
生成は動的になるけど
0313デフォルトの名無しさん2013/06/26(水) 21:25:38.32
FILEの中身知ってる奴いんのか
Cで隠蔽とか普通に可能
0314 ◆QZaw55cn4c 2013/06/26(水) 21:45:11.87
>>281
それができるのです(棒)
0315 ◆QZaw55cn4c 2013/06/26(水) 21:46:11.61
>>283
初期化せずに宣言だけする形をとれば extern なんかつける必要はありません(棒)
0316 ◆QZaw55cn4c 2013/06/26(水) 21:48:33.57
>>289
MASM5->MASM6 では EXTERNDEF なるディレクティブが新設されたくらい当たり前に新しい考え方

>俺はexternを省略するな、と教わった口だからな
本質を理解しないと新しいことに対応できなくなりますよね
0317 ◆QZaw55cn4c 2013/06/26(水) 21:49:18.00
>>290-291
化石言語とやらでいまだにOSが書かれている件について
0318 ◆QZaw55cn4c 2013/06/26(水) 21:49:39.68
>>295
リンカがね
0319デフォルトの名無しさん2013/06/26(水) 21:50:43.65
>>310
>規格書にもポータブルでないと明記されている。
でそれはどこ?具体的に引用できないようでは馬鹿が喚いているのとかわらないよね
0320デフォルトの名無しさん2013/06/26(水) 21:51:19.31
おっあぼーんが連続してるんだが
0321 ◆QZaw55cn4c 2013/06/26(水) 22:05:58.49
>>293
>gccではこの場合、コンパイラが解決している模様。
コンパイラがリンクするわけがない。リンカがリンクするんだ。それを書いた奴は誰?URL をさらしてくれないか?
表からみえる gcc はコンパイラドライバであってコンパイラではない

>定義と仮定義が同時に存在する場合もコンパイラが解決している模様(言うまでもなく、定義は2つ以上存在してはならない)。
定義という言葉自体が曖昧。この問題を正確に記述するのであれば、「初期化を伴う定義」と「宣言」または「仮定義」の二つのみを使うべき
初期化を伴う定義はリンクするオブジェクトのすべてにおいて二箇所以上に存在してはならない、それだけの話だ
0322 ◆QZaw55cn4c 2013/06/26(水) 22:08:41.51
>>282
残念ながらCならばそんなことをする必要はないMASM6だって必要なかったくらいだからねその著者もあやしいものだね
0323デフォルトの名無しさん2013/06/26(水) 22:09:56.74
オブジェクトファイルを作成する時に
inline 関数などリンク時に同一にまとめられる識別子は
「複数定義を同一にまとめる」という属性を付けるけど
それの話か?
0324 ◆QZaw55cn4c 2013/06/26(水) 22:10:33.44
>>310
リンカやオブジェクトファイルの仕様がCの言語仕様書に明記されるのか?かなり疑問だ
0325 ◆QZaw55cn4c 2013/06/26(水) 22:12:08.85
>>279
まだまだこのネタいけるね
0326デフォルトの名無しさん2013/06/26(水) 22:18:23.06
突然回答者のレベル下がったな
0327デフォルトの名無しさん2013/06/26(水) 22:24:02.59
要するに環境依存って事だろ
スレ違いだ
0328デフォルトの名無しさん2013/06/26(水) 22:26:22.51
>>327
環境依存というわりには「適用できない環境」なるものを具体的に列挙できない件について
0329デフォルトの名無しさん2013/06/26(水) 22:33:06.23
列挙して欲しいならそう聞けよ初心者さんよ
態度でかくね?
0330デフォルトの名無しさん2013/06/26(水) 22:39:05.27
関数と同様にリンカが未定義エラーにするのが良い感じするんだけどね
0331デフォルトの名無しさん2013/06/26(水) 22:44:24.80
日本のIT企業は人材派遣会社でしかない
昔からある日本の大企業の社員の雇用を守る為にIT技術者が人件費抑制のために使い捨てにされていってるだけw
■ このスレッドは過去ログ倉庫に格納されています