Solaris 中的 getopt 隐式声明?

发布于 2024-08-15 03:21:34 字数 466 浏览 5 评论 0原文

在 Solaris 中,gcc 给了我

函数`getopt'的隐式声明

编译时

#include <unistd.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    getopt(1,argv,"");
    return 0;
} 

getopt 的手册页 提到了有关包含 unistd.h 或 stdio.h 的内容,但是即使我包含了两者,我仍然收到此警告。这是正常的吗?在 Unix 开发中使用未显式声明的函数很常见吗?

In Solaris, gcc gives me

implicit declaration of function `getopt'

when compiling

#include <unistd.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    getopt(1,argv,"");
    return 0;
} 

The man page for getopt says something about including unistd.h or stdio.h, however even though I'm inluding both I still get this warning. Is this normal? Is using functions that aren't explicitly declared common in Unix development?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

黄昏下泛黄的笔记 2024-08-22 03:21:34

您正在使用 -ansi 进行编译,在该模式下 getopt 可能不可用,因为 -ansi 意味着 C89 一致模式。尝试删除该开关,或在 #include 之前添加 #define _GNU_SOURCEgetopt() 是 POSIX,而不是 ANSI。

编辑:您可能不需要_GNU_SOURCE。根据 this,你应该能够通过定义预处理器宏来获得功能,这样这是正确的:

#if _POSIX_C_SOURCE >= 2 || _XOPEN_SOURCE || _POSIX_SOURCE

请参阅 this 有关功能测试宏的更多信息。

You're compiling with -ansi, and in that mode getopt might not be available, since -ansi implies C89 conformant mode. Try removing that switch, or #define _GNU_SOURCE before #include <unistd.h>. getopt() is POSIX, not ANSI.

Edit: You probably don't need _GNU_SOURCE. According to this, you should be able to get the functionality with defining preprocessor macros such that this is true:

#if _POSIX_C_SOURCE >= 2 || _XOPEN_SOURCE || _POSIX_SOURCE

See this for more information on the feature test macros.

無處可尋 2024-08-22 03:21:34

手册页说要包含 stdio.h,而不是 stdlib.h。包含 stdio.h 是否可以解决问题?

The man page says to include stdio.h, not stdlib.h. Does including stdio.h fix the problem?

时光暖心i 2024-08-22 03:21:34

使用 gnu99 为我解决了这个问题:

gcc -std=gnu99 file.c

这是使用 unistd.h

Using gnu99 solved it for me:

gcc -std=gnu99 file.c

This is with unistd.h.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文