1

私たちの大学の宿題提出システムは、プログラミングのスキルに焦点を当てる代わりに、提出物にばかばかしく非現実的な要件を設定しています。これを回避するために、プリプロセッサとその他のいくつかのトリックを使用して、宿題のソリューションを 1 つのファイル (要件の 1 つ) にマージします。

もう 1 つの要件は、警告が発生して-Wpedanticはならず、有効になっていることです。関数呼び出しで使用できるように、 structinを前方宣言します。node.h

typedef struct Edge Edge;
// So that I can do:
typedef struct Node {
    void* value;
    int name;
    Array* edges;
} Node;
Edge* node_find_edge(Node* node, NodeName target);

別のファイルでは、edge.h完全な定義は次のように読み取られます。

typedef struct Edge {
    size_t cost;
    NodeName A;
    NodeName B;
} Edge;

次の警告が表示されます。

main.c: At top level:
main.c:779:3: warning: redefinition of typedef 'Edge' [-Wpedantic]
 } Edge;
   ^
main.c:753:21: note: previous declaration of 'Edge' was here
 typedef struct Edge Edge;

私が言ったようにファイルがマージされているので、「main.c」のことで混乱しないでください。

どの前方宣言が正しく、警告はありませんか?

4

1 に答える 1