С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
19 / 20 / 0
Регистрация: 09.01.2013
Сообщений: 168

Класс CTrace

28.06.2013, 11:28. Показов 876. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
В самоучителе задание - напишите класс CTrace, который будет использовать во время выполнения для демонстрации входа и выхода из блоков кода.

Пример:
function 'f1' entry
'if' block entry
'if' block entry
function 'f1' entry

Подскажите, в каком направлении копать, просто идей никаких.
Единственное, что я придумал - считывать код программы через fstream и искать вход в функцию или if блок. И вставлять cout << "То, что в примере\n";. Но как то это коряво...

P.s. как получить имя выполняемой функции?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.06.2013, 11:28
Ответы с готовыми решениями:

Есть класс A и класс B, класс B вложен в класс A и вложен в него, как классу B получить доступ к переменным класса A просто по имени?
На самом деле ничё фантастического я не прошу, ведь: template &lt;class T&gt; class matrix { friend class diagonal; ...

Класс таблиц баз данных и класс записей в таблице(реляционная таблица). Предусмотреть класс связей между таблицами
Здравствуйте! Никак не могу продумать структуру этой программы. Проходим наследование, но я все равно не знаю, как его здесь применить. Как...

Класс: Разработать абстрактный класс класс Point для задания координаты...
Всем привет, помогите пожалуйста решить задачу, я уже всю голову сломал, не знаю как решить... Разработать абстрактный класс класс...

10
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
28.06.2013, 11:52
Скорее всего нужно, опираясь на концепцию RAII, создать класс, который в конструкторе будет выводить "...вход туда-то", а в деструкторе "...выход оттуда-то". Принимая в конструкторе аргумент с указанием места. Например:

C++
1
2
3
4
5
6
7
8
class CTrace
{
public:
   CTrace( const std::string& point ): point(point) { std::cout << point << " enter\n"; }
   ~CTrace() { std::cout << point << " exit\n"; }
private:
   const std::string& point;
}
Использование:
C++
1
2
3
4
5
if( condition )
{
   CTrace trace("condition");
   // do smthn
}
Но, может быть требуется нечто другое.
0
19 / 20 / 0
Регистрация: 09.01.2013
Сообщений: 168
28.06.2013, 12:44  [ТС]
@Tulosba, хорошая идея. А как получить имя выполняемой функции, чтобы передать его конструктору.
А то придется прописывать его каждый раз вручную
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
28.06.2013, 12:51
@Ryabchik, может быть подойдет макрос __func__
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
 
void f()
{
    cout << __func__ << endl;
}
 
int main() {
    cout << __func__ << endl;
    f();
    return 0;
}
https://ideone.com/aW4Klt

Но внутри условий нужно ведь не имя функции.
1
19 / 20 / 0
Регистрация: 09.01.2013
Сообщений: 168
28.06.2013, 12:57  [ТС]
Прекрасно подойдет, спасибо.
Внутри условий нет, а при входе в функцию оно как раз пригодится.
0
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
28.06.2013, 13:57
C++
1
2
3
4
5
6
7
8
9
bool __trace_cond__(bool value, const char *cond, const char *file, int line)
{
    std::cerr << file << " @ " << line << ": "
              << "condition (" << cond << ") -> "
              << (value ? "true" : "false") << "\n";
    return value;
}
 
#define tif(...) if(__trace_cond__((__VA_ARGS__), #__VA_ARGS__, __FILE__, __LINE__))
\o/
1
19 / 20 / 0
Регистрация: 09.01.2013
Сообщений: 168
28.06.2013, 15:10  [ТС]
@OhMyGodSoLong, я всего полгода учу плюсы и не очень то врубаюсь в то, что вы написали.
Как говорит один знакомый препод: это для крутых парней)

Как вызывать эту функцию? Ей надо передать какое то значение, еще что-то, имя файла, номер строки.

Последняя строка... Ладно, черт с ней.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
28.06.2013, 15:25
@Ryabchik, копируете код, и вместо обычного if в своем коде, пишите tif ... и получите вывод сообщения по условию. Макросизм во всей красе
1
19 / 20 / 0
Регистрация: 09.01.2013
Сообщений: 168
28.06.2013, 15:53  [ТС]
@Tulosba, многозначительное кхмэканье. Сейчас попробую

Добавлено через 3 минуты
@Tulosba, у меня VS ругается на __func__
error C2065: __func__: необъявленный идентификатор
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
28.06.2013, 15:56
@Ryabchik, попробуйте __FUNCTION__ см. тут
1
19 / 20 / 0
Регистрация: 09.01.2013
Сообщений: 168
28.06.2013, 15:59  [ТС]
Цитата Сообщение от Tulosba Посмотреть сообщение
попробуйте __FUNCTION__
Все заработало, огромное спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.06.2013, 15:59
Помогаю со студенческими работами здесь

Отдельно класс данных, класс формул и главный класс
Здравствуйте! У меня есть три вопроса. Первый вопрос. Скажите пожалуйста! Правильный ли это подход к созданию приложений :...

Реализовать класс родительский класс "Пара чисел" и класс-наследник "Комплексное число"
Ткма работы создать класс pair (пара чисел); определить метод перемножения полей и операцию сложения пар (a,b)+(c,d) =(a+b,c+d)...

Создать класс колесо, имеющее радиус. Определить конструкторы. Создать класс машин, содержащий класс колесо
Создать класс колесо, имеющее радиус. Определить конструкторы. Создать класс машин, содержащий класс колесо. Дополнительно есть марка,...

Класс, производный класс, паблик-класс
Задание: Создать класс колесо, которое имеет радиус. Определить конструкторы и метод доступа. Создать класс машин, содержащий класс колесо....

Разработать базовый класс "прямоугольник", производный класс "Окно" и класс-контейнер "Список окон"
Реализовать все задачи в С # WPF 1. Разработать класс прямоугольник, имеющий координаты верхнего левого и нижнего правого угла, цвет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru