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

Класс CTrace

28.06.2013, 11:28. Показов 904. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru