В Солярисе gcc дает мне
неявное объявление функции 'getopt'
при компиляции
#include
#include
int main(int argc, char *argv[]) {
getopt(1,argv,"");
return 0;
}
В странице справочника для getopt говорится что-то о включении unistd.h или stdio.h, однако даже при том, что я - inluding оба, которые я все еще получаю это предупреждение. Действительно ли это нормально? Использует функции, которые явно не объявляются распространенные в разработке Unix?
На странице руководства говорится, что включить stdio.h
, а не stdlib.h
.
Вы компилируете с помощью -ansi
, и в этом режиме getopt
может быть недоступен, поскольку -ansi
подразумевает Режим соответствия C89. Попробуйте удалить этот переключатель или #define _GNU_SOURCE
перед #include
. getopt ()
- это POSIX, а не ANSI.
Изменить : Вам, вероятно, не понадобится _GNU_SOURCE
. Согласно this , вы должны иметь возможность получить функциональность с определением макросов препроцессора, чтобы это было правдой:
#if _POSIX_C_SOURCE >= 2 || _XOPEN_SOURCE || _POSIX_SOURCE
См. this для получения дополнительной информации о макросах тестирования функций.