Как предотвратить GNU-специфическую функцию, когда определены два источника - PullRequest
3 голосов
/ 28 марта 2019

Мне нужно использовать свойство изменения размера FIFO fcntl, используя F_SETPIPE_SZ.Для этого мне нужно использовать #define _GNU_SOURCE.Тем не менее, мой код также включает в себя функцию strerror_r.Обычно я использую XSI-совместимый его, но когда я добавляю #define _GNU_SOURCE, он автоматически выдает ошибку по своей природе, так как предпочитает использовать GNU strerror_r.

error: initialization makes integer from pointer without a cast [-Werror=int-conversion]
         int error_num = strerror_r(errno, ERROR_MESSAGE_BUFF, ERROR_MESSAGE_LENGTH);
                         ^~~~~~~~~~
cc1: all warnings being treated as errors

По той же причине мне нужно использовать #define _DEFAULT_SOURCE также для других объявлений / определений.Как я могу использовать XSI-совместимый strerror_r вместо того, чтобы использовать следующие два

#define _GNU_SOURCE
#define _DEFAULT_SOURCE
...