Подтвердить что ты не робот

Зачем использовать константы в программировании?

Я только что перешел немного изучать C, используя книгу Ivor Horton Beginning C. Я добрался до объявления констант, которые, похоже, смешиваются с переменными в том же предложении.

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

4b9b3361

Ответ 1

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

Однако вы не всегда можете рассчитывать на то, что ваш компилятор достаточно умный, чтобы иметь возможность правильно определить, изменится ли значение после его установки. В любой ситуации, когда компилятор не может определить это со 100-процентной уверенностью, компилятор будет ошибаться со стороны безопасности и предположить, что он может измениться. Это может привести к различным последствиям производительности, например, избегать встраивания, не оптимизировать определенные циклы, создавая объектный код, который не является parallelism -другим.

Из-за этого, и поскольку читаемость также важна, вы должны стремиться использовать явную константу, когда это возможно, и оставлять переменные для вещей, которые могут реально измениться.

Как использовать константы вместо буквенных чисел:

1) Это делает код более читаемым. Всем известно, что 3.14 (надеюсь), не все знают, что 3.07 - ставка подоходного налога в ПА. Это пример знаний о доменах, и не все, кто будет поддерживать ваш код в будущем (например, налоговое программное обеспечение), узнают об этом.

2) Это экономит работу при внесении изменений. Переход и изменение каждые 3.07 до 3.18, если изменение ставки налога в будущем будет раздражать. Вы всегда хотите свести к минимуму изменения и в идеале сделать одно изменение. Чем больше одновременных изменений вы должны сделать, тем выше риск того, что вы что-то забудете, что приведет к ошибкам.

3) Вы избегаете рискованных ошибок. Представьте, что существовали два государства с ставкой налога на прибыль в размере 3,05, а затем одна из них изменилась до 3,18, а другая - на 3,07. Просто перейдя и заменив, вы можете столкнуться с серьезными ошибками. Конечно, многие значения целых или строковых констант более распространены, чем "3.07". Например, число 7 может представлять количество дней в неделю и что-то еще. В больших программах очень сложно определить, что означает каждое литеральное значение.

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

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

Например, если у меня есть перечисление на дни недели и на месяцы, я буду предупрежден, если я назначу месяц в день. Если я просто использую целочисленные константы, не будет предупреждения, когда 3-й день назначается на месяц 3. Вы всегда нуждаетесь в безопасности типа, и это улучшает читаемость. Перечисления также лучше определяют порядок. Представьте, что у вас есть константы в дни недели, и теперь вы хотите, чтобы ваша неделя началась в понедельник, а не в воскресенье.

Ответ 2

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

Технически, да, вы можете использовать переменную вместо этого.

Ответ 3

Во-первых, оптимизация производительности.

Что еще более важно, это для читателей. Помните, что ваша целевая аудитория - это не только компилятор. Это помогает выразить себя в коде и избегать комментариев.

const int spaceTimeDimensions = 4;

if(gpsSattelitesAvailable >= spaceTimeDimensions)
  Good();

Ответ 4

Константы имеют несколько преимуществ перед переменными.

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

Константы также дают сильный намек на компилятор для оптимизации. Поскольку компилятор знает, что значение не может измениться, ему не нужно загружать значение из памяти и может оптимизировать код для работы только для точного значения константы (например, компилятор может использовать сдвиги для умножения/деления если const является степенью 2.)

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

Ответ 5

Для низкоуровневого языка, такого как константы C, допускается несколько оптимизаций компиляции.

Для языка программирования в целом вам действительно не нужны. Динамические языки высокого уровня, такие как Ruby и JavaScript, не имеют их (или, по крайней мере, не в истинном постоянном смысле). Вместо этого используются переменные, как и вы.

Ответ 6

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

char *strcpy(char *dest, const char *src);

В противном случае, например, объявление, например

const int my_magic_no = 54321;

может быть предпочтительнее:

#define MY_MAGIC_NO 54321

по причинам безопасности по типу.

Ответ 7

Константа - это когда вы просто хотите разделить память, и она не изменяется.

Ответ 8

Это действительно простой способ захватить определенный класс ошибок. Если вы объявите переменную const и случайно попытаетесь ее модифицировать, компилятор вам позвонит.

Ответ 9

Константы очень необходимы в отношении объявления и инициализации переменной для любых целей, таких как при запуске цикла, для проверки состояния внутри оператора if -else и т.д.

Для получения дополнительной информации не стесняйтесь читать одну из следующих статей:

Ответ 10

Не использовать const может означать, что кто-то из командного проекта может объявить, где int FORTY_TWO = 42 и сделать его равным FORTY_TWO = 41 где-то еще другим членом команды. Поэтому происходит конец света, и вы также теряете ответ на жизнь. с const, хотя этого никогда не произойдет. Плюс const хранится в другом месте в памяти по сравнению с хранением нормальных переменных и более эффективен.