Const и #define в С
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Цитата с одного из форумов:
Цитата из книги:
Почему в коде на C широко используется #define, а не const?
Что мешает задавать константы в коде на C через const, так же, как это делается в С++?
Цитата из книги «Язык программирования C. Лекции и упражнения, 5-е издание» Стивен Прата:
Модификатор const
В С глобальные идентификаторы
const
имеют внешнее связывание, но в C++ — внутреннее связывание. Другими словами, объявление в C++эквивалентно следующему объявлению в С:
при условии, что оба они находятся вне функций. Правила C++ нацелены на то, чтобы упростить применение
const
в файлах заголовков. Если константа имеет внутреннее связывание, то каждый файл, включающий заголовок, получает собственную копию константы. Если же константа имеет внешнее связывание, то в одном файле должно присутствовать определяющее объявление, а во всех остальных файлах должно использоваться ссылочное объявление с ключевым словомextern
.Кстати, в C++ ключевое слово
extern
может применяться для обеспечения внешнего связывания значенияconst
, поэтому оба языка позволяют создавать константы с внешними внутренним связыванием. Разница состоит лишь в том, какой вид связывания используется по умолчанию.Одно дополнительное свойство ключевого слова
const
в C++ заключается в том, что оно может применяться для объявления размера обычного массива:Такое же объявление можно делать и в С99, но это приведет к созданию массива переменной длины.
В языке C++, но не в С, значения
const
можно использовать для инициализации других значенийconst
:Cranium, спасибо! У Шилдта этот момент вообще не освещен.