[英]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.