C - это язык программирования общего назначения, используемый для системного программирования (ОС и встраиваемых), библиотек, игр и кроссплатформенности. Этот тег следует использовать с общими вопросами, касающимися языка 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 сильно повлияли, - это C #, Objective-C и Java.


Дизайн

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

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


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

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

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

Совместное использование cи c++

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

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

  • Он содержит чистый C, без следов 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 ++ на вопрос C, который никогда не был помечен как c++, должны быть удалены как не по теме. Пожалуйста, проверьте историю редактирования вопроса, прежде чем отмечать / удалять такие ответы, чтобы убедиться, что у вопроса никогда не было тега C ++.


Книги о С

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

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


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

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

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

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

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

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

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

Loops

Массивы

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

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

Струны

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

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

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

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

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

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

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


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


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

#include <stdio.h>

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

Комната чата

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


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