Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.06.2013, 15:35   #1
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию Видимость константы

С++

есть заголовочный файл, в нем определены несколько функций и константа,
используемая этими функциями
Примерно так:
Код:
#ifndef F_H
#define F_H

const int Const = 10;

// далее несколко функций
#endif
как сделать чтобы эта константа была видима только в этом файле?
SAMOUCHKA вне форума Ответить с цитированием
Старый 12.06.2013, 17:19   #2
220Volt
Форумчанин
 
Регистрация: 14.12.2012
Сообщений: 671
По умолчанию

Функции шаблонные?
Если да, кроме использование препроцессора ничего не знаю:
Код:
#define CONST 1
// Функции использующие CONST
#undef CONST
Если нет, то создавайте Const в конкретном нужном cpp модуле.

Последний раз редактировалось 220Volt; 12.06.2013 в 17:26.
220Volt вне форума Ответить с цитированием
Старый 12.06.2013, 17:28   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Предположу: Нужно описать пространство имен для этой константы, и в ее модуле обращаться через это пространство.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.06.2013, 17:34   #4
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от SAMOUCHKA Посмотреть сообщение
С++

есть заголовочный файл, в нем определены несколько функций и константа,
используемая этими функциями
Примерно так:
Код:
#ifndef F_H
#define F_H

const int Const = 10;

// далее несколко функций
#endif
как сделать чтобы эта константа была видима только в этом файле?
Что значит "только в этом файле" ? В этом, это в каком?

Если нужно, что бы область видимости константы была ограничена одной единицей трансляции (одним спп файлом), то нужно объявлять константу только внутри этой единицы трансляции (внутри этого спп файла, а не в хэдере)

Если нужно, что бы область видимости константы отдельным блоком
(константы не существовало после определения функций), тогда:

1.
Плохой способ:
Код:
//H_FILE

#define Const 10
void Foo() {  ....  }
#undef Const
2.

Не очень хороший, но приемлимый способ
Код:
//H_FILE

namespace space
{
   const int Const = 10;
}
int Foo() {  return space::Const;  }
Константа будет жить, в отдельном пространстве и не будет конфликтовать с другими константами

3.
Код:
//H_FILE

void Foo() 
{ 
   const int Const = 10;
 .... 
 }
Область видимости константы ограничена пространством функции.
Это предпочтительный способ.

4.
Наилучший способ:
Код:
//H_FILE
 void Foo(); //в хэдерах только прототип

//CPP_FILE

Код:
//безымяный неймспейс сделает невозможным 
//использование своего содержимого 
//за пределами единицы трансляции
namespace
{
   const int Const = 10;
}

void Foo(){ ... }
Область видимости константы ограничивается одной единицей трансляции. Получить к ней доступ из других единиц становится невозможным.
_Bers вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Видимость div AlexDn JavaScript, Ajax 1 10.01.2013 23:42
Видимость переменных С# Paravozzz Помощь студентам 3 04.09.2012 09:10
Видимость компонентов Guitar Помощь студентам 5 14.12.2010 15:19
Видимость скроллбаров mutabor Общие вопросы Delphi 13 10.09.2010 18:16
Видимость констант tae1980 Microsoft Office Excel 5 23.11.2009 12:06