Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как напечать название переменной 
V
    Опции темы
Mormishka
Дата 2.2.2011, 08:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 236
Регистрация: 25.8.2010

Репутация: нет
Всего: нет



К примеру у меня есть переменные 
Код

int x,y,z;

есть функция
Код

void f(int p)
{
 //printf(""); что здесь написать?
}

чтоб работало 
f(x); f(y);f(z);
чтоб был вывод 
x=
y=
z=

PM MAIL   Вверх
azesmcar
Дата 2.2.2011, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(Mormishka @  2.2.2011,  08:39 Найти цитируемый пост)
 //printf(""); что здесь написать?

Код

printf("x=%d\ny=%d\nz=%d\n", x, y, z);

можно и через макрос
Код

#define print_var(var) printf(#var##"=%d\n", var)

только это будет работать не для всех типов
можно и через cout, так будет надежнее
Код

#define print_var(var) std::cout << #var << '=' << var << std::endl

но все равно я бы не стал, макросов лучше избегать
PM   Вверх
xvr
Дата 2.2.2011, 12:47 (ссылка) |    (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



На этапе исполнения в С/С++ программе уже нет никаких имен (только адреса). Так что извлечь имя переменной можно только если мы его где то сами пропишем (через макрос, как в предыдущем посте), или откуда то прочтем (например из отладочной информации). Последнее весьма непростое занятие  smile 

PM MAIL   Вверх
mes
Дата 2.2.2011, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(xvr @  2.2.2011,  11:47 Найти цитируемый пост)
На этапе исполнения в С/С++ программе уже нет никаких имен (только адреса). Так что извлечь имя переменной можно только если мы его где то сами пропишем (через макрос, как в предыдущем посте), или откуда то прочтем (например из отладочной информации). Последнее весьма непростое занятие  

есть еще третий вариант, когда мы изначально проассоциируем имя с переменной..  smile 
например так : http://codepad.org/Z8MFA95B
Код

#include <iostream>
#include <string>

class named_int
{
   public:
      operator int const& () const { return _value; }
      operator int      & ()       { return _value; }
      
      std::string const& name () const { return _name; }  

      named_int (std::string const& name, int value ) 
      : _name (name)
      , _value(value)
      {}

   private:
      std::string _name;
      int _value;
};

int main ()
{
    named_int x ("x", 5);
 
    x*=3;

    std::cout << x.name() << "=" << x;
    
}

но для тс, имхо, подобное тяжеловато будет для восприятия.. 




Это сообщение отредактировал(а) mes - 2.2.2011, 13:02


--------------------
PM MAIL WWW   Вверх
baldina
Дата 2.2.2011, 15:03 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



Код

#define named(name,value) named_int name(#name,value)

int main ()
{
    named(x,5);
 
    x*=3;

    std::cout << x.name() << "=" << x;
}

http://codepad.org/7E8BqNde
PM MAIL   Вверх
kemiisto
  Дата 2.2.2011, 15:08 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 5
Всего: 160



Больше всего меня интересует в таких вопросах глубинный смысл затеи. Зачем!?


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Mormishka
Дата 2.2.2011, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 236
Регистрация: 25.8.2010

Репутация: нет
Всего: нет



В программе используется очень много переменных. Каждый раз писать, чтобы в каком-то месте выводилась какая-то переменная банально лень. Но это нужно только пока для отладки, контроливать значения переменных.

Это сообщение отредактировал(а) Mormishka - 2.2.2011, 18:01
PM MAIL   Вверх
bsa
Дата 2.2.2011, 18:04 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(Mormishka @  2.2.2011,  18:41 Найти цитируемый пост)
Но это нужно только пока для отладки, контроливать значения переменных.

Отладчик использовать религия не позволяет?
PM   Вверх
Mormishka
Дата 2.2.2011, 19:25 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 236
Регистрация: 25.8.2010

Репутация: нет
Всего: нет



Неудобно.
PM MAIL   Вверх
xvr
Дата 2.2.2011, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Mormishka @ 2.2.2011,  19:25)
Неудобно.

Неудобно когда соседские дети на тебя похожи  smile А отладчики делают именно для таких целей. В них всех (почти всех) есть такое окошко - 'Watch' называется. Это именно то, что вы пытаетесь сделать

PM MAIL   Вверх
Фантом
Дата 2.2.2011, 23:06 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 4
Всего: 49



Цитата(Mormishka @  2.2.2011,  17:41 Найти цитируемый пост)
В программе используется очень много переменных. Каждый раз писать, чтобы в каком-то месте выводилась какая-то переменная банально лень. Но это нужно только пока для отладки, контроливать значения переменных.

Такого не бывает. Если почему-то Вы попали в подобную ситуацию, то это означает, что Вы неправильно писали программу.  smile Разбивайте ее на отдельные функции (или делайте нормальную иерархию классов, если это C++) и тестируйте каждую функцию/класс отдельно. 
PM   Вверх
kemiisto
  Дата 2.2.2011, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 5
Всего: 160



Цитата(Фантом @  2.2.2011,  21:06 Найти цитируемый пост)
Если почему-то Вы попали в подобную ситуацию, то это означает, что Вы неправильно писали программу.  

Но С++ и тут "выручает". smile А точнее, подкладывает свинью. Вместо того, чтобы форсировать изучение вещей фундаментальных (композиция), строевым шагом направляет в ад макросов и пошаговой отладки.

Через тернии в тернии. Удачи. smile 

Это сообщение отредактировал(а) kemiisto - 2.2.2011, 23:20


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Фантом
Дата 3.2.2011, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 4
Всего: 49



Цитата(kemiisto @  2.2.2011,  23:20 Найти цитируемый пост)

Но С++ и тут "выручает". smile А точнее, подкладывает свинью. Вместо того, чтобы форсировать изучение вещей фундаментальных (композиция), строевым шагом направляет в ад макросов и пошаговой отладки.

Ну, строго говоря, C++ не столько направляет, сколько дает возможность.  smile При желании на нем вполне можно писать нормально... но и ненормально можно тоже. А дальше каждый сам кузнец своего счастья.  smile 
PM   Вверх
kemiisto
Дата 3.2.2011, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 5
Всего: 160



Цитата(Фантом @  2.2.2011,  22:27 Найти цитируемый пост)
Ну, строго говоря, C++ не столько направляет, сколько дает возможность.

Что для новичков в буквальном смысле означает одно и тоже. Ведь, если звёзды зажигают ... Отсюда и весьма категоричное
Цитата
Обучение программированию с помощью Си эквивалентно развращению малолетних.


 smile 


--------------------
PM MAIL WWW GTalk Jabber   Вверх
alexvs11
Дата 3.2.2011, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 21.8.2010

Репутация: 2
Всего: 10



а если автор занимается багфиксингом/поддержкой чужого кода - его тоже нужно переписывать
что за критическая позиция

для надежности макрос можно обернуть в do while(false)

Код

#define PRINT( x ) \
        do{ \
          std::cout << __FUNCTION__ << " (" << __LINE__ << \
                              "): [" << #x << "] = " << x; \
        }while(false) 

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0968 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.