2011-01-31 3 views
1

Я не уверен, как объявить глобальный союз в C. Ниже мой код (все это не является основным).Объявление глобальных объединений в C

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; 
} 

С этим, я получаю сообщение об ошибке:

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

Как я могу объявить союз таким образом, что я могу использовать его в качестве типа возвращаемого значения для функции?

Заранее благодарю вас! Andrew

+0

Не следует читать typedef union DictVal { int iVal; char * cVal; } DictVal; ? – blueberryfields

+2

Вы уверены? Только этот фрагмент прекрасно компилируется. – ephemient

+1

@blueberryfields - Нет, это просто анонимный союз, который является 'typedef'-ed в имя. –

ответ

5

Вы опечатали.

Существует DictVal typedef, но вы решили использовать DictValue по определению.

2

Ошибка орфографии.

Вы заявили:

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

но пытаются использовать

DictValue find(char* key) 
{ 
    DictVal a; 

Заменить DictValue с DictVal.

Также сделайте основной возврат чего-нибудь. Обычно это должно быть 0.

Благословит Бог!

+0

К сожалению, C99 кодифицировал исключение, которое C++ 98 также дает main() ; ему не нужно явно возвращать значение, а выход из конца main() эквивалентен возврату 0 или EXIT_SUCCESS. Но я согласен, лучше использовать явный возврат. –

+0

О, правда? Но не следует ли main() объявляться как пустоту? Кроме того, тогда моя версия gcc не соответствует требованиям (или этот флаг отключен в параметрах IDE), потому что он возвращает 1 с этим кодом. – Trinidad

+0

@ Джонатан Леффлер - стандарт также определяет 'gets()', но это не значит, что вы должны использовать его когда-либо. –

Смежные вопросы