Статьи

Основы С

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

Набор символов C:

C использует буквы от A до Z в нижнем и верхнем регистре, цифры от 0 до 9, определенные специальные символы и пробелы для формирования базовых элементов программы (например, переменных, констант, выражений и т. Д.)

Специальные символы:

+ — * / =% & #! ? ^ ”’/ | <> () [] {}:; , , ~ @!

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

Идентификаторы и ключевые слова:

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

Один и тот же идентификатор может обозначать разные объекты в одной и той же программе, например, переменная и массив могут обозначаться одним и тем же идентификатором, пример ниже.

int sum, average, A[10]; // sum, average int sum, average, A[10]; // sum, average и имя массива A — все идентификаторы.

Предопределенный идентификатор _ _func_ _: —

__func__ идентификатор __func__ делает имя функции доступным для использования внутри функции. Сразу после открывающей скобки каждого определения функции _ _func_ _ неявно объявляется компилятором следующим образом:

  static const char _ _func_ _ [] = "имя-функции"; 

где имя-функции — это имя функции.

рассмотрим следующий пример

  #include <stdio.h>

 void func1 (void) {
          Е ( "% Sn" __ func__);
          возвращение;
 }  

 int main () {
      MyFunc ();
 } 

Выход будет

  func1 

Ключевые слова

Ключевые слова — это зарезервированные слова, которые имеют стандартные предопределенные значения. Эти ключевые слова могут использоваться только по их прямому назначению; их нельзя использовать в качестве идентификаторов, определенных программистом. Примеры некоторых ключевых слов: int , main , void , if .

Типы данных

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

Типы данных, поддерживаемые в C, описаны ниже:

INT:

Используется для хранения целого числа. Обычный int может хранить диапазон значений от INT_MIN до INT_MAX, как определено в заголовочном файле <limit.h>. Модификаторы типа для типа данных int: подписанный, без знака, короткий, длинный и длинный длинный.

  • Short int занимает 2 байта пространства, а long int занимает 4 байта.
  • Короткое целое без знака занимает 2 байта, но оно может хранить только положительные значения в диапазоне от 0 до 65535.
  • Беззнаковое целое имеет те же требования к памяти, что и короткое беззнаковое целое. Однако в случае обычного типа int крайний левый бит зарезервирован для знака.
  • Длинное целое без знака занимает 4 байта памяти и хранит положительные целые числа в диапазоне от 0 до 4294967295.
  • По умолчанию тип данных int подписан.
  • Long long int занимает 64 бита памяти. Может быть подписан или не подписан. Подписанное длинное длинное int хранит значения от -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807, а неподписанное длинное длинное колеблется от 0 до 18,446,744,073,709,551,615.

голец:

Он хранит один символ данных, принадлежащих к набору символов C. Он занимает 1 байт памяти и хранит любое значение из набора символов C. Модификаторы типов для char signed и не unsigned .

И знаковый, и неподписанный символ занимают 1 байт памяти, но диапазон значений различается. Символ без знака может хранить значения от 0 до 255, а знак без знака может хранить значения от -128 до +127. Каждый тип char имеет эквивалентную целочисленную интерпретацию, так что char на самом деле является специальным видом короткого целого числа. По умолчанию char не подписан.

плавать:

Он используется для хранения действительных чисел с одинарной точностью, то есть с точностью до 6 цифр после десятичной точки. Занимает 4 байта памяти. Модификатор типа для float — long . Он имеет те же требования к памяти, что и double.

удвоится:

Он используется для хранения реальных чисел с двойной точностью. Занимает 8 байт памяти. Модификатор типа для double является long . Длинный дубль занимает 10 байт памяти.

недействительными:
Используется для указания пустого набора, не содержащего значений. Следовательно, он занимает 0 байтов памяти.

_Bool:
Логический тип данных, который является целым типом без знака, который может хранить только два значения, 0 и 1. Включите файл <stdbool.h> при использовании _Bool.

_Complex :

Он используется для хранения комплексных чисел. Существует три сложных типа: float _Complex , double _Complex и long double _ComplexIt находится в файле <complex.h>.

Массивы:

Массив — это идентификатор, который ссылается на набор элементов данных с одинаковыми именами. Они также должны иметь одинаковый тип данных (т. Е. Все символы, все целые числа и т. Д.). Каждый элемент данных представлен своим элементом массива. Отдельные элементы массива отличаются друг от друга своими индексами.

Синтаксис для объявления массива:

Предположим, что arr является целочисленным массивом из 5 элементов, в котором хранятся числа 5, 4, 2, 7, 3 в указанном порядке. Первый элемент называется arr[0] котором хранится значение 5 данных, второй элемент — arr[1] котором хранится значение 4 и т. Д. Последний элемент — arr[4] котором хранится значение 3. Индекс, связанный с каждым элементом, показан в квадратных скобках. Для n-элементного массива индексы будут в диапазоне от 0 до n-1.

В случае массива символов размера n, массив сможет хранить только n-1 элементов, поскольку нулевой символ автоматически сохраняется в конце строки, чтобы завершить его. Следовательно, буква массива символов, в которой хранятся 5 элементов, должна быть объявлена ​​размером 6. Пятый элемент будет храниться в letter[4] а letter[5] будет содержать нулевой символ.

Константы:

Константа — это идентификатор, значение которого остается неизменным на протяжении всей программы. Чтобы объявить любую константу, синтаксис:
const datatype varname = value; где const — это ключевое слово, которое объявляет переменную как объект с фиксированным значением.

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

Целочисленные константы:

Целочисленная константа — это целочисленное число. Он состоит из последовательности цифр. Целочисленные константы могут быть записаны в следующих трех системах счисления:

Десятичное число (основание 10): десятичная константа может состоять из любой комбинации цифр от 0 до 9. Если она содержит две или более цифр, первая цифра должна отличаться от 0, например: const int size =50;

Восьмеричное (основание 8): восьмеричная константа может состоять из любой комбинации цифр от 0 до 7. Первая цифра должна быть 0, чтобы идентифицировать константу как восьмеричное число, например: const int a= 074; const int b= 0; const int a= 074; const int b= 0;

Шестнадцатеричная константа (основание 16): шестнадцатеричная константа может состоять из любой комбинации цифр от 0 до 9 и от a до f (в ​​верхнем или нижнем регистре) Он должен начинаться с 0x или oX, чтобы идентифицировать константу как шестнадцатеричное число, например: const int c= 0x7FF;

Целочисленные константы могут также иметь префикс с помощью модификаторов типов unsigned и long. Беззнаковые константы должны заканчиваться u или U , длинные целочисленные константы должны заканчиваться l или L а беззнаковые длинные целочисленные константы должны заканчиваться ul или UL . Длинные длинные целочисленные константы заканчиваются на LL или ll . Длинный длинный конец без UL с UL или ul

Константа с плавающей точкой:

Это число 10 или 16, которое содержит десятичную точку, или показатель степени, или оба. В случае десятичной константы с плавающей точкой экспонента база 10 заменяется на e или E. Таким образом, 1.4 * 10 ^ -3 будет записано как 1.4E-3 или 1.4e-3.

В случае шестнадцатеричной символьной константы показатель в двоичном формате заменяется на p или P. Например:

  const float a = 5000.;

 const float b = .1212e12;

 const float c = 827,54; 

Константы с плавающей точкой, как правило, представляют собой величины двойной точности, занимающие 8 байтов. В некоторых версиях C константа добавляется F для указания одинарной точности и L для указания длинной константы с плавающей запятой.

Константы символов:

Символьная константа — это последовательность из одного или нескольких символов, заключенных в апострофы. Каждая символьная константа имеет эквивалентное целочисленное значение, которое определяется набором символов компьютера. Он также может содержать escape-последовательности. Символьному литералу может предшествовать буква L , u или U , например, L'c' .

Символьный литерал без префикса L является обычной символьной константой или узкой символьной константой. Символьный литерал с префиксом L является константой широких символов. Тип узкой символьной константы и константы с несколькими символами — int . Тип константы широких символов с префиксом L — это wchar_t определенный в заголовочном файле <stddef.h> . Константа широких символов с префиксом u или U имеет тип char16_t или char32_t. Это типы символов без знака, определенные в <uchar.h> .

Обычный символьный литерал, который содержит более одного символа или escape-последовательность, является константой из нескольких символов, например: const char p= 'A';

Escape-последовательности также являются символьными константами, которые используются для выражения определенных непечатаемых символов, таких как символ табуляции или возврата каретки. Эскейп-последовательность всегда начинается с обратной косой черты и сопровождается одним или несколькими специальными символами. например, b будет представлять колокол, n будет представлять перевод строки.

Строковые литералы:

Строковый литерал состоит из последовательности многобайтовых символов, заключенных в двойные кавычки. Они бывают двух типов: широкие строковые литералы и строковые литералы UTF-8. Строковый литерал UTF-8 имеет префикс u8 а широкий строковый литерал — L , u или U

Компилятор распознает и поддерживает дополнительные символы (расширенный набор символов), которые вы можете осмысленно использовать в строковых литералах и символьных константах. Поддержка расширенных символов включает в себя многобайтовые наборы символов. Многобайтовый символ — это символ, битовое представление которого помещается в один или несколько байтов.

Символические константы:

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

Символическая константа определяется в начале программы с помощью функции # define . Функция # define называется директивой препроцессора, подробнее о препроцессоре C в следующей статье.

Определение символьной константы никогда не заканчивается точкой с запятой, так как это не оператор C, скорее это директива, например:

  #define PI 3.1415 // PI - это константа, которая будет представлять значение 3.1415

 #define True 1

 # определить имя "Алиса" 

Это были некоторые из основных элементов C. Такие элементы, как область действия идентификатора, объявления, операторы, выражения и т. Д., Будут объяснены в будущих статьях с помощью практических примеров. В следующей статье будут обсуждаться операторы, представленные на языке C.