Макрос для получения имени функции и значений параметров внутри функции - PullRequest
5 голосов
/ 01 марта 2012

Я работаю над программой отладки / ведения журнала, и мне было интересно, можно ли создать макрос, который я могу вставить в каждую функцию, и он будет печатать имя функции и значения параметров каждый раз, когда вызывается функция.Имя функции может быть восстановлено во время компиляции, проблема состоит в том, чтобы выяснить, как печатать значения параметров?

ОБНОВЛЕНИЕ: я помню, как читал статью, чтобы получить параметры, но это вызывало ассемблерный код и работал с указателями стека, чтокроссплатформенность - то, что мне нужно.

Ответы [ 4 ]

2 голосов
/ 01 марта 2012

Вы можете использовать макрос __FUNCTION__ или __func__ для имени функции. Что касается параметров, я не думаю, что есть встроенный макрос для достижения этого.

Другими полезными макросами являются __LINE__ и __FILE__.

EDIT:

__FUNCTION__ и __func__ не являются частью стандарта, но они широко поддерживаются.

16,8 имеет дело с предопределенными макросами:

__cplusplus
__DATE__
__FILE__
__LINE__
__STDC_HOSTED__
__TIME__

и макросы, определенные реализацией:

__STDC__
__STDC_VERSION__
__STDC_ISO_10646__
1 голос
/ 01 марта 2012

Для имени функции вы можете использовать стандартный (начиная с C99) идентификатор __func__.

В C ++ идентификатор расширения GNU __PRETTY_FUNCTION__ также будет печатать типы параметров.

0 голосов
/ 02 марта 2012

Здесь - некоторые примеры и приемы с отладкой с помощью макросов.Списки MS специфичные и GNU

0 голосов
/ 01 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...