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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.08.2009, 14:30   #11
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от lennon Посмотреть сообщение
добвь следущее в аголовчный файл. максоры должны быть написаны самыми первыми , и все будет работать.

Код:
#ifndef HeaderH
#define HeaderH

const int FY = 15;

#endif
В данном случае будет столько экземпляров константы, в скольких cpp файлах данный хедер прописан в #include. Препроцессор действует только только внутри единицы трансляции, т.е. для каждого cpp файла будут обрабатываться подключенные хедеры заново, т.е. экземпляров одного и того же хедера будет несколько в проекте.
Можете проверить. Создайте какой-нибудь такой хедер:
Код:
// my_header.h
#ifndef HeaderH
#define HeaderH

const int FY = 15;

int const& getConstA();
int const& getConstB();

#endif
и разнесите реализации данных функций на 2 разных сипипишки:
Код:
// a.cpp
#include "my_header.h"

int const& getConstA()
{
  return FY;
}

// b.cpp

int const& getConstB()
{
  return FY;
}
ну и в главном модуле:
Код:
// Source.cpp
#include "my_header.h"
#include <iostream>

using namespace std;

int main()
{
  cout << "getConstA: " << &getConstA() << endl;
  cout << "getConstB: " << &getConstB() << endl;
  cout << "this module: " << &FY << endl;
}
Я сам не проверял и писал этот код здесь, но уверен, что выведутся три разных адреса, по которому находится константа, т.е. на каждое включение хедера будет создана своя копия константы.
Если хочется одного экземпляра константы, то в хедере надо писать: extern const int FY
а в какой-нибудь сипипишке уже const int FY = 15;
Но тут как бы не было зависимости от порядка компиляции сипипишек... По идее должно работать нормально, но лучше проверить на разных компиляторах.
pu4koff вне форума Ответить с цитированием
Старый 27.08.2009, 14:37   #12
jojahti
Подтвердите свой е-майл
 
Регистрация: 27.07.2009
Сообщений: 437
По умолчанию

pu4koff
Цитата:
Если хочется одного экземпляра константы, то в хедере надо писать: extern const int FY
Вопрос в том, как её в этом хедере заюзать?
Я хочу её использовать как параметры для объявления массива в хедере.

Последний раз редактировалось jojahti; 27.08.2009 в 14:41.
jojahti вне форума Ответить с цитированием
Старый 27.08.2009, 15:23   #13
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

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

Вопрос в том, как её в этом хедере заюзать?
Я хочу её использовать как параметры для объявления массива в хедере.
В хедере написать так:
Код:
extern const int a;
extern int arr[];
и в сипипишке так:
Код:
const int a = 10;
int arr[a];
Оно?
ЗЫ. Если константа не нужна, кроме как для объявления массива, то её и в хедере не нужно прописывать.
pu4koff вне форума Ответить с цитированием
Старый 27.08.2009, 16:03   #14
jojahti
Подтвердите свой е-майл
 
Регистрация: 27.07.2009
Сообщений: 437
По умолчанию

pu4koff
Цитата:
Оно?
Ушёл убиваться веником.
jojahti вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить строковое значение константы в коде CaptainNemo Microsoft Office Word 2 09.06.2009 06:47
Константы массива (запятая и точка с запятой) IFRSoff Microsoft Office Excel 3 27.02.2009 18:11
Замена константы, переменной valerij Microsoft Office Excel 2 20.03.2008 21:16
Константы в Макросе valerij Microsoft Office Excel 2 03.02.2008 23:33
Имя константы-в строку Роман Радер Общие вопросы Delphi 2 04.07.2007 12:37