関数テーブルが分からない

1 : 仕様書無しさん : 2007/10/07(日) 20:46:25
PG歴2年目の者です。
C言語使って仕事してますが関数テーブルが分かりません。
なんであんな配列みたいので分岐できるのか理解に苦しみます。
コールバック関数というのもわかりません。

どなたか分かりやすく教えてくれませんか。
2 : 仕様書無しさん : 2007/10/07(日) 20:48:40
僕もわかりません。
3 : 仕様書無しさん[sage] : 2007/10/07(日) 20:55:43
まず、関数ポインタを勉強しろ
4 : 仕様書無しさん : 2007/10/07(日) 20:57:46
>>3
そんなのCの本に載ってないんですけど。。。
一応ぐぐってみます。
5 : [sage] : 2007/10/07(日) 21:18:00
関数名はその関数へのポインタなんですね。知りませんでした。
ここまでは理解しました。
6 : 仕様書無しさん[sage] : 2007/10/07(日) 21:26:43
関数ポインタを配列にしたのが関数テーブル
そんだけ
7 : [sage] : 2007/10/07(日) 21:29:23
理解しました。ありがとうございます。

8 : 仕様書無しさん[sage] : 2007/10/07(日) 21:43:59
http://pc11.2ch.net/test/read.cgi/prog/1189987548/

今度からはこっちな
9 : 仕様書無しさん[sage] : 2007/10/08(月) 00:00:54
機械語的には当然でも
そういう土台が無いから想像できないんだろう
ハックするとかじゃなきゃ覚えないんだろうな
10 : 仕様書無しさん[sage] : 2007/10/08(月) 00:49:25
本気で釣りスレかと思った自分は年寄
11 : 仕様書無しさん[sage] : 2007/10/08(月) 12:30:28
だからエアーマンが倒せないのMADだと何度言えば
12 : 仕様書無しさん[sage] : 2007/10/08(月) 14:34:41
違うよ。
クリリンの気円斬だよ。
13 : 仕様書無しさん[sage] : 2007/10/09(火) 11:27:01
コンパイラによっては最適化でテーブル作らなくても勝手に固めてくれます。

switch(x){
 case 0:
 case 1:
 case 2:
 case 3:
}

これが機械語レベルでは0~3のオフセットを伴ったジャンプテーブルを勝手に生成。
「defaultは書いちゃダメ」というコンパイラも。


自前で作りたければtypedefして「自分に限定だけど」見やすくなる。

まあ、かっこつけたところで、わかってなければバグの元です。
腕に自信があれば、どうぞ。
14 : 仕様書無しさん[sage] : 2007/10/09(火) 11:33:14
Cのよもやまなら
「Cプログラミング専門課程」を読むと色々と書いてあります。
「Cプログラミング診断室」書いた人の本。
15 : 仕様書無しさん[sage] : 2007/10/18(木) 07:40:08
話ぶったぎりで質問

C言語の関数テーブルは分かるんだけど、
C++の場合、関数の場合って関数テーブル実現ってどうやればいいんでしょう?

知っている方法としては、
・テーブル構造体の関数の所の型をしっかり書く
・extern "C"で関数を宣言する(ただしオーバーロードできなくなるデメリットが。)

C言語に慣れすぎて、C++についていけなかったりしてます・・・
C++は便利なんだけどなー
16 : 仕様書無しさん[sage] : 2007/10/26(金) 00:56:13
CでもC++でもコンパイル出来るように作っとけ。
17 : 仕様書無しさん : 2007/10/26(金) 17:34:09
関数テーブルが理解できないやつ、いた。
グループ内でそいつだけわからなかったらしく、逆切れしてた。
18 : 仕様書無しさん[sage] : 2007/10/28(日) 16:37:14
>>15
仮想関数でやるのがC++っぽい。
「デザインパターン」読んどけ。
19 : 仕様書無しさん : 2007/11/08(木) 04:30:21

タイマーに関数を登録?して、時間が来たらその関数に飛んでくるっての
使ってるんだけどなぜこんなプログラムの流れを無視した動作ができるの?
携帯開発してます。
意味がわからないままにプログラムしてます。
20 : 仕様書無しさん[sage] : 2007/11/08(木) 06:46:25
PICとかで遊んでみたら?
>>9が言ってるように、低レベルに降りないと理解しにくいことは多い。
21 : 仕様書無しさん[sage] : 2007/11/08(木) 07:27:19
>>20
PICってマイコンですよね。
がんばって挑戦してみます。
22 : 仕様書無しさん : 2007/11/08(木) 08:07:28
>>19
なんかSymbianの話っぽく見える
23 : 仕様書無しさん[sage] : 2007/11/08(木) 09:51:35
>>19
それはたぶん割り込みを使ってるんだろうな

割り込みというのは、ハード的にプログラムカウンタの値を書き換えてしまう機構の事。
通常はスタックに現在のPCをプッシュしてくれたりする。

コールバックは引数や変数に登録した関数を呼び出した先から呼び返してくれる機構
24 : 仕様書無しさん[sage] : 2007/11/10(土) 02:00:44
関数テーブルが分からない人は割り込みも知らないんじゃないか?
25 : 仕様書無しさん[sage] : 2007/11/10(土) 08:20:09
たぶん
>PCをプッシュしてくれたりする。
というのを読んで、ものすごい図を思い浮かべてると思う。
26 : 仕様書無しさん : 2007/11/10(土) 21:37:32
>>19
なんで割り込みを知らない人間がこの仕事できるんだ???
27 : 仕様書無しさん[sage] : 2007/11/10(土) 22:43:40
協力お願いします。
http://wwwww.2ch.net/test/read.cgi/news4vip/1194617474/
28 : 仕様書無しさん[sage] : 2007/11/11(日) 00:14:18
スタックへのプッシュ/ポップが何なのかもわからないのかもな
29 : 仕様書無しさん[sage] : 2007/11/11(日) 01:48:33
>>19
です。いろいろアドバイスいただきましてありがとうございます。
PCですが、全く意味不明でまさしく>>25の状況であります。
PICが明日届くのでコンピュータの基礎から勉強します。
このままわけのわからない状態で今の業務を続けているといずれ限界が
来ると思われますのでしっかり勉強します。
30 : 仕様書無しさん[sage] : 2007/11/11(日) 03:43:07
PICなんかより、>>22の言うようにSymbianとかiTRONとかのRTOSを覚えた方が
仕事への導入は早いと思うけど。(ソフト寄りの携帯開発なんでしょ?)

根本的な理解にはPIC弄るのが良いかもしれんけど。
31 : 仕様書無しさん[sage] : 2007/11/11(日) 07:47:54
仕事に直結はしないだろうけど、割り込みが分からないレベルならPICでいいんじゃね?
自分のやってることと、実際の機械とのつながりがイメージできないというのが悩みみたいだし。
個人的にはAVRの方が好きだけど。
32 : 仕様書無しさん : 2007/11/12(月) 00:02:48
PICで簡単な割り込みを使ったプログラムが書けました!
動きましたよ。ちょっと感動。
なんとなく根っこの部分で何をやっているかわかったような気がします。
明日からは複数のタイマ割り込みの実現を考えます。
PICである程度ハードに近い部分を理解したら実感をもってSymbianが
分かるようになるんじゃないかと期待しています。

皆様、いろいろなご意見、アドバイスありがとうございました。
33 : 仕様書無しさん[sage] : 2007/11/12(月) 00:08:29
はえぇなw
頑張ってくれ、君ならできるようになれる気がする。
34 : 仕様書無しさん[sage] : 2007/11/12(月) 11:47:40
普通、割り込みやらプログラムカウンタとかのCPUアーキテクチャの話は大学で習わんか?
学部1年の時にやったから普通は知ってるもんだと思うんだが。。
35 : 仕様書無しさん[sage] : 2007/11/12(月) 20:23:08
高校出身カワイソス(つД`)

大学は学部学科によって
教えてる教科が違うんだよ。
36 : 仕様書無しさん[sage] : 2007/11/12(月) 23:08:03
中卒乙。

高校も違うよ^^
37 : 仕様書無しさん : 2007/11/13(火) 02:54:51
>>34
ありがとうございます。そういっていただけると励みになります。

>>35
すみません。大学は文系でした。
38 : 仕様書無しさん[sage] : 2007/11/13(火) 07:40:47
H8とかM16とか R8Cとかルネサス系が正統としたら
AVRは正統だけど、
PICのアーキテクチャは少し異端だからな
割り込みベクターも1つしかないし、スタックもハードウエアスタックでメモリ上にはない。
フラグレジスタもメモリに割り当てられていて
フラグを壊さないロードストアはスワップ系の変態命令。

まあ4ビット系の変態ぞろいに比べたらそんなもんだろとは思うが・・・・

でも正統系はCコンパイラが普通に使えてしまうから、勉強という意味じゃPICって事になるのかもな
39 : 仕様書無しさん[sage] : 2007/11/14(水) 01:39:18
俺はH8使ってたな。
あとZ80、C関係ないけどw
40 : 仕様書無しさん[sage] : 2007/11/14(水) 08:59:40
SDCCとかZ80もPICも対応してるフリーのコンパイラもあるみたいね
PICはWIZ-Cっていうのが安価で性能のよいソフトシミュレータもあってターゲット無しでデバッグできたりするから使ってるが
41 : 仕様書無しさん : 2007/12/31(月) 06:55:29
なんだこのスレ
>>7でおわっとるがなwwwwwww
42 : 仕様書無しさん[sage] : 2008/01/09(水) 21:24:43
最初にやり方わかってないとCのソース見てもちんぷんかんぷんだわな
43 : 仕様書無しさん[sage] : 2008/01/15(火) 18:24:13
甥っこが専門学校でプログラムやってるが
今の子は、最初に教わるのがJavaだったりするのな……
CPUの基本的な仕組みも習ってるみたいだけどけど、上手く頭の中でイメージ出来てないみたいだ。
抽象化もいいけど、イザって時に困ったりしそうで怖い。
実際に書けなくてもいいから、アセンブラも齧った方がいいんじゃないのか……

まぁ俺も、もう時代についていけない化石だけどナー。