C - это язык программирования общего назначения, используемый для системного программирования (OS и embedded), библиотеки, игры и кросс-платформенный. Этот тег должен использоваться с общими вопросами, касающимися языка C, как определено в стандарте ISO 9899 (последняя версия, 9899: 2018, если не указано иное - также теги для конкретных версий запросов с c89, c99, C11 и т.д.). C отличается от C++, и его нельзя сочетать с тегом C++, отсутствующим рациональной причиной.

C (произносится "см", как и буква C) - это язык программирования общего назначения, разработанный Денисом Ричи в 1969–1973 годах в Bell Telephone Laboratories для использования с операционной системой UNIX. Его конструкция обеспечивает конструкции, которые эффективно отображаются на типичные машинные инструкции, и поэтому он нашел длительное применение в приложениях, которые ранее были закодированы на языке ассемблера. Это высокоэффективный процедурный язык программирования, в котором особое внимание уделяется функциям, тогда как современные объектно-ориентированные языки программирования, как правило, подчеркивают данные.

Язык программирования C был основан на более ранних языках программирования B, BCPL и CPL.

Язык C и его дополнительная библиотека стандартизированы как ISO/IEC 9899, текущей версией является ISO/IEC 9899: 2018 (C17). Черновая версия N2176 доступна бесплатно.

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

C является одним из наиболее широко используемых языков программирования всех времен, и существует очень мало компьютерных архитектур, для которых компилятор C не существует. C сильно повлиял на многие другие популярные языки программирования, прежде всего C++, который начинался как расширение C. Другие языки, на которые C сильно повлияли, - это С#, Objective-C и Java.


дизайн

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

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


Использование тегов

При публикации вопросов о программировании на С, обязательно указывайте:

  • Информация о целевой системе и компиляторе. Это включает в себя имя компилятора, версию и параметры, используемые для компиляции.
  • Если ваш вопрос относится к одной конкретной версии языка, добавьте или . Предварительно стандартные исторические вопросы должны быть помечены .
  • Если в вопросе явно не указано, какая версия стандарта C используется, предполагается, что используется текущая версия. То есть, любая версия ISO 9899, которую ISO в настоящее время перечисляет как активную. Пожалуйста, имейте это в виду, когда отвечаете или комментируете вопросы, помеченные .

Использование и вместе

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

Вопрос должен быть помечен только , если:

  • Он содержит чистый C, без следов C++, или вопросы с кодом, который может быть любым языком.
  • Код компилируется с помощью компилятора Си.

Вопрос должен быть помечен только , если:

  • Он содержит код с любыми функциями C++. Даже если код может быть "стиль C".
  • Код компилируется с помощью компилятора C++.

Вопрос должен быть помечен как , так и , если он касается:

  • Специфические различия между C и C++.
  • Совместимость или перенос кода между C и C++.
  • Код C++, который использует библиотеки C (например, код, использующий extern "C").

Правила редактирования и модерации для сообщений с тегами и :

Чтобы редактировать/повторно помечать/модерировать вопросы с обоими тегами, рекомендуется, чтобы у вас были полные права редактирования, а также значок с золотым или золотым .

Если вы столкнулись с сообщением с обоими тегами, отредактируйте/повторно пометите его, если необходимо, в соответствии с вышеуказанными правилами. Если вы можете сказать язык, прочитав опубликованный код, просто отредактируйте теги соответствующим образом. Избегайте подсказок пользователю "это C или C++?" в комментариях, если вопрос действительно неясен.

Один пример неясного вопроса - когда пользователь явно заявляет, что он программирует на C, но публикует сообщения кода или сообщения компилятора для C++. Если это так, запросите разъяснения и проведите закрытое голосование как неясное.

"Либо С, либо C++ в порядке", мнения ОП являются ярким свидетельством плохого или неясного вопроса. Ответы могут быть очень разными в зависимости от выбранного языка. Запрашивать разъяснения, закрыть как неясные/слишком широкие, пока ФП не разъяснит это.

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

Ответы с кодом C++ на вопрос C, который никогда не был помечен , следует удалять как не относящиеся к теме. Пожалуйста, проверьте историю редактирования вопроса перед тем, как помечать/удалять такие ответы, чтобы убедиться, что у вопроса никогда не было тега C++.


Книги о С

О том, как использовать C., написано много разных книг различного качества. См. Вопрос Definitive C Book Guide и List.

Обратите внимание, что этот вопрос является спорным;это не будет принято в современном переполнении стека, но это полезный исторический артефакт, который все еще поддерживается.


Часто задаваемые вопросы (FAQ)

Типы и классификаторы

Декларация и инициализация

Область применения и срок хранения

Целочисленная арифметика

Арифметика с плавающей точкой

Операторы, приоритет и порядок оценки

Массивы

Указатели и ноль

Функциональные указатели

Струны

Динамическое распределение памяти

Структуры и союзы

Препроцессор и макросы

Соответствие стандарту

Неопределенное, неопределенное и определяемое реализацией поведение

Стандартная библиотека

Лучшие практики и проблемы стиля


Внешние ресурсы


Программа Hello World на C

#include <stdio.h>

int main(void)
{
    printf("hello, world\n");
    return 0;
}

Комната чата

Поговорите о C с другими пользователями Stack Overflow


Интернет-компиляторы