2012-04-20 3 views
4

임베디드 시스템에서 작업 중이므로 연결된 목록을 구현해야합니다. C의 링크 목록 노드, 프로토 타입 구조체

그래서 나는 노드 나는 이것이 잘 작동 PC (GCC)에 생각

typedef struct A 
{ 
    ... //some data 
    struct A *next; 
    struct A *prev; 
} A; 

을 구성하는 구조체를 사용했다. 그러나 임베디드 시스템 컴파일러는 "식별자 A가 선언되지 않았습니다"라고 불평합니다 ...

어떤 솔루션이 가장 좋습니까?

typedef struct A A; 

struct A { 
    ... //some data 
    struct A *next; 
    struct A *prev; 
}; 
+1

호기심이 아닌 임베디드 컴파일러를 사용하고 있습니까? – Lundin

답변

10

당신은 별도의 앞으로 선언 구조체의 추가해야합니다 :

+0

정말 고마워요! 그것은 작동하고 그 정확히 내가 무엇 이후 –

1

당신은 그것을 나눌 수

struct A; 
typedef struct A 
{ 
    ... //some data 
    struct A *next; 
    struct A *prev; 
} A; 

어떤 컴파일러는 당신의 정의 당신이 그것을 게시 방법을 수행을하지만, 별도의 forward 선언이 필요한 이전 컴파일러를 보았습니다. 이는 구형 표준 또는 불완전한 표준 구현과 관련 될 수 있습니다. 실제로 컴파일러가 다른 5 개의 플랫폼에서 실행되는 코드를 작성해야하는 프로젝트에서 구조체의 typedef와 별도로 전달 선언을 사용하는 것이 회사 전체의 코딩 표준 요구 사항이었습니다.

+0

정말 고마워요! 그게 바로 내가 한 일이야! –

0

원래 코드는 잘 컴파일해야합니다. 아마도 비표준 컴파일러를 사용하고있을 것입니다. 다른 제안 사항의 대안으로 다음 코드를 사용해보십시오.

typedef struct a 
{ 
    ... //some data 
    struct a *next; 
    struct a *prev; 
} A; 

이렇게하면 앞으로 선언 할 필요가 없습니다.

+0

오 btw, 당신이 C + + 컴파일러에서 원래 코드를 컴파일하면 작동하지 않습니다. C++는 C와는 다른 구조체 네임 스페이스를 처리합니다. – Lundin