2012-03-07 11 views
0

は、私はCで、次の表記法について明確にする必要があります。構造体表記

私が構造を持っており、その構造体の中に、私は次のフィールドがあります。

bool (* process_builtin)(struct esh_command *);

を私はここにかなり混乱しています。..これはブール値のフィールドです。正確にはprocess_builtinは何ですか?私は既にstruct esh_commandが定義されていますが、このフィールドでこれがどこで再生されるのかわかりません。誰かが全体の意味を説明できますか?

答えて

2

これはブール値フィールドではありません。pointer to a functionstruct esh_command*で、boolです。フィールドはprocess_builtinと呼ばれます。

また書くことができます:ポインターである

process_builtin_t process_builtin; 
+0

'' bool process_builtins(struct esh_command * command) 'は正しい定義ヘッダですか? – darksky

+0

あなたは、そのプロトタイプを持つ関数へのポインタをそのメンバに格納することができますか?はい。 –

+0

この「メンバー」はどのように参照できますか? 'name_of_struct-> process_builtin'?だから 'process_builtin'関数は' - > process_builtin'メンバにtrue/falseを格納します? – darksky

1

process_builtinは、関数ポインタです。それが指す関数は、パラメータとしてesh_command*をとり、boolを返します。

+1

技術的には 'esh_command'は' struct esh_command * 'をとります。' esh_command'は 'struct'キーワードなしで' C'の型名を指定しません。 – bitmask

0

process_builtin_tはタイプとあなたのようにそのstructメンバーの定義を書くことができる場合になり、その場合に

typedef bool (* process_builtin_t)(struct esh_command *); 

を構造体esh_commandへのポインタを引数とし、bool値を返す関数に渡します。

http://www.cprogramming.com/tutorial/function-pointers.html

2

このfunctionへのポインタ。 cdeclを使用して(及びintboolを変更すること)を明らかにする:

declare process_builtin as pointer to function (pointer to struct esh_command) returning int 

このlink全体出力する固定リンクです。

+0

cdeclリンクの+1。私は良い笑いを持っていた:) – bitmask