1

重複の可能性:
構造体の変数名の前のドットはどういう意味ですか?

const struct file_operations generic_ro_fops = {
    .llseek     = generic_file_llseek,
    .read       = do_sync_read,
    // ....other stuffs
};

私の質問は:

1)の意味.llseekと使用方法....file_operations構造体の定義は次のとおりです。

2)上記の構造体で:前にドットを付けずにllseek = generic_file_llseek ;ポインタがllseek指すようにするには、次のように言うことができますか?//私の貧弱な英語でごめんなさいgeneric_file_llseek.llseek

struct file_operations {
    loff_t (*llseek) (struct file *, loff_t, int);
    ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
    //....other stuffs
}
4

4 に答える 4

2

これは、c99 で導入された特別な構造初期化構文です。

.llseek = generic_file_llseek, 構造体 initializer 内にある場合、これは、構造体の先頭からのオフセットに関係なく、この特定のメンバーを初期化していることを意味します。

または、指定子なしで初期化を使用できますが、構造体の対応するフィールドが宣言されているため、初期化子を正確な順序で配置する必要があります。

const struct file_operations generic_ro_fops = {
    generic_file_llseek, // this initializes llseek member
    do_sync_read, // this initializes read member
    // ....other stuffs
};
于 2012-10-24T15:07:59.840 に答える
1

これは指定イニシャライザと呼ばれます。構造体の正確なメンバー/フィールドを初期化しています。

2.「llseek = generic_file_llseek ;」とだけ言ってもいいですか。上記の構造体で、ポインター llseek が、ドット '.' を配置せずに generic_file_llseek を指すようにします。llseekの前に?

いいえ

メンバーを初期化するには、次のようにします。

const struct file_operations generic_ro_fops = {
    generic_file_llseek,
    do_sync_read,
    // ....other stuffs
};

ただし、この場合、メンバーが構造内に配置されるように、すべてを順番に初期化する必要があります。指定された初期化子は、構造体フィールドの一部だけを初期化する場合に非常に役立ちます。

この外部構造のようなものを使用できます。

generic_ro_fops.llseek = generic_file_llseek;
于 2012-10-24T15:07:14.070 に答える
0

「.」の意味 その構造体では、指定された初期化子と呼ばれます。構造体では、それぞれの「.」初期化する必要がある構造体のメンバーを表すため、デジグネータと呼ばれます。

于 2012-10-24T15:08:12.647 に答える
0

意味

1) .llseek の意味と使用方法 ....file_operations 構造体の定義は以下のとおりです。

これは C99 の機能です:指定初期化子。を使用する.と、構造体の特定のフィールドを初期化できます。constここで、修飾子の構造原因を初期化する必要があります。

lseek構造定義でとreadがこの順序である場合、この指示子は省略できます。

const struct file_operations generic_ro_fops = { 
    generic_file_llseek, 
    do_sync_read 
};

この最後の方法は保守性があまり高くありません (構造体のフィールドの順序を変更すると、すべての初期化コードを変更する必要があります)。

その他の方法

2) 私はただ言うことができます: llseek = generic_file_llseek ; 上記の構造体で、ポインター llseek がドットを入れずに generic_file_llseek を指すようにします。llseekの前に?//下手な英語でごめんなさい

いいえ、できません。正しい構文ではないからです。

参考文献

C11 (n1570)、§ 6.7.9 初期化

指定子がフォームを持っている場合

. identifier

その場合、現在のオブジェクト (以下で定義) は構造体または共用体型を持ち、識別子はその型のメンバーの名前でなければなりません。

于 2012-10-24T15:07:25.830 に答える