nixp.ru v3.0

24 января 2017,
вторник,
02:07:56 MSK

DevOps с компанией «Флант»
pzh написал 26 января 2005 года в 14:13 (1028 просмотров) Ведет себя неопределенно; открыл 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)

всвязи с этим есть вопрос, какова область видимости у констант в плюсе ?

и второй как эту проблему обойти корректно ?

заранее благодарен )

Longobard

можеть extern const int cnst?

dimaz-z

Да, при extern const int cnst; должно получиться…

anonymous

Ty sozdayosh konstantu bez initsializatsii, konsanta dolzhna ititsializirovatcya srazu

esho vyhod — const int cnst = 15;

pzh

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

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

sml

Вот что по этой теме написано в 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;

pzh

ситуация ясна, всем спасибо за поддержку.

Тема закрыта.

ecobeingecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.