В чем причина, чтобы определить макрос таким образом:Почему макрос объявлен таким образом?
#define test_errno(msg) do{if (errno) {perror(msg); exit(EXIT_FAILURE);}} while(0)
я имею в виду то, что является причиной do{}while(0)
? Конечно, это будет сделано только один раз, ноль будет постоянным, не может каким-то образом изменить на ненулевое значение, так зачем использовать такую конструкцию?
Отсутствует ';'. макрос считает это, и ему нужен конец ';', поэтому он выглядит как настоящая функция. – vvy