2

私の IDE はC-free 5.0で、コンパイラはMinGWです。

「list.h」、「list.c」の 2 つのファイルがあります。

list.h:

typedef int elementType; 
#ifndef _LIST_H
#define _LIST_H

struct node;

typedef struct node* ptrToNode;
typedef ptrToNode list;
typedef ptrToNode position;

list makeEmpty(list l);
#endif 

list.c:

#include <stdio.h> 
#include "list.h"
#include <stdlib.h>

struct node{
    elementType element;
    position next;
};

list makeEmpty(list l){
if(l == NULL){
    //delete list
}
l = malloc(sizeof(struct node));
if(l == NULL){
    printf("fail to malloc memory");
    exit(-1);
}
l->next = NULL;
return l;
}

このファイルをコンパイルしようとすると、エラーが発生しました

"list.c:5: redefinition of 'struct node'"

次に、すべての「 node」を「Node 」に置き換えると、驚くべきことが起こりました! コンパイルOK!私は本当にこれを理解できません。これは C ライブラリに関連している可能性がありますか?

4

2 に答える 2

1

構造体と typedef に関することは、少なくとも私にとってはかなり混乱する可能性があります。構造体は、C++ 対応コンパイラを使用するときに既に型を作成しているため、ステートメントを再構築する必要があります。前方宣言の代わりに、定義をヘッダーにプッシュします。この1つの「typedef struct node* ptrToNode;」です。私が間違っていなければ、二重宣言を作成します。ここには、typedef と構造体に関するトピックについて議論している優れた記事がいくつかあります。幸運を

于 2012-06-25T09:59:30.467 に答える