pzh
написал 26 января 2005 года в 14:13 (1850 просмотров)
Ведет себя
неопределенно; открыл 2 темы в форуме, оставил 6 комментариев на сайте.
Дано:
Файл ex1.cpp:
const int cnst = 15;
Файл ex1.h
extern const cnst;
Файл ex2.cpp
#include «ex1.h»
void
main ()
{
int a = cnst;
}
получаем на этапе линковки ошибочку
не определена cnst
gcc (GCC) 3.3.3 (SuSE Linux)
всвязи с этим есть вопрос, какова область видимости у констант в плюсе ?
и второй как эту проблему обойти корректно ?
заранее благодарен )
Последние комментарии
- OlegL, 17 декабря 2023 года в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
можеть extern const int cnst?
Да, при extern const int cnst; должно получиться…
Ty sozdayosh konstantu bez initsializatsii, konsanta dolzhna ititsializirovatcya srazu
esho vyhod — const int cnst = 15;
опечатался я при наборе в форуме
естественно extern const int cnst;
дык ведь не работает, вопрос в том и был, что константа определена в одном файле,
а использовать ее надо в другом (естественно это очень упрощенный случай моей
задачи, в полном там весьма немаленькие массивы и увевличивать размер выходного
бинарника в два-три раза нежелательно, она ведь не в двух файлах используестся)
для сравнения вариант2:
ex1.cpp:
int cnst=15;
ex1.h:
extern int cnst;
ex2.cpp:
#include
#include «ex1.h»
int
main ()
{
int a = cnst;
return printf («%d\n», a);
}
прекрасно компилиться и выдает именно 15 )
такиж вопрос какова область видимости у констант ?
PS.
RTFM не предлагать, если найду доку, сниму вопрос.
Вот что по этой теме написано в MSDN :))
In C, constant values default to external linkage, so they can appear only in source files. In C++, constant values default to internal linkage, which allows them to appear in header files.
И еще:
* C and C++ const Differences
When you declare a variable as const in a C source code file, you do so as:
const int i = 2;
You can then use this variable in another module as follows:
extern const int i;
But to get the same behavior in C++, you must declare your const variable as:
extern const int i = 2;
ситуация ясна, всем спасибо за поддержку.
Тема закрыта.