2011-01-31 7 views
1

C에서 전역 유니온을 선언하는 방법을 잘 모르겠습니다. 아래 코드는 모두 주 외부에 있습니다.C에서 전역 유니온 선언

test.c:35: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘find’. 

어떻게 내가 함수에 대한 반환 형식으로 사용할 수있는 방식으로 노동 조합을 선언 할 수 있습니다 :이

typedef union{ 
    int iVal; 
    char* cVal; 
} DictVal; 
struct DictEntry{ 
    struct DictEntry* next; 
    char* key; 
    DictVal val; 

    int cTag; 
}; 

DictVal find(char* key); 

int main() 
{ 
    struct DictEntry dictionary[101]; 
    //printf("Hello"); 
} 

DictValue find(char* key) 
{ 
    DictVal a; 
    a.iVal = 3; 
    return a; 
} 

, 나는 오류가 나타납니다?

미리 감사드립니다. 앤드류

+0

읽지 말아야 할 내용 typedef union DictVal { int iVal; char * cVal; } DictVal; ? – blueberryfields

+2

정말요? 그 발췌문만으로도 잘 컴파일됩니다. – ephemient

+1

@blueberryfields - 아니, 그냥 익명의 조합인데 'typedef'라는 이름이 붙어 있습니다. –

답변

5

당신은 타이핑했습니다.

DictVal typedef가 있지만 정의에 DictValue을 사용하려고했습니다.

2

맞춤법 오류입니다.

당신은 선언 :

typedef union{ 
    int iVal; 
    char* cVal; 
} DictVal; 

는하지만 DictVal와 DictValue 교체

DictValue find(char* key) 
{ 
    DictVal a; 

를 사용하려고합니다.

또한 메인 리턴을 만드십시오. 일반적으로 0이어야합니다.

신의 축복!

+0

슬프게도 C99은 C++ 98이 main()에주는 면제를 체계화했습니다. ; 명시 적으로 값을 반환 할 필요가 없으며 main()의 끝에서 빠져 나오는 것은 0 또는 EXIT_SUCCESS를 반환하는 것과 같습니다. 그러나 나는 동의한다. 명백한 수익을 사용하는 것이 낫다. –

+0

오, 정말요? 하지만 main()을 void로 선언해서는 안됩니까? 또한, 그 코드와 함께 1을 반환하기 때문에 내 gcc 버전은 호환되지 않습니다 (또는 IDE 옵션에서이 플래그를 사용할 수 없습니다). – Trinidad

+0

@Jonathan Leffler -이 표준은'gets()'도 지정하지만 그렇다고해서 반드시 사용해야하는 것은 아닙니다. –