-4
#define xyz

static xyz  myObject *__my_getitem (myObject* a, myObject *b) {
     myObject *r;
     .........
     ........
     return r;
 }
  1. とはstatic?
  2. 何をxyzしているstatic
  3. *の前にがあるのはなぜですか__my_getitem
  4. myObject* amyObject *a(の位置*)の違いは何ですか?
4

2 に答える 2

2

静的とは

「静的」で始まる関数定義のスコープは限定されています。これらは、同じソース ファイル内の関数によってのみ表示および使用できます。現在のファイルで行われている処理以外では値を持たない関数がある場合、またはスコープが限られているため、将来的に変更しても影響が少ないように使用を制限したい場合に、これを行います。

xyz は static で何をしているのか

この特定のケースでは、 xyz は何も置き換えられないため、何もしません。一般的なケースでは、コンパイラがこの関数を生成する方法を変更し、「呼び出し規約」を変更する可能性があります。つまり、xyz はコンパイラにとって何らかの意味を持ち、C 言語の一部ではありません。

__my_getitemの前にアスタリスクがあるのはなぜですか

__my_getitem 関数が myObject へのポインターを返すことを示しています。

myObject* a と myObject *a (* の位置)の違いは何ですか?

構文は柔軟であるため、何もありません。

于 2012-09-05T10:38:28.987 に答える
2

とはstatic?

異なる文脈では異なることを意味します。その意味をすべて理解するには、本を読む必要があります。この場合、関数はこのソース ファイル内でのみ使用でき、個別にコンパイルされてからリンクされたファイルでは使用できないことを意味します。

とは何xyzですかstatic

混乱を引き起こします。これは空のマクロ (最初の行で定義) であるため、プログラムをコンパイルする前に、プリプロセッサはそれを何も置き換えません。

*の前にがあるのはなぜですか__my_getitem

*型が型をポインターに変更した後。これは、関数が へのポインターを返すことを意味しますmyObject。(ちなみに、2_文字連続した名前を宣言するべきではありません。そのような名前は予約されています。)

myObject* amyObject *a(*の位置)の違いは何ですか?

何もありません。空白は、トークンを区切るために必要な場合を除いて、プログラムの意味を決して変更しません。これら 2 つのスタイルの意味論的な意味合いをめぐって聖戦を繰り広げる人もいますが、言語は気にしません。

于 2012-09-05T10:40:22.633 に答える