Основные элементы, используемые для создания простой программы на 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.