Является ли следующая программа допустимой C-программой?
#include <stdio.h>
int main()
{
fwrite("x", 1, 1, stderr);
fflush(stderr);
fgetc(stderr);
fwrite("y", 1, 1, stderr);
return 0;
}
Обратите внимание, что я пытаюсь читать из stderr.
Когда я компилирую ее в Visual C ++ 2008 и запускаю ее, яполучить следующий вывод:
xy
, что имеет смысл.Однако, когда я перенаправляю stderr в файл (test.exe 2> foo.txt
), я получаю окно «Ошибка отладки подтверждения» с сообщением: «Несогласованный счетчик потоков. Промежуток между последовательным чтением и записью».Добавление fflush
между чтением и записью решает проблему.(Это происходит в отладочной сборке. В сборках выпуска вторая запись молча завершается сбоем).
Правильно ли это поведение или это ошибка библиотеки compiler ?Я нигде не смог найти никаких правил, описывающих, когда чтение или запись являются недопустимыми в C.