Всем привет. Начнем наш первый урок. Начинать изучение программирования с вывода информации «Привет, Мир» стала уже традицией. И мы так же поступим.
Создадим файл main1.c где вам удобно, например на рабочем столе. Откройте файл в текстовом редакторе. Наберите следующий код (советую вам не копировать, а написать вручную, чтобы лучше запомнить):
1 2 3 4 5 6 7 |
/*Наша первая программа на Си*/ #include int main () { puts ("Hello, World!"); return 0; } |
Теперь давайте рассмотрим каждую строку по отдельности. Здесь в первой строке комментарий помещенная в скобки /* */. При компиляции компилятор не обращает внимания на комментарии. Комментарии используется что бы не забыть что за программа или какую функцию выполняет. Так же комментарии используются в случаи если над проектом работают и другие лица кроме вас.
Компилятор — это программа которая переводит исходный код понятный человеку, в код понятный машине (компьютеру). Процесс перевода называется компиляция.
А вторая строка это препроцессорная директива которая подключает библиотеку в которой содержится функции puts, return, printf и другие. Во время компиляции, компилятор вставит туда текст из библиотеки .
int main () — это тело программы с которой начинаются все программы на Си. В программе не может быть более одной функции main.
puts и return — это операторы которые описаны в . Puts используется для вывода информации в поток stdout (stdout — по умолчанию настроен на экран, то есть информация выводится на монитор). А return (переводится как определять) завершает исполнение программы и возвращает нулевое значение в среде исполнения. Использование оператора return обязательна, иначе программа «зависнет» в памяти компьютера.
Ну давайте скомпилируем же нашу программу. Для этого сохраните внесенные изменения. Откройте терминал (Ctrl+Alt+T). Выполните следующую команду:
gcc -o [имя выходного файла] '[путь к компилируем файлу]'
Запускаем:
./[имя выходного файла]
Например:
gcc -o prog '/home/ubuntuforlife/Рабочий стол/main.c'
Запуск:
./prog
Увидим следующий результат:
Hello, World!
Поздравляю, вы написали и скомпилировали первую программу.
Попробуйте заменить оператор puts на printf.
1 2 3 4 5 6 7 |
/*Меняем puts на printf*/ #include int main () { printf ("Hello, World!"); return 0; } |
Сохраните и скомпилируйте. Результат будет тем же. Но эти два оператора отличаются, и чем же рассмотрим в дальнейшем.
Теперь проведем небольшой эксперимент. Удалим из исходника (это файл с кодом программы, в нашем случаи main.c) препроцессорную директиву #include и скомпилируем любую из наших двух программ. В первом случаи результат не изменится, а во втором вылетит ошибка:
nadir@nadir-VGN-TT1RVN-X:~$ gcc -o prog '/home/nadir/Рабочий стол/main.c' /home/nadir/Рабочий стол/main.c: В функции «main»: /home/nadir/Рабочий стол/main.c:3:5: предупреждение: несовместимая неявная декларация внутренней функции «printf» [по умолчанию включена] nadir@nadir-VGN-TT1RVN-X:~$
Так зачем нам нужен заголовочный файл ? В этом файле приведены описания и определения для правильного использования тех функций стандартной библиотеки, которые нужны для ввода и вывода. Но ведь программа компилируется и работает так, как нужно. Для того чтобы доказать, что нужно подключать библиотеку рассмотрим следующие два примера. С подключенной библиотекой и без :
1 2 3 4 5 |
int main () { puts ("Hello,","ubuntuforlife.ru"); return 0; } |
И второй вариант:
1 2 3 4 5 6 7 |
#include int main () { puts ("Hello,","ubuntuforlife.ru"); return 0; } |
В первом случаи все пройдет без ошибок, но на экран будет выведен текст только из первых кавычек. Вторых кавычек быть не должно, это ошибка. Но компилятор нам этого не «сказал».
А во втором случаи компилятор прервал процесс из-за ошибки в исходном коде:
nadir@nadir-VGN-TT1RVN-X:~$ gcc -o prog '/home/nadir/Рабочий стол/main.c' /home/nadir/Рабочий стол/main.c: В функции «main»: /home/nadir/Рабочий стол/main.c:5:5: ошибка: слишком много аргументов в вызове функции «puts» nadir@nadir-VGN-TT1RVN-X:~$
Так что не забывайте подключать библиотеку. А что касается оператора printf то без библиотеки его никак не получится скомпилировать.
На сегодня думаю хватит. Удачи!