簡體   English   中英

當我向gcc添加std = c99標志時,fileno,F_LOCK和F_ULOCK變為未聲明且不可用

[英]fileno, F_LOCK and F_ULOCK become undeclared and unavailable when I add std=c99 flag to gcc

我在交流代碼中有這些標題

#include <stdio.h>
#include <unistd.h>

一切都編譯得很好,直到我將-std = c99標志添加到gcc命令(啟用限制 )。 這引發了以下錯誤。

警告:函數fileno隱式聲明

錯誤: F_LOCK未聲明(首次使用此功能)
錯誤:(每個未聲明的標識符僅報告一次錯誤:對於它出現的每個函數。)
錯誤: F_ULOCK未聲明(首先在此函數中使用

任何解決這些錯誤/警告的想法?

您需要告訴標題您想要POSIX擴展。 這些天,我使用:

#if __STDC_VERSION__ >= 199901L
#define _XOPEN_SOURCE 600
#else
#define _XOPEN_SOURCE 500
#endif /* __STDC_VERSION__ */

如果我用-std=c89編譯,它會給出正確的POSIX版本; 如果使用-std=c89編譯,則會提供正確的POSIX版本。 我在Solaris 9和10,MacOS X(10.4.x,10.5.x),HP-UX 11.x,Linux(RHEL4和5,SuSE 9和10)以及AIX 5.x和6.x - AFAICR上使用它,到目前為止沒有問題。

此節應出現在包含任何系統頭之前(在您自己的頭文件中或每個源文件中),或者您需要在編譯器命令行或其他類似機制上使用-D_XOPEN_SOURCE=600實現相同的效果。

嘗試

-std=gnu99

啟用所有擴展並仍使用C99語言增強功能。

您可以嘗試-D_BSD_SOURCE啟用BSD-isms或-D_SVID_SOURCE啟用System-V主題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM