Какие параметры gcc использовать для использования того же стандарта, что и solaris cc -Xa

Мне нужно перенести большую базу кода с Solaris на Linux.

Компилятор C имеет параметр Xa, что означает, что он использует «расширения совместимости ISO C плюс K&R C».

Существует копия справочной страницы об этом здесь.

В Linux у меня есть несколько предупреждений о методе popen, которых нет в Solaris:

toto.c:7: warning: implicit declaration of function 'popen'
toto.c:7: warning: assignment makes pointer from integer without a cast

Какие параметры я должен использовать на моем gcc, чтобы использовать тот же стандарт C? Без какой-либо опции или с -std=gnu89/99 у меня нет предупреждения.

С -ansi или -std=c89/99 у меня есть предупреждение.

Безопасно ли использовать стандарт vanilla или gnu для эмуляции опции Solaris -Xa?

Изменить: исходный код toto для пользователя 31264:

#include <stdio.h>

int main()
{
    FILE * FD;
    FD = popen("toto", "r");
    return 0;
}

И часть stdio.h в Linux:

#if (defined __USE_POSIX2 || defined __USE_SVID  || defined __USE_BSD || \
     defined __USE_MISC)
/* Create a new stream connected to a pipe running the given command.

   This function is a possible cancellation point and therefore not
   marked with __THROW.  */
extern FILE *popen (__const char *__command, __const char *__modes) __wur;

/* Close a stream opened by popen and return the status of its child.

   This function is a possible cancellation point and therefore not
   marked with __THROW.  */
extern int pclose (FILE *__stream);
#endif

person Guillaume    schedule 27.02.2017    source источник
comment
Вы должны исправить эти предупреждения, пока вы это делаете. K&R C сегодня просто не работает.   -  person Jabberwocky    schedule 27.02.2017
comment
Кодовая база большая и старая. Конечно. Но я хочу, чтобы сначала он работал одинаково в Linux, а затем обновлял то, что можно обновить.   -  person Guillaume    schedule 27.02.2017
comment
Пожалуйста, опубликуйте toto.c   -  person user31264    schedule 27.02.2017
comment
Настоящая проблема заключается в том, что компилятор не находит объявления popen ни в одном включенном заголовке. Иногда он говорит вам, что (как указано выше), или с другими вариантами он просто молча составляет (неявное) объявление, что может быть неправильным. Как уже говорилось ранее, вы должны исправить эту ошибку...   -  person gilez    schedule 27.02.2017
comment
Вы также переходите с 32-битной (в Solaris) на 64-битную (в Linux)? Вы можете рассмотреть возможность сделать это в 2 шага. никакой вариант (т. е. по умолчанию) не кажется правильным выбором. Если вы выберете более строгий -std=c90, вам понадобится что-то вроде -D_XOPEN_SOURCE=600, чтобы иметь доступ к popen и другим подобным функциям.   -  person Marc Glisse    schedule 28.02.2017
comment
@Marc, так что gcc с std по умолчанию должен создавать что-то похожее на компилятор Solaris C с -Xa ?   -  person Guillaume    schedule 28.02.2017
comment
Я не думаю, что есть какая-либо опция, которая даст вам что-то похожее на -Xa, но по умолчанию она довольно разрешительная.   -  person Marc Glisse    schedule 28.02.2017