Solaris 中的 getopt 隐式声明?
在 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您正在使用
-ansi
进行编译,在该模式下getopt
可能不可用,因为-ansi
意味着 C89 一致模式。尝试删除该开关,或在#include
之前添加#define _GNU_SOURCE
。getopt()
是 POSIX,而不是 ANSI。编辑:您可能不需要
_GNU_SOURCE
。根据 this,你应该能够通过定义预处理器宏来获得功能,这样这是正确的:请参阅 this 有关功能测试宏的更多信息。
You're compiling with
-ansi
, and in that modegetopt
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:See this for more information on the feature test macros.
手册页说要包含
stdio.h
,而不是stdlib.h
。包含stdio.h
是否可以解决问题?The man page says to include
stdio.h
, notstdlib.h
. Does includingstdio.h
fix the problem?使用 gnu99 为我解决了这个问题:
这是使用
unistd.h
。Using gnu99 solved it for me:
This is with
unistd.h
.