Скрытый / привязанный аргумент функции? - PullRequest
1 голос
/ 04 октября 2019

Я хочу иметь дополнительную функцию, которая проверяет, возвращает ли входная функция 0. Дополнительная функция будет выходить из программы, если это так, и печатать номер строки, где это произошло. Я написал это:

 void check( int function_return_value, int line_with_error )
    {
        if(!function_return_value )
        {
            printf("Error on line %d\n", line_with_error );
            exit(EXIT_FAILURE);
        }
    }

line_with_error получает значение макроса LINE внутри моего основного файла кода, и это выглядит так

check( function(), __LINE__ );

Однако я нехочу, чтобы функция "check" принимала 2 аргумента, только 1 с возвращаемым значением функции. Есть ли способ как-то «спрятать» второй аргумент, чтобы функция знала, что макрос LINE всегда будет туда, но мне не нужно каждый раз его писать?

PS LINE будет принимать номер строки, в которой он записан в коде. Я не могу поместить его в функцию проверки, поскольку он всегда будет ссылаться на строку внутри объявления функции

1 Ответ

2 голосов
/ 04 октября 2019

Использовать макрос:

#define check(x) (check_2args((x), __LINE))

void check_2args( int function_return_value, int line_with_error )
{
    if(!function_return_value )
    {
        printf("Error on line %d\n", line_with_error );
        exit(EXIT_FAILURE);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...