История изменений
Исправление drfaust, (текущая версия) :
Видишь warning: implicit declaration of function ‘popen’ [-Wimplicit-function-declaration]? Это оно самое.
Это не тоже самое:
1.c:6:4: предупреждение: приведение к типу указателя от целого другого размера [-Wint-to-pointer-cast]
И не тоже самое в шланге
[faust@localhost C]$ clang -ansi 1.c
1.c:6:4: warning: cast to 'FILE *' (aka 'struct _IO_FILE *') from smaller integer type 'int' [-Wint-to-pointer-cast]
В stdio.h popen() обёрнут в __USE_POSIX2, но включение его cитуацию не меняет. К тому же прога собирается и работает и в 32 и в 64 бита (более сложный вариант - этот я урезал, что бы ничто не мешало).
Я так понял, что действительно компилеры считают эту функцию новой и решают её сделать return int; по стандарту, но почему-то не ругаются на отсутствие прототипа :( Включение -D_POSIX_C_SOURCE действительно меняет ситуацию.
Исходная версия drfaust, :
Видишь warning: implicit declaration of function ‘popen’ [-Wimplicit-function-declaration]? Это оно самое.
Это не тоже самое:
1.c:6:4: предупреждение: приведение к типу указателя от целого другого размера [-Wint-to-pointer-cast]
И не тоже самое в шланге
[faust@localhost C]$ clang -ansi 1.c
1.c:6:4: warning: cast to 'FILE *' (aka 'struct _IO_FILE *') from smaller integer type 'int' [-Wint-to-pointer-cast]
В stdio.h popen() обёрнут в __USE_POSIX2, но включение его cитуацию не меняет. К тому же прога собирается и работает и в 32 и в 64 бита (более сложный вариант - этот я урезал, что бы ничто не мешало).
Я так понял, что действительно компилеры считают эту функцию новой и решают её сделать return int; по стандарту, но почему-то не ругаются на отсутствие прототипа :( Включение -D_POSIX_C_SOURCE действительно меняет ситуацию.