Как ввести константу в c
Перейти к содержимому

Как ввести константу в c

  • автор:

Как задать тип константы в Си?

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

#define SIZE 9 

При этом, насколько я сумел понять из учебника, эта константа будет иметь тип int . В результате при операциях с этим значением будет все время использоваться приведение типа к int . Это меня не устраивает — я хочу знать, можно ли явно задать тип (символьный) такой константе?

Отслеживать
2,969 3 3 золотых знака 15 15 серебряных знаков 30 30 бронзовых знаков
задан 31 авг 2017 в 17:13
Andrej Levkovitch Andrej Levkovitch
8,027 2 2 золотых знака 19 19 серебряных знаков 45 45 бронзовых знаков

это не константа, это просто define. Нужна константа — пишите const char SIZE = ‘9’; , если Ваш компилятор это поддерживает. Но оно как бы все равно не совсем «символьное».

31 авг 2017 в 17:47

Статический массив из одного элемента? Только учтите, выравнивание никто не отменял, так что смотрите карту памяти после линковки.

31 авг 2017 в 17:54

4 ответа 4

Сортировка: Сброс на вариант по умолчанию

Смотрите как работает define, самый первый этап компиляции это препроцессинг, везде где встречается ваша директива ‘SIZE’, она будет заменена на 9, а только потом будет компиляция, линковка.. Вы можете написать туда что угодно в рамках синтаксиса, это будет работать как если бы в блокноте произвели поиск и замену.

Отслеживать
ответ дан 31 авг 2017 в 18:22
Паша Иванов Паша Иванов
408 2 2 серебряных знака 8 8 бронзовых знаков
А чтобы посмотреть, что получилось после поиска и замены, можно запустить gcc -E
1 сен 2017 в 3:15

Я не понимаю зачем ты это написал — вопрос вообще-то о типе. С тем же успехом мог бы рассказать что такое «выражение» или «компилятор».

1 сен 2017 в 6:10

Тип литерала в #define (и в любом другом месте) задается неявно и определяется тем значением, что вы укажете. 9 имеет тип int , ‘9’ — тоже int , но соответствующий отличному от предыдущей ситуации значению (об этом далее), «9» — char[2] (строковый литерал, в котором один символ это ‘9’ , а второй — терминирующий ноль ‘\0’ ), 9.0 будет иметь тип double , 9.f — float и т.д.

В любом случае для #define вы задаете то значение, которое можно будет использовать в нужном контексте. Хотя здесь и возможны ситуации, когда компилятор молча проглотит, казалось бы, ошибочное значение. Например, при попытке задать массив:

#define N '9' int A[N]; 

вы получите массив из 57 элементов (соответствует ASCII коду символа ‘9’ ), а не из 9 элементов.

В общем, чтобы понять более точно вашу проблему, хорошо бы увидеть конкретный пример, почему требуется явно указать какой-то специфический тип для дефайна.

Как ввести константу в c

Отличительной особенностью переменных является то, что мы можем многократно в течение работы программы изменять их значение:

int n ; n = 9; n = 5;

Но кроме переменных в языке программирования C++ можно определять константы . Их значение устанавливается один раз и впоследствии мы его не можем изменить. Константа определяется практически так же, как и переменная за тем исключением, что в начале определения константы идет ключевое слово const . Например:

const int n ; // или // const int n = 22;

И также в процессе программы мы сможем обращаться к значению константы:

#include int main() < const int age ; std::cout

Но если же мы захотим после определения константы присвоить ей некоторое значение, то компилятор не сможет скомпилировать программу и выведет ошибку:

const int age ; age = 78;

То есть такой код не будет работать. И так как нельзя изменить значения константы, то ее всегда необходимо инициализировать, если мы хотим, чтобы она имела некоторое значение.

Если константа не будет инициализирована, то компилятор также выведет ошибку и не сможет скомпилировать программу, как в следующем случае:

const int age;

В качестве значения константам можно передавать как обычные литералы, так и динамически вычисляемые значения, например, значения переменных или других констант:

int a ; const int b ; const int d ; const int x ;

Обычно в качестве констант определяются такие значения, которые должны оставаться постоянными в течение работы всей программы и не могут быть изменены. Например, если программы выполняет математические операции с использованием числа PI, то было бы оптимально определить данное значение как константу, так как оно все равно в принципе неизменно:

Константы в С++

В С++ для представления константы рекомендуется использовать объявление переменной с начальным значением и ключевым словом const :

const тип ИмяПеременной = НачальноеЗначение;
const int n=10;

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

const тип *ИмяПеременной;

const int *m; // m – указатель на константу типа int
const int n=3;
m = &n;

Еще одна возможность const состоит в создании постоянного указателя на величину указанного типа
тип *const ИмяПеременной = Значение;

int i;
int * const ptri=&i;

Использование const имеет несколько преимуществ по сравнению с #define .

  • При объявлении константы с использованием const явно указывается тип величины.
  • Константа, объявленная с использванием const , просто согласуется с производными типами, например, объявление массива:

const int base_vals[5] = < 1000, 2000, 3500, 6000, 10000>;

Однако не любое использование #define можно исключить с помощью const . Например, нельзя объявить массив с размером, заданным через const .

const size=3;
int a[size];

Такой код работать не будет.

Перечислимый тип данных

С помощью ключевого слова enum можно объявить особый целочисленный тип с набором именованных целых констант, называемых перечислимыми константами:

enum day ;
enum flag ;

С помощью такого определения создается целочисленный тип day с названиями 7 дней недели, каждое из которых является целочисленной константой.

Перечислимые константы — идентификаторы, которые по умолчанию имеют следующие значения: 0, 1, 2, 3, 4, 5, 6. Первому присваивается значение 0, и каждому последующему – на 1 больше предыдущего.

Если не устраивают значения по умолчанию, то перечислимые константы могут быть инициализированы произвольными целыми константами или константными выражениями

enum number ; // b=55, d=65

Перечислимая константа может быть объявлена анонимно (без тега):

Курс C с нуля: часть 5 – константы

Предыдущая часть – Курс C с нуля: часть 4 – токены и ключевые слова.

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

Синтаксис

const data_type variable_name;
const data_type *variable_name;
Типы констант в C
  1. целочисленные константы;
  2. действительные константы;
  3. константы с плавающей точкой;
  4. восьмеричные и шестнадцатеричные константы;
  5. символьные константы;
  6. строковые константы;
  7. escape-последовательности.
Правила определения констант в C
1. Целочисленные константы в C
  • должна содержать как минимум одну цифру;
  • не должна содержать десятичного разделителя;
  • может быть как положительным так и отрицательным числом;
  • недопустимо использование запятых или пробелов;
  • если перед числом не указан знак – оно будет считаться положительным;
  • допустимый диапазон значений от -32768 до 32767.
2. Действительные константы в C
  • должна содержать как минимум одну цифру;
  • должна содержать десятичный разделитель;
  • может быть как положительным так и отрицательным числом;
  • недопустимо использование запятых или пробелов;
  • если перед числом не указан знак – оно будет считаться положительным.
3. Символьные и строковые константы в C
  • символьная константа хранит одну букву, одну цифру или один спецсимвол, заключенные в одинарные кавычки;
  • максимальная длина символьной константы 1 символ;
  • строковые константы заключаются в двойные кавычки.
4. Escape-последовательности в C
Как использовать константы в C?

Константа может быть определена так:

  1. с помощью ключевого слова “ const “;
  2. с помощью директивы препроцессора “ #define “;
  • Помните, что значения констант должны оставаться неизменными в течении работы программы. Попытка изменить значение константы приведет к возникновению ошибки.
1. Пример программы на C с использованием ключевого слова const
#include void main() < const int height = 100; /*int constant*/ const float number = 3.14; /*Real constant*/ const char letter = 'A'; /*char constant*/ const char letter_sequence[10] = "ABC"; /*string constant*/ const char backslash_char = '?'; /*special char cnst*/ printf("value of height :%d n", height ); printf("value of number : %f n", number ); printf("value of letter : %c n", letter ); printf("value of letter_sequence : %s n", letter_sequence); printf("value of backslash_char : %c n", backslash_char); >

Результат ее выполнения:

$ ./const value of height :100 value of number : 3.140000 value of letter : A value of letter_sequence : ABC value of backslash_char : ?
1. Пример программы на C с использованием директивы #define

#include #define height 100 #define number 3.14 #define letter ‘A’ #define letter_sequence «ABC» #define backslash_char ‘?’ void main()

$ ./constdef value of height : 100 value of number : 3.140000 value of letter : A value of letter_sequence : ABC value of backslash_char : ?

18 008 views

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *