私たちの大学の宿題提出システムは、プログラミングのスキルに焦点を当てる代わりに、提出物にばかばかしく非現実的な要件を設定しています。これを回避するために、プリプロセッサとその他のいくつかのトリックを使用して、宿題のソリューションを 1 つのファイル (要件の 1 つ) にマージします。
もう 1 つの要件は、警告が発生して-Wpedantic
はならず、有効になっていることです。関数呼び出しで使用できるように、 struct
inを前方宣言します。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」のことで混乱しないでください。
どの前方宣言が正しく、警告はありませんか?