undefined

Hello, C!

Harvard CS50
1 уровень , 11 лекция
Доступна

Наконец-то эта минута наступила! Начинаем программировать. Внутри нашей папки pset1 создаем файл под названием hello.c (расширение обязательно), открываем в новой вкладке (думаем, вы помните, как это делать из предыдущего параграфа). 

ВАЖНО! Буквы должны быть строчными, Linux чувствителен к регистру. Hello.c и hello.c — разные файлы. 

Виртуальная лаборатория CS50 CS50 IDE
Кликаем по файлу дважды. Открывается редактор кода gedit (также gedit можно вызвать из командной строки терминала просто набрав слово gedit). В поле справа набираем текст. В правой части окна CS50 IDE набираем точь-в-точь такой текст, как вы видите ниже. Да, его можно скопировать, но полезнее — набрать. 
#include <stdio.h>
int main(void)
{
    printf("hello, world\n");
}

Буквы разного цвета потому, что в Gedit и CS50 IDE работает подсветка синтаксиса. Она выделяет цветом блоки текста для лучшей читаемости. В самом файле цвета не сохраняются, они видны только в IDE или специальном редакторе кода. То есть, если текст разноцветный, то, скорее всего, IDE и редактор понимают язык Cи, а о том, что это именно Cи, вы сообщили в расширении файла (*.c). Если бы вы назвали этот же файл hello.txt, текст был бы одноцветный. 

Убедитесь, что вы напечатали всё ровно так, как в примере, иначе поймаете первый баг=). Снова обращаем ваше внимание на разницу между строчными и прописными буквами. Символ \n переводит курсор на следующую строку, и введенный следом текст не слипнется с выведенным программой. Ах да, и о точке с запятой (;) не забывайте. Это важный разделитель операторов программы, Cи без них работать не захочет. 

Нажмите File > Save (или комбинацию command- или Ctrl-s). Заметили, что звездочка (или красный круг в CS50 IDE) перед названием файла исчезли? Если да, значит изменения сохранились. Кликните в любом месте по терминальному окну под вашим кодом и убедитесь, что вы внутри ~/Dropbox/pset1 (или ~/workspace/pset1).

Убедимся, что файл hello.c находится ровно там, где должен. Набираем

ls

и жмем Enter. Вы видите hello.c? Если нет, вернитесь на пару шагов назад и создайте файл в нужной директории еще раз. … Теперь наступает торжественный момент: скрещиваем пальцы и… печатаем в терминальной строке gedit или в CS50 IDE: 

make hello

и скрещенными же пальцами жмем Enter. Именно hello, не hello.c. Если всё, что вы после этого действа перед собой увидели — вторая активная строка, которая выглядит точь-в-точь, как предыдущая, значит, получилось! Ваш исходный код был переведен в машинный или объектный код (то есть, в последовательности 0 и 1). Теперь этот код можно выполнить (то есть запустить программу!). Для этого печатаем: 

./hello

в командной строке, жмем Enter. Если вы не меняли текст заключенный в кавычки, ниже вы увидите:

hello, world

Если вы теперь наберете команду 

ls

и нажмете Enter, вы увидите новый файл hello, наряду с hello.c и hello.txt. У первого hello, должна быть звездочка после имени, которая сигнализирует о том, что это исполняемый файл, то есть такой, с помощью которого вы запускаете программу. 

Баги?

Если после попытки выполнить команду make, вы увидели ошибки, пришло время первой отладки! Надписи вроде «expected declaration» означают, что вы где-то допустили опечатку. Сверьте код с приведенным выше еще раз, только будьте очень внимательны ко всем деталям. 

Внимание! Описания ошибок выдаются на английском. Если непонятно, воспользуйтесь поисковиком, Google Translate или задайте вопрос в комментарии.

Как только вы исправили ошибки, не забудьте сохранить ваш код с помощью File > Save (или command- или Ctrl-s), снова щелкнете по внутренней части терминального окна и наберите 

make hello

(Только предварительно убедитесь, что вы находитесь в внутри директории pset1). Если больше ошибок нет, запускайте программу, набирая команду 

./hello

По идее перед вами должна возникнуть заветная фраза, заключенная в кавычки оператора printf, который командует «напечатай». 

Если окно терминала кажется вам слишком маленьким, кликните по иконке заключенного в окружности плюса (+), расположенной рядом с hello.c.

Комментарии (33)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
Виталий Лебедев Уровень 1 Минск
12 декабря 2020
всё время выдавало ошибку, пока не сделал сначала cd pset1/, потом ls, ну а потом заработало и make hello и ./hello. Будьте внимательны!
Patiece Уровень 1 Россия
4 декабря 2020
Для того чтобы в терминале на cs50 IDE перейти в необходимую директорию, исходя из того где находится hello.c, я ввел: cd src1w/pset1 после этого ls у меня было так: ~/src1w/pset1/ $ ls hello* hello.c у меня появился кроме hello.c еще текстовой файл hello, но все вроде нормально сработало, как надо
Александр Уровень 1 Минск
29 августа 2020
после make hello нужно писать ./hello, теперь разобрался: make hello программа компилируется ./hello программа запускается
Konstantin Уровень 0
28 августа 2020
* No rule to make target 'hello'. Stop. А это что значит, кто-нибудь знает?
earthling-t Уровень 0 Узбекистан
12 мая 2020
Что за баг? Кто-нибудь знает как исправить? Помогите, пожалуйста! ~/pset1/ $ ls hello.c hello.txt ~/pset1/ $ make hello clang -ggdb3 -O0 -std=c11 -Wall -Werror -Wextra -Wno-sign-compare -Wno-unused-parameter -Wno-unused-variable -Wshadow hello.c -lcrypt -lcs50 -lm -o hello
Anton Уровень 0
5 мая 2020
Урааа!) Я программист!)))
Шолпан Уровень 0 Mansfield
2 мая 2020
Спасибо,Вам огромное, JavaMan Урааааа, получилось. Очень благодарна Вам
Шолпан Уровень 0 Mansfield
1 мая 2020
Помогите, пож, не могу дальше работать
Шолпан Уровень 0 Mansfield
27 апреля 2020
Здравствуйте. Ребята, подскажите, пожалуйста, у меня выходит ошибка: make: *** No rule to make target 'hello'. Stop. Из-за того, что у меня нет папки ~/workspace?
Павел Клименко Уровень 7 Красноярск Россия
12 февраля 2020
Обязательно должно быть ~/workspace/pset1 ? У меня ~/pset1