2

好奇心からmain()、C の内部で関数を定義するのはお粗末だと考えられますか?

私が書いている現在のプログラムに関する私の問題は、内部で定義されている構造体へのポインターが20個あることですmain()(構造体自体ではなく、ポインターは他のファイルにあります)。さまざまなパラメーターで数回呼び出され、ポインターのいずれかを変更する機能が必要です。私が見つけた唯一の解決策 (私は C の初心者です) はmain()、ポインターを変更するための正しいスコープを持つ関数を内部で定義することでした。

4

3 に答える 3

5

ネストされた関数 (関数内の関数) は GNU のみの拡張機能であり、通常の C 標準の一部ではありません。他のコンパイラはこれをコンパイルできません。このため、ネストされた関数の使用を強くお勧めしません。

構造体と関数を外部で宣言します。その後、いつでもデータ構造へのポインターを関数に渡すことができます。

struct s {...};

void foo(struct s *, ...);

int main() {

  struct s mystruct;
  foo(&mystruct, ...);

}
于 2014-04-08T13:19:50.890 に答える
5

GCC では許可されていますが、そのコンパイラに固有の非標準の拡張機能であるため、コードは他のコンパイラではコンパイルされません。

于 2014-04-08T13:20:03.643 に答える
0

Gcc コンパイラを使用すると、他のメソッド内でメソッドを定義できます (これは実際には Gnu 拡張です)。しかし、通常、それは悪い習慣です。

あなたの場合、これがメソッドがこの特定のタイプについて知る唯一の方法です。ただし、型を外部にして、この型を通常の方法で (他のメソッドの外で) 使用するメソッドを宣言することをお勧めします。

于 2014-04-08T13:22:20.473 に答える