定义两个源时如何防止特定于GNU的功能

时间:2019-03-28 16:09:46

标签: c gcc compilation c-preprocessor preprocessor

我需要通过使用fcntl使用F_SETPIPE_SZ的FIFO大小更改属性。为此,我需要使用#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

0 个答案:

没有答案