еще переменное количество параметров осложняет компиллеру задачу
контроля типа параметров при вызове. Я когда переписывал сделал
ошибку, вместо atc_command_(&atc, str, 5000, buffer, sizeof(buffer), "\r\n+CMGR:", "\r\nOK\r\n", "\r\nERROR\r\n", NULL) написал
atc_command_(&atc, str, 5000, buffer, sizeof(buffer), 3, "\r\n+CMGR:", "\r\nOK\r\n", "\r\nERROR\r\n", NULL) и никаких варнингов.
тут такое не прокатит
https://onlinegdb.com/3JRlT6HTL