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

C (произносится как "See", как буква 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 Использование тегов

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

  • Информация о целевой системе и компиляторе. Сюда входят имя компилятора, версия и настройки, используемые для компиляции.
  • Если ваш вопрос касается ошибок / предупреждений компилятора, укажите эти ошибки / предупреждения в вопросе. Также уточните, к какой строке относится ошибка компилятора.
  • Если ваш вопрос относится к одной конкретной версии языка, добавьте c90 c99 c11 или 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++, использующий библиотеки C (например, код, использующий extern "C").

Рекомендации по редактированию и модерации сообщений с тегами c и C++:

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

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

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

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

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

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


Книги о C

Существует много-много книг разного качества о том, как использовать C. См. Вопрос " Руководство и список книг на C".

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


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

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

Объявление и инициализация

Объем и срок хранения

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

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

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

Петли

Массивы

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

Указатели на функции

Струны

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

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

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

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

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

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

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


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


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

#include <stdio.h>

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

Чат

Обсуди C с другими пользователями stackru


Онлайн-компиляторы