Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как посмотреть значение вычесленной константы на этапе компиляции

2.2K
25 февраля 2003 года
anbezr
11 / / 28.01.2003
Привет!
#pragma message("messagetext")
выводит текстовое сообщение. а как вывести значение константы, вычисленной при компиляции, например
SIZE = sizeof(Array)*sizeof(ULONG)
426
26 февраля 2003 года
Krivonos
112 / / 20.01.2000
VOID OutputDebugString(
LPCTSTR lpOutputString // string to be displayed
);
только конечно, сначала приведи свою переменную (а не константы!) к строковому типу (itoa) и т.п.
3
26 февраля 2003 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by Krivonos
VOID OutputDebugString(
LPCTSTR lpOutputString // string to be displayed
);
только конечно, сначала приведи свою переменную (а не константы!) к строковому типу (itoa) и т.п.



Человек же просил на этапе компиляции.
Как сделать стандартными методами, я не знаю.
А вот с точки зрения нестандартных решений,- хорошая задачка, получил удовольствие при её решении.
Моё решение такое:

template<int T> class _CONSTANT_VALUE_IS;
#define _PRE_CONST_VALUE(T) typedef _CONSTANT_VALUE_IS<T>;

Способ применения:

int main()
{
const int SIZE = sizeof(int)*sizeof(int);
const int SIZE2 = 5*10+5;

_PRE_CONST_VALUE(SIZE)
_PRE_CONST_VALUE(SIZE2)

return 0;
}

Правда, вид сообщения будет странноват :о)

X:\xxxxx\xxxx.cpp(13) : warning C4091: 'typedef ' : ignored on left of 'class _CONSTANT_VALUE_IS<16>' when no variable is declared

но цель достигнута, - видим значение константы:
_CONSTANT_VALUE_IS<16>
для тех, кто в танке: число в угловых скобках

P.S. Необходимо проследить, чтоб не был отключен warning C4091.

2.2K
27 февраля 2003 года
anbezr
11 / / 28.01.2003
Большое спасибо!
хватаюсь за голову и бегу в книжный...
2.2K
27 февраля 2003 года
anbezr
11 / / 28.01.2003
есть еще один способ, но он некрасивый...можно писать switch\case, причем case с этой константой должно повторяться дважды или более. тогда компилятор выдаст ошибку в виде:
error C2196: case value '2236416' already used
453
06 марта 2003 года
amonra
60 / / 20.08.2000
помоему вам надо всем дружно месяц не сидеть за компютером вы думать перестаёте
Напридумывали проще надо быть
вот то решение которое придумали между прочим умные люди я для написания кода пользуюсь Visual Studio 7 (.NET)
просто ставишь BreakePoint'ы и запускаешь в режиме DEBUG после того как программа прервется в указаном месте
в меню выбираешь DEBUG->Window->Watch->Watch(1-4)
там вводишь название переменной и ENTER получаешь её результат и так любая переменная только там где нужно поставь BreakePoint и ВСЕ
желаю удачи и думай головой
3
06 марта 2003 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by amonra
помоему вам надо всем дружно месяц не сидеть за компютером вы думать перестаёте
Напридумывали проще надо быть
вот то решение которое придумали между прочим умные люди я для написания кода пользуюсь Visual Studio 7 (.NET)
просто ставишь BreakePoint'ы и запускаешь в режиме DEBUG после того как программа прервется в указаном месте
в меню выбираешь DEBUG->Window->Watch->Watch(1-4)
там вводишь название переменной и ENTER получаешь её результат и так любая переменная только там где нужно поставь BreakePoint и ВСЕ
желаю удачи и думай головой



Ты отличаешь этап компиляции от этапа отладки приложения?
Многие проблемы можно решить ещё при компиляции.
А совет быть проще и не сидеть за компьютером ты дай Андрею Александреску (http://moderncppdesign.com/) В данной задаче я использовал его принципы разработки ПО.

Если бы люди всегда пользовались дедовскими способами, то ты рубил бы программы зубилом на каменной доске. Кто думать перестает я определять не стану, но на мой взгляд, чтоб поставить бряк много ума не надо.

P.S. Анекдот в тему:
- Что пишешь?
- Сейчас запущу,- узнаю.

453
06 марта 2003 года
amonra
60 / / 20.08.2000
Норма. Без обид.
3
06 марта 2003 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by amonra
Норма. Без обид.



Ок :)
В споре рождается истина... и умирает любовь... :D

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог