неявное объявление getopt в Солярисе?

В Солярисе gcc дает мне

неявное объявление функции 'getopt'

при компиляции

#include 
#include 

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

В странице справочника для getopt говорится что-то о включении unistd.h или stdio.h, однако даже при том, что я - inluding оба, которые я все еще получаю это предупреждение. Действительно ли это нормально? Использует функции, которые явно не объявляются распространенные в разработке Unix?

7
задан alanc 18 August 2012 в 04:42
поделиться

2 ответа

На странице руководства говорится, что включить stdio.h , а не stdlib.h .

1
ответ дан 6 December 2019 в 23:06
поделиться

Вы компилируете с помощью -ansi , и в этом режиме getopt может быть недоступен, поскольку -ansi подразумевает Режим соответствия C89. Попробуйте удалить этот переключатель или #define _GNU_SOURCE перед #include . getopt () - это POSIX, а не ANSI.

Изменить : Вам, вероятно, не понадобится _GNU_SOURCE . Согласно this , вы должны иметь возможность получить функциональность с определением макросов препроцессора, чтобы это было правдой:

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

См. this для получения дополнительной информации о макросах тестирования функций.

9
ответ дан 6 December 2019 в 23:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: