Поиск…


замечания

C - универсальный, императивный язык программирования, поддерживающий структурированное программирование, лексическую переменную область и рекурсию, а система статического типа предотвращает многие непреднамеренные операции. По дизайну C предоставляет конструкции, которые эффективно сопоставляются с типичными машинными инструкциями, и поэтому он нашел долгосрочное применение в приложениях, которые ранее были закодированы на языке ассемблера, включая операционные системы, а также различное прикладное программное обеспечение для компьютеров от суперкомпьютеров до встроенных систем ,

Несмотря на свои низкоуровневые возможности, язык был разработан для поощрения кросс-платформенного программирования. Стандартно-совместимая и портативно написанная программа C может быть скомпилирована для очень широкого спектра компьютерных платформ и операционных систем с небольшими изменениями в ее исходном коде. Язык стал доступен на очень широком спектре платформ - от встроенных микроконтроллеров до суперкомпьютеров.

C был первоначально разработан Деннисом Ричи в период с 1969 по 1973 год в Bell Labs и использовался для повторной реализации операционных систем Unix . С тех пор он стал одним из наиболее широко используемых языков программирования всех времен, причем компиляторы C из разных поставщиков доступны для большинства существующих компьютерных архитектур и операционных систем.

Общие компиляторы

Процесс компиляции программы C отличается между компиляторами и операционными системами. Большинство операционных систем поставляются без компилятора, поэтому вам придется его установить. Некоторые общие варианты компиляторов:

Следующие документы должны дать вам хороший обзор о том, как начать работу с использованием нескольких наиболее распространенных компиляторов:

Поддержка версии компилятора C

Обратите внимание, что компиляторы имеют различные уровни поддержки для стандартного C, многие из которых еще не полностью поддерживают C99. Например, с момента выпуска в 2015 году MSVC поддерживает большую часть C99, но все же имеет некоторые важные исключения для поддержки самого языка (например, препроцессинг кажется несоответствующим) и для библиотеки C (например, <tgmath.h> ), а также они обязательно документируют свои «варианты, зависящие от реализации». В Википедии есть таблица, показывающая поддержку, предлагаемую некоторыми популярными компиляторами.

Некоторые компиляторы (особенно GCC) предлагали или продолжают предлагать расширения для компилятора, которые реализуют дополнительные функции, которые производители компиляторов считают необходимыми, полезными или верят, могут стать частью будущей версии C, но в настоящее время они не являются частью любого стандарта C. Поскольку эти расширения специфичны для компилятора, их можно считать несовместимыми, а разработчики компилятора могут удалить или изменить их в более поздних версиях компилятора. Использование таких расширений обычно можно контролировать с помощью флагов компилятора.

Кроме того, у многих разработчиков есть компиляторы, которые поддерживают только определенные версии C, налагаемые средой или платформой, на которую они нацелены.

При выборе компилятора рекомендуется выбрать компилятор, который наилучшим образом поддерживает последнюю версию C, разрешенную для целевой среды.

Стиль кода (вне темы здесь):

Поскольку пробел в C невелик (то есть он не влияет на работу кода), программисты часто используют пробел, чтобы сделать код более понятным и понятным, это называется стилем кода . Это набор правил и рекомендаций, используемых при написании исходного кода. Он охватывает такие проблемы, как то, как строки должны быть отступом, должны ли использоваться пробелы или вкладки, как должны быть размещены фигурные скобки, как пространства должны использоваться вокруг операторов и скобок, как переменные должны быть названы и так далее.

Стиль кода не покрывается стандартом и в основном основан на мнениях (разные люди находят разные стили более легкими для чтения), поэтому он обычно считается вне темы на SO. Превосходный совет по стилю в собственном коде состоит в том, что последовательность является первостепенной - выбирайте или создавайте стиль и придерживайтесь его. Достаточно пояснить, что в общем использовании существуют разные именованные стили, которые часто выбирают программисты, а не создают их собственный стиль.

Некоторые общие стили отступа: стиль K & R, стиль Allman, стиль GNU и так далее. Некоторые из этих стилей имеют разные варианты. Например, Allman используется как обычный Allman или популярный вариант Allman-8. Информацию о некоторых популярных стилях можно найти в Википедии . Такие имена стиля берутся из стандартов, которые авторы или организации часто публикуют для использования многими людьми, способствующими их коду, чтобы каждый мог легко прочитать код, когда он знает стиль, например, руководство по форматированию GNU, которое составляет часть документ стандартов кодирования GNU .

Некоторые общие соглашения об именах: UpperCamelCase, lowerCamelCase, lower_case_with_underscore, ALL_CAPS и т. Д. Эти стили объединяются различными способами для использования с разными объектами и типами (например, макросы часто используют стиль ALL_CAPS)

Стиль K & R обычно рекомендуется для использования в документации SO, тогда как более эзотерические стили, такие как Pico, обескуражены.

Библиотеки и API, не охваченные стандартом C (и, следовательно, не относящиеся к теме):

Версии

Версия стандарт Дата публикации
К & Р н / 1978-02-22
C89 ANSI X3.159-1989 1989-12-14
C90 ISO / IEC 9899: 1990 1990-12-20
C95 ISO / IEC 9899 / AMD1: 1995 1995-03-30
C99 ISO / IEC 9899: 1999 1999-12-16
C11 ISO / IEC 9899: 2011 2011-12-15

Привет, мир

Чтобы создать простую программу на C, которая выводит на экран «Hello, World» , используйте текстовый редактор для создания нового файла (например, hello.c - расширение файла должно быть .c ), содержащее следующий исходный код:

Привет

#include <stdio.h>

int main(void)
{
    puts("Hello, World");
    return 0;
}

Демо-версия Live на Coliru

Давайте посмотрим на эту простую программу за строкой

#include <stdio.h>

Эта строка сообщает компилятору включить в стандартный stdio.h содержимое стандартного файла stdio.h библиотеки. Заголовки обычно представляют собой файлы, содержащие объявления функций, макросы и типы данных, и вы должны включать заголовочный файл перед их использованием. Эта строка включает stdio.h поэтому она может вызывать функцию puts() .

Подробнее о заголовках.

int main(void)

Эта строка начинает определение функции. В нем указано имя функции ( main ), тип и количество ожидаемых аргументов ( void , значение none) и тип значения, возвращаемого этой функцией ( int ). Выполнение программы начинается с функции main() .

{
    …
}

Кудрявые фигурные скобки используются парами, чтобы указать, где начинается и заканчивается блок кода. Их можно использовать многими способами, но в этом случае они указывают, где начинается и заканчивается функция.

    puts("Hello, World");

Эта строка вызывает функцию puts() для вывода текста на стандартный вывод (по умолчанию - экран), за которым следует новая строка. Строка, которая будет выводиться, включена в круглые скобки.

"Hello, World" - это строка, которая будет записана на экран. В C каждое строковое литеральное значение должно быть внутри двойных кавычек "…" .

Подробнее о строках.

В C-программах каждое утверждение должно заканчиваться точкой с запятой (т.е ; ).

    return 0;

Когда мы определили main() , мы объявили его как функцию, возвращающую int , то есть нужно вернуть целое число. В этом примере мы возвращаем целочисленное значение 0, которое используется для указания успешного выхода программы. После return 0; , процесс выполнения завершится.

Редактирование программы

Простые текстовые редакторы включают vim или gedit в Linux или Notepad в Windows. Кросс-платформенные редакторы также включают Visual Studio Code или Sublime Text .

Редактор должен создавать текстовые текстовые файлы, а не RTF или другой другой формат.

Компиляция и запуск программы

Для запуска программы этот исходный файл ( hello.c ) сначала необходимо скомпилировать в исполняемый файл (например, hello в системе Unix / Linux или hello.exe в Windows). Это делается с использованием компилятора для языка C.

Подробнее о компиляции

Компилировать с использованием GCC

GCC (сборник компиляторов GNU) - широко используемый компилятор C. Чтобы использовать его, откройте терминал, используйте командную строку, чтобы перейти к местоположению исходного файла, а затем запустите:

gcc hello.c -o hello

Если в исходном коде ( hello.c ) не обнаружены ошибки, компилятор создаст двоичный файл , имя которого задается аргументом в параметре командной строки -o ( hello ). Это окончательный исполняемый файл.

Мы также можем использовать параметры предупреждения -Wall -Wextra -Werror , которые помогают выявлять проблемы, которые могут привести к сбою программы или возникновению неожиданных результатов. Они не нужны для этой простой программы, но это способ их добавления:

gcc -Wall -Wextra -Werror -o hello hello.c

Использование компилятора clang

Чтобы скомпилировать программу, используя clang вы можете использовать:

clang -Wall -Wextra -Werror -o hello hello.c

По дизайну параметры командной строки clang аналогичны параметрам GCC.

Использование компилятора Microsoft C из командной строки

При использовании компилятора Microsoft cl.exe в системе Windows, которая поддерживает Visual Studio, и если все переменные среды установлены, этот пример C может быть скомпилирован с использованием следующей команды, которая приведет к выполнению исполняемого файла hello.exe в каталоге, в котором выполняется команда (Существуют опции предупреждения, такие как /W3 для cl , примерно аналогичные -Wall т. Д. Для GCC или clang).

cl hello.c

Выполнение программы

После компиляции двоичный файл может быть выполнен, введя ./hello в терминал. После выполнения скомпилированная программа напечатает Hello, World , а затем новую строку, в командной строке.

Оригинал «Привет, мир!» в K & R C

Ниже приводится оригинал «Hello, World!». программа из книги «Язык программирования C » Брайана Кернигана и Денниса Ричи (Ritchie был оригинальным разработчиком языка программирования C в Bell Labs), называемым «K & R»:

К & Р
#include <stdio.h>

main()
{
    printf("hello, world\n");
}

Обратите внимание, что язык программирования C не был стандартизован во время написания первого издания этой книги (1978) и что эта программа, вероятно, не будет компилироваться на большинстве современных компиляторов, если они не будут проинструктированы принять код C90.

Этот самый первый пример в книге K & R теперь считается некачественным, отчасти потому, что ему не хватает явного типа возврата для main() а частично потому, что ему не хватает оператора return . Второе издание книги было написано для старого стандарта C89. В C89 тип main будет по умолчанию для int , но пример K & R не возвращает определенное значение в среду. В стандартах C99 и более поздних версиях требуется тип возврата, но безопасно исключить оператор return main (и только main ) из-за специального случая, введенного с C99 5.1.2.2.3, - это эквивалентно возврату 0 , что указывает на успех.

Рекомендуемая и наиболее переносимая форма main для размещенных систем - int main (void) когда программа не использует аргументы командной строки или int main(int argc, char **argv) когда программа использует аргументы командной строки.


C90 §5.1.2.2.3 Окончание программы

Возврат от начального вызова к main функции эквивалентен вызову функции exit со значением, возвращаемым main функцией в качестве аргумента. Если main функция выполняет возврат, который не задает значения, статус завершения, возвращаемый в среду хоста, не определен.

C90 §6.6.6.4 Оператор return

Если выполняется оператор return без выражения, а значение вызова функции используется вызывающим, поведение не определено. Достижение } которое завершает функцию, эквивалентно выполнению оператора return без выражения.

C99 §5.1.2.2.3 Окончание программы

Если тип возврата main функции является типом, совместимым с int , возврат от начального вызова к main функции эквивалентен вызову функции exit со значением, возвращаемым main функцией в качестве аргумента; достигая } который завершает main функцию, возвращает значение 0. Если тип возврата несовместим с int , статус завершения, возвращаемый в среду хоста, не указан.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow