[表示 : 全て 最新50 1-99 101- 2chのread.cgiへ]
Update time : 05/09 20:17 / Filesize : 49 KB / Number-of Response : 186
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け(入門篇) Part 32



1 名前:処理系定義の名無しさん mailto:sage [2008/07/09(水) 11:00:48 ]
言語の入門者向け解説スレです。

教えて欲しいのではなく宿題を丸投げしたいだけなら宿題スレへ行ってください。
 C/C++の宿題を片付けます 110代目
 pc11.2ch.net/test/read.cgi/tech/1213796455/

・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・開発環境や動作環境も晒すと答えが早いかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
C言語なら俺に聞け(入門篇) Part 31
pc11.2ch.net/test/read.cgi/tech/1214569903/
過去スレ
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

159 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 19:29:24 ]
>>158
本屋にいって入門書を立ち読みするとか?

160 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 19:45:23 ]
>>159
elements.cを見ていて思ったのですが、
XML_ParserCreate
XML_SetUserData
XML_SetElementHandler
XML_Parse
XML_ParserFree
これらの関数はelements.c内で使われている関数ですが、
どのみちハンドラを呼び出すためには、上記五つの関数内でXML_Char **attsの部分を動的に確保する必要があると予測出来ます。
パラメーターから辿るのは今の私には無理があります。
XML_Char **attsを確保している部分の関数名を教えて頂きたいです。

161 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 19:49:12 ]
>>160
配列が理解できてるなら、ポインタも理解できると思うんだけど
基本に立ち返って、自力で**の動作確認できるプログラムを作る方がいいと思うけど

162 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 19:52:42 ]
>>161
どこでXML_Char **attsを確保する関数が呼び出されているのかが分からないのです。

163 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 19:55:11 ]
なんか面倒そうな話してるなあと思ってソース拾ってきたんだが
examples/elements.c の話してんの?

164 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 19:56:59 ]
>>162
XML_Char **attsをパラメータにしてる関数を検索すればいいのでは?
何が分からないのか俺には理解できない。

165 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 19:59:55 ]
>>163
そうです。
>>164
検索してもわからなかったのであなたに質問しています。
XML_Char **attsの部分を動的に確保している場所が分かりません。

166 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 20:00:45 ]
>>165
じゃ、俺はおりた。

167 名前:163 mailto:sage [2008/07/10(木) 20:00:49 ]
lib/xmlparse.c 2653は?



168 名前:163 mailto:sage [2008/07/10(木) 20:04:01 ]
ああ、関数名が欲しいのか。storeAtts

169 名前:163 mailto:sage [2008/07/10(木) 20:13:52 ]
まだ必要かどうかわからないが

REALLOCマクロの定義は lib/xmlparse.c 552 で
#define REALLOC(p,s) (parser->m_mem.realloc_fcn((p),(s)))

上記関数ポインタの設定はparserCreateでやってる。

170 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 20:22:43 ]
>>167
レスありがとうございます。
ATTRIBUTE *temp;
attsSize = n + nDefaultAtts + INIT_ATTS_SIZE;
temp = (ATTRIBUTE *)REALLOC((void *)atts, attsSize * sizeof(ATTRIBUTE));
なるほど、ATTRBUTE構造体をここで再確保しています。
parserCreate()内でも確保しているようですが、
一番気になるのは、
const char *name;
const char *vlauePtr;
const char *valueEnd;
をどこで確保しているのか、ここが分かりません。
>>168
今からstoreAtts();を見てみます。
>>169
そこは以前に見たものですが、先程再確認させて頂きました。
ありがとうございます。

171 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 20:44:35 ]
申し訳ありません、言い忘れました。
const char *name;
const char *vlauePtr;
const char *valueEnd;
はATTRBUTE構造体のメンバです。

172 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 20:48:08 ]
あれ?それも場所を教えてっていってたの?
storeAttsでその構造体を確保したんだからその後attsを使用してるとこ追ってけばすぐ見つかると思うけど。

173 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 20:53:08 ]
と思ったけどパラメータでもらってたりするね。
たいして見てなくて申し訳ない

174 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 21:05:38 ]
>>173
いえ、感謝しています。
今storeAtts()を見ています。
appAtts = (const XML_Char **)atts;これ以降で、appAttsが引数になっている関数はstoreAtts内に、
XmlGetAttributes()
getAttributeId()
storeAttributeValue()
poolStoreString()
addBinding()
上記の関数がありました。
私が気になったのは、名前からして、poolStoreString()です。
なので、/* String Pool */STRING_POOL;構造体を調べてみようと思います。

175 名前:162 mailto:sage [2008/07/10(木) 21:10:51 ]
なんか名前忘れてた。

とりあえず解析するならctagsというツールと、そのツールの出力ファイルを
活用可能なエディタを手に入れるといいと思う。
この関数の定義の場所へジャンプ、ということができるようになったりするよ。

あと、そもそも何で解析してるの?勉強?

176 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 21:15:37 ]
>>175
その通り、勉強です。

177 名前:162 mailto:sage [2008/07/10(木) 21:27:47 ]
>>176
なるほど。がんばってね。



178 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 21:39:12 ]
xmlを実際に解析させてみました。解析して分かった事は、
xmlparse.c内のpoolInit関数、poolCopyString関数、poolGrow関数、poolAppend関数、
poolStoreString関数、poolClear関数、poolDestroy関数が呼び出されていました。
ATTRBUTE構造体各メンバの動的確保はここで行われているのでは無いかと予想し、
今からここを重点的に調べていこうと思います。
皆様からの回答、本当にありがとうございます。
それでは、

179 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 09:42:38 ]
ctagsのほかに、cscopeもあるでよ。
最近どこかで読んだけど、silentbobとかいうのもなかなかいいそうな。
まぁ、grepでしこしこ調べるのも、まぁアリといえばアリな気がするけど。


180 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 16:25:52 ]
cで例外処理書くときはgoto文で書いたほうがいいですか?

181 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 16:37:09 ]
私は、例外処理でもgotoは使わない。

182 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 16:44:44 ]
setjmp, longjmp のペア?

183 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 17:01:50 ]
gotoやjmp系は総て無視していたので、調べてみた。

準拠
setjmp() は C89, C99, POSIX.1-2001 で規定されている。 sigsetjmp() は
POSIX.1-2001 で規定されている。
注意
POSIX は、 setjmp() がシグナルコンテキスト (signal context) を保存すべきかどうか
を規定していない (System V では保存しない; 4.3BSD では保存する; 4.3BSD には
シグナルコンテキストを保存しない関数 _setjmp もある)。シグナルマスクを保存したい
のなら、 sigsetjmp() を使うこと。 setjmp() や sigsetjmp() を使うと、プログラムは理解
しづらく、保守しにくいものになる。別の方法が可能なら、それを使うべきである。

とあるね、やっぱり私は使わないか。C++の例外は使ってる。

184 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 17:33:55 ]
>>180
いいとか悪いとかいうことはない
gotoの利点と欠点をよく考えた上で
必要かどうかを自分で判断すること

185 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 17:44:28 ]
>>184
最初は使わないようにして、後々使うパターンを覚えたほうが有益だと思うがいかが?






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<49KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef