2013-08-28 5 views
1

Я пытаюсь скомпилировать файлы C от http://cocoadevcentral.com/articles/000081.php, которые я буквально копировал и вставлял, поэтому я не верю, что существует какая-либо синтаксическая ошибка, но я все равно получаю ошибки. Я не знаю, что я делаю неправильно. Я использую текстовый редактор TextWrangler для сохранения моей записи и сохранения моих файлов. У меня Xcode загружен вместе с его терминальными инструментами, так что это тоже не должно быть проблемой.Компиляция с gcc и терминалом

Вот ошибки:

testc4.c:4: error: expected identifier or ‘(’ before ‘)’ token 
song.c:5: error: function definition declared ‘typedef’ 
song.c:5: error: return type is an incomplete type 
song.c: In function ‘make_song’: 
song.c:6: error: ‘Song’ undeclared (first use in this function) 
song.c:6: error: (Each undeclared identifier is reported only once 
song.c:6: error: for each function it appears in.) 
song.c:6: error: expected ‘;’ before ‘newSong’ 
song.c:8: error: ‘newSong’ undeclared (first use in this function) 
song.c:12: warning: ‘return’ with a value, in function returning void 
song.c: At top level: 
song.c:15: error: expected ‘)’ before ‘theSong’ 

Вот команда, я использую для компиляции моей программы:

gcc testc4.c song.c -o testc4 

В случае необходимости я могу отправить файлы, но они копируются прямо из руководство. Я назвал свой тестовый файл testc4.c вместо того, что он хотел.

Edit: (я понял, что вы должны были бы код)

testc4.c файла:

#include <stdio.h> 
#include "song.h" 

main() 
{ 
    Song firstSong = make_song (210, 2004); 
    Song secondSong = make_song (256, 1992); 

    Song thirdSong = { 223, 1997 }; 
    display_song (thirdSong); 

    Song fourthSong = { 199, 2003 }; 
} 

song.c файла:

#include <stdio.h> 
#include "song.h" 

Song make_song (int seconds, int year) 
{ 
    Song newSong; 

    newSong.lengthInSeconds = seconds; 
    newSong.yearRecorded = year; 
    display_song (newSong); 

    return newSong; 
} 

void display_song (Song theSong) 
{ 
    printf ("the song is %i seconds long ", theSong.lengthInSeconds); 
    printf ("and was made in %i\n", theSong.yearRecorded); 
} 

song.h файл

typedef struct { 
    int lengthInSeconds; 
    int yearRecorded; 
} Song; 

Song make_song (int seconds, int year); 
void display_song (Song theSong); 

Это прямые скопированные fr о сайте. Я набрал их в первую очередь, но когда это не сработало, я скопировал и вставил их.

+1

Вы можете вставить то, что вы собираете. Что-то явно не так. – nneonneo

+0

Нам нужно увидеть хотя бы строки 1-15 'song.c', а также любой заголовок, который вы написали и который включен в эти строки. Посмотрите, как создать SSCCE ([Short, Self-Contained, Correct Example] (http://sscce.org/)). Например, нам не нужны комментарии, если предоставленный вами код воспроизводит сообщения об ошибках. –

+0

Дважды проверьте, что вы используете LF в качестве разделителя строк. В противном случае это может вызвать проблемы. Я попробовал это, и эта командная строка компилируется из коробки на моей ОС X 'gcc 4.2.1' –

ответ

0

Возможно, вы просто должны изменить:

main()

в

void main()

+1

main должен возвращать int. – zubergu

+0

Это правильно. Но этот принцип ничего не возвращает. Это наименьшие модификации, которые могут избежать ошибки компиляции. – ztik

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