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 сильно повлияли, - это С#, Objective-C и Java.


Дизайн

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

Note that this question is controversial; it would not be accepted on modern Qaru, but it is a useful historical artifact that is still being maintained.


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

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

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

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

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

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

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

Петли

Массивы

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

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

Строки

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

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

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

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

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

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

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


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


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

#include <stdio.h>

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

Комната чата

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


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