Hello, C!

Harvard CS50
1 уровень , 11 лекция
Открыта

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

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

Виртуальная лаборатория CS50 CS50 IDE
Кликаем по файлу дважды. Открывается редактор кода gedit (также gedit можно вызвать из командной строки терминала просто набрав слово gedit). В поле справа набираем текст. В правой части окна CS50 IDE набираем точь-в-точь такой текст, как вы видите ниже. Да, его можно скопировать, но полезнее — набрать. 
#include &ltstdio.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.

Комментарии (38)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Yulia Уровень 1
1 декабря 2023
а если я работаю в Visual studio, и он не видит <stdio.h> пишет: не удается открыть источник файл "stdio.h". Выполните команду "Выбрать конфигурацию IntelliSense…" дальше я не понимаю, какую конфигурацию необходимо выбрать. не знаю все ли данные дала для описания проблемы. надеюсь да
hidden #3333493 Уровень 2
6 августа 2023
Встановив Виртуальная лаборатория CS50. Але не дало авторизуватися у DropBox - чиста сторінка. А при запуску перевірок коду у файлі пише - нема підключення до інтернет. Не зрозуміло - що з цим робити?
Wer Yut Уровень 1
27 сентября 2023
Проверка кода, у меня сработало это check50 --local cs50/problems/2018/x/hello Есть ещё более новые версии(в комментариях следующей страницы), 2015 которая в курсе не работает уже
OksanaS Уровень 24
22 сентября 2022
Ураааа! получилось, надеюсь, что все верно. спасибо большое!!!
Максим Леурдо Уровень 1
2 августа 2022
~/Documents/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 что это значит?
10 ноября 2021
Команду 1s оно не распознает, однако "hello, world" выводит.
Woronokin Уровень 1
11 ноября 2021
не 1s, а ls ls - сокращенное слово list (список), об этом говорится в предыдущей лекции
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. А это что значит, кто-нибудь знает?
Александр Уровень 1
12 сентября 2020
сбросьте лучше свой код, так проще разобраться, если уже не разобрались
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
earthling-t Уровень 0
13 мая 2020
Тут видимо, ответа не дождешься(. После того как введете команду "make hello" и увидите то, что и у меня выше, продолжайте ввести "./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 . Баг или не баг?
Виктор Уровень 0
14 мая 2020
Это не баг. Это результат компиляции.
Шолпан Уровень 0
21 мая 2020
Здравствуйте, прочитайте ниже, комментарии. У многих встречалась такая ошибка, и у меня тоже. После ошибки продолжила писать код и все получилось Баг это или нет, сама не поняла.