Ste*_*ven 7 c unix gcc posix solaris
在Solaris中,gcc给了我
隐式声明函数`getopt'
编译时
#include <unistd.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
getopt(1,argv,"");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
getopt 的手册页说了一些关于包含unistd.h或stdio.h的内容,但即使我包括两者,我仍然会收到此警告.这是正常的吗?在Unix开发中使用未明确声明的函数?
您正在编译-ansi,并且在该模式下getopt可能无法使用,因为-ansi暗示C89符合模式.尝试删除该开关,或#define _GNU_SOURCE之前#include <unistd.h>. getopt()是POSIX,而不是ANSI.
编辑:你可能不需要_GNU_SOURCE.根据这个,你应该能够获得定义预处理器宏的功能,这是真的:
#if _POSIX_C_SOURCE >= 2 || _XOPEN_SOURCE || _POSIX_SOURCE
Run Code Online (Sandbox Code Playgroud)
见这对于在功能测试宏的更多信息.