Язык Си в примерах/Простейшая программа «Hello World»: различия между версиями
Содержимое удалено Содержимое добавлено
ISbot (обсуждение | вклад) м {{BookCat}}; избыточные <big /> и <font /> вокруг <source />; пробелы. |
Оформление, уточнения; →Примечания: перенесены <ref /> в данный раздел; использован {{Cite web|}}. |
||
Строка 9:
int main (void)
{
}
</source>
Посмотрим на неё внимательно. Первая строка — <source lang="c" enclose="none" >#include <stdio.h></source> —
означает «включи
▲означает «включи файл <code>stdio.h</code>». В этом файле ''объявляются'' функции, связанные с вводом и выводом данных.
Аббревиатуру ''stdio'' можно перевести как ''
Далее идёт
<source lang="c">
int main (void)
Строка 28 ⟶ 25 :
что значит: «функция с именем <code>main</code>, которая возвращает целое число (число типа <code>int</code> от англ. {{lang|en|[[wikt:integer#integer I (существительное)|integer]]}}) и у которой нет аргументов <code>(void)</code>»
<small >В качестве варианта, [[w:C11 |стандарт]] допускает определение функции <code >main</code> как функции двух аргументов (<code >int argc</code> и <code >char *argv[]</code> — имена, разумеется, могут быть произвольными), что используется для получения доступа к ''аргументам командной строки'' из программы. В данном случае, эта возможность не требуется, поэтому функция определена как безаргументная (что также явно разрешено стандартом.)<ref name="startup"
Английское слово {{lang|en|[[wikt:void#существительное|void]]}} можно перевести как «ничто». Далее открываются фигурные скобки и идёт ''тело'' функции, в конце фигурные скобки закрываются. Функция <code>main</code> — главная функция программы, именно с нее начинается выполнение программы.
Строка 34 ⟶ 31 :
Тело функции, в свою очередь, определяет последовательность действий, выполняемых данной функцией — логику функции. Наша функция выполняет одно единственное действие:
<source lang="c">
</source>
Это действие, в свою очередь, есть вызов функции <code >puts</code> стандартной библиотеки.<ref name="puts" />
Затем идёт команда <code >return 0;</code>, которая завершает выполнение функции
== Вариант «классический» ==
Строка 48 ⟶ 45 :
#include <stdio.h>
int
main (void) {
}
</source>
В отличие от функции <code >puts</code>, выводящей переданную в качестве аргумента символьную строку, первый и обязательный аргумент функции <code >printf</code> определяет ''формат'' вывода.<ref name="fprintf"
<small>В общем случае, формат состоит из произвольного текста (не включающего символ <code>%</code>) «перемешанного» с ''указателями преобразований'' (предваряемыми символом <code>%</code>). В данном случае, однако, эта возможность не используется и никаких преобразований не выполняется.</small>
Строка 62 ⟶ 60 :
Обратите внимание на появившуюся в ''строковой константе'' комбинацию <code>\n</code> — она включает в выводимую строку [[w:Управляющие символы|управляющий код]] (или ''управляющий символ'') [[w:Перевод строки|перевода]] (также ''разрыва'' или ''завершения'') строки. В отличие от функции <code>puts</code>, всегда добавляющей этот код к выводимой строке, <code>printf</code> требует явного его указания.
<small >Действующая редакция стандарта определяет
Обратим внимание и на следующее новшество:
<source lang="c">
</source>
Окружение, в котором запускается программа, как правило можно настроить так, что вывод программы будет оставаться на экране после ее выполнения неограниченно долго. Проще всего это обеспечить вызывая программу из [[w:Интерпретатор командной строки|командного интерпретатора]] (который, в свою очередь, может быть запущен в окне [[w:Эмулятор терминала|эмулятора терминала]]) или (в зависимости от системы) окна [[w:Cmd.exe|Cmd.exe]].
Однако, при запуске непосредственно из графического окружения, отведенное программе окно может закрыться сразу же после завершения программы. Функция <code >getchar</code><ref name="getchar"
<small>В некоторых руководствах для этой же цели предлагается функция <code>getch</code>. Однако, эта функция (в отличие от <code>getchar</code>) не является ''стандартной'' и, к тому же, зависима от платформы. Так, в некоторых системах использование <code>getch</code> требует включения файла <code>curses.h</code> и предшествующего вызова функции <code>initscr</code>. В других системах, однако, <code>getch</code> может быть объявлена в <code>conio.h</code>, и выполнение <code>initscr</code> — не требуется.</small>
Строка 82 ⟶ 80 :
#include <windows.h>
int
main (void) {
}
</source>
Использование заголовка <code>windows.h</code> может произвести впечатление приемлемости этого варианта кода в рамках только лишь [[w:Microsoft Windows|одной конкретной]] системы. Однако, для использованного здесь [[w:Интерфейс программирования приложений|интерфейса]] существует и независимая [[w:Свободное программное обеспечение|свободная]] реализация — [[w:Wine|Wine]], — позволяющая [[../Компиляция программ|собрать]] и выполнить данный вариант на таких системах, как, например, [[w:Linux|GNU/Linux]], [[w:FreeBSD|FreeBSD]], [[w:Solaris|Solaris]] и [[w:Mac OS X|Mac OS X]].
== См. также ==
* {{w |Hello, world!}}
* {{w |C11}}
* {{w |Wine}}
== Примечания ==
{{Примечания | refs =
{{Примечания | refs = <ref name="include">В действительности, <code>#include <...></code> — это директива препроцессора, то есть команда, которая выполняется до начала компиляции файла. Смысл этой директивы очень прост и заключается в том, чтобы на место, где указана эта директива, вставить содержимое файла, имя которого указано в угловых скобках. Обычно заголовочные файлы содержат только [[w:Прототип функции|прототипы функций]], то есть просто список функций с указанием аргументов и типа возвращаемого значения.</ref>}}▼
<!-- Пожалуйста поддерживайте алфавитный порядок для name. Спасибо. -->
<ref name="char-display" >{{Cite web | title = 5.2.2 Character display semantics | url = http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf#page=42 | work = WG14 N1570 Committee Draft | publisher = ISO/IEC | datepublished = 2011-04-12 | lang = en | accessdate = 2012-11-19}}</ref>
<ref name="exit" >{{Cite web | title = 7.22.4.4 The exit function | url = http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf#page=369 | work = WG14 N1570 Committee Draft | publisher = ISO/IEC | datepublished = 2011-04-12 | lang = en | accessdate = 2012-11-19}}</ref>
<ref name="fprintf" >{{Cite web | title = 7.21.6.1 The fprintf function | url = http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf#page=327 | work = WG14 N1570 Committee Draft | publisher = ISO/IEC | datepublished = 2011-04-12 | lang = en | accessdate = 2012-11-19}}</ref>
<ref name="getchar" >{{Cite web | title = 7.21.7.6 The getchar function | url = http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf#page=350 | work = WG14 N1570 Committee Draft | publisher = ISO/IEC | datepublished = 2011-04-12 | lang = en | accessdate = 2012-11-19}}</ref>
<ref name="include" >{{Cite web | title = 6.10.2 Source file inclusion | url = http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf#page=182 | work = WG14 N1570 Committee Draft | publisher = ISO/IEC | datepublished = 2011-04-12 | lang = en | accessdate = 2012-11-19}}</ref>
▲
<ref name="puts" >{{Cite web | title = 7.21.7.9 The puts function | url = http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf#page=351 | work = WG14 N1570 Committee Draft | publisher = ISO/IEC | datepublished = 2011-04-12 | lang = en | accessdate = 2012-11-19}}</ref>
<ref name="startup" >{{Cite web | title = 5.1.2.2.1 Program startup | url = http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf#page=31 | work = WG14 N1570 Committee Draft | publisher = ISO/IEC | datepublished = 2011-04-12 | lang = en | accessdate = 2012-11-19}}</ref>
<ref name="stdio.h" >{{Cite web | title = 7.21 Input/output <code >stdio.h</code> | url = http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf#page=314 | work = WG14 N1570 Committee Draft | publisher = ISO/IEC | datepublished = 2011-04-12 | lang = en | accessdate = 2012-11-19}}</ref>
<ref name="termination" >{{Cite web | title = 5.1.2.2.3 Program termination | url = http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf#page=32 | work = WG14 N1570 Committee Draft | publisher = ISO/IEC | datepublished = 2011-04-12 | lang = en | accessdate = 2012-11-19}}</ref>
}}
{{BookCat}}
|