Неявно передать аргументы - PullRequest
3 голосов
/ 02 июля 2019

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

Есть ли способ сделать так, чтобы __FILE__ и __LINE__ всегда передавались с функцией, даже если я не передаю их при вызове?

Вы можете сделать что-то подобное в C ++:

void func(char *file=__FILE__, int line=__LINE__)(int more_args) {}

1 Ответ

6 голосов
/ 02 июля 2019

используйте макрос в вашем коде для вызова базовой функции

#define func(arg) real_func(__FILE__,__LINE__,arg)

, где real_func равно

void real_func(const char *file, int line, int arg);

В вашем коде, когда вы вызываете func(12), эторасширяется до вызова real_func с указанием фактического пути к файлу и строки вызова.Вы даже можете поддерживать переменные функции аргументов в C99 с переменными макросами в качестве внешнего интерфейса.

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