Quando li a documentação do fflush
, ela diz que retorna 0, se foi bem-sucedido e retorna EOF (EOF está na minha máquina -1) caso contrário. (veja https://man7.org/linux/man-pages/man3/fflush.3.html ou https://en.cppreference.com/w/c/io/fflush )
Então criei o seguinte exemplo:
#include<cstdio>
#include<iostream>
int main()
{
FILE* fp = std::fopen("/tmp/test", "w+");
std::fclose(fp);
std::cout << std::fflush(fp) << std::endl;
return 0;
}
Se eu compilar com g++ minimal.cpp
ou g++ -O2 -DNDEBUG minimal.cpp
, ele imprime -1. Que é o que eu esperava.
Entretanto, quando eu compilo com g++ minimal.cpp -fsanitize=address
ou g++ minimal.cpp -fsanitize=thread
, ele imprime apenas 0.
Também posso reproduzir o mesmo problema com o clang.
Como isso pode ser?
Usei g++-12 e clang-15 na minha máquina Debian 12 amd64. É sempre o mesmo resultado (ou seja, fflush
retorna 0 em vez de -1).