Мне нужно перенести большую базу кода с 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
popen
ни в одном включенном заголовке. Иногда он говорит вам, что (как указано выше), или с другими вариантами он просто молча составляет (неявное) объявление, что может быть неправильным. Как уже говорилось ранее, вы должны исправить эту ошибку... - person gilez   schedule 27.02.2017