за несколько десятилетий я так и не придумал куда можно
приспособить эту фичу, переменное число аргументов, кроме вариаций
на тему свой принтф. Даже в этом случае что у ТС было бы полезней
сделать не так как иранец сделал, а использовать переменное число
аргументов для формирования AT запроса в стиле принтф, а строки
возможных заголовков ответов передавать указателем на массив.
Правда тогда придется аргументы в функции сделать в обратном
порядке, сначала ответ, потом
Будь ты проклят, Перри-Утконос!
запрос.
примерно так
да и то в принципе надумано, можно тоже
int8_t atc_comm(atc_t *atc, char *answer, uint16_t answer_size, uint32_t timeout_ms, const char *response[], const char *command ...){ return 0; } atc_t atc; void foo(void){ char answer[42]; static const char * stdResp[] = {"OK", "ERROR", NULL}; if(atc_comm(&atc, answer, 42, 500, stdResp, "ATI\n") != 1) return;
if(atc_comm(&atc, answer, 42, 500, stdResp, "AT+CLIP=%d\n", 1) != 1) return;
static const char * connectResp[] = {"OK", "ERROR", "CONNECT", NULL};
if(atc_comm(&atc, answer, 42, 500, connectResp, "AT+OPEN=\"TCP\",\"%s\",\"%i\"\n", "ya.ru", 80) != 3) return; }