Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > mingw-64


Автор: sergioK1 23.2.2020, 02:59

проще не бывает 
Код

C:\mingw-w64\mingw32\bin\gcc.exe  main.c 


сам код

Код

#include <stdio.h>
#include <string.h>
 

int main( ) {
    fflush(stdout);
    printf( "hello world " );
 
   return 0;
}  



на терминал ничего не печатется , просто висит курсор, перпобовал все что нашел в гугле, 
ничего не помогает, кто сталкивался с таким ? Виндос десктоп 10 версия ,  gcc версия 8.1.0  

Автор: mabrarov 23.2.2020, 20:43
Похоже на буферизацию. 

https://stackoverflow.com/questions/1716296/why-does-printf-not-flush-after-the-call-unless-a-newline-is-in-the-format-strin

Что если добавить fflush(stdout) после вывода:

Код

#if defined(WIN32)
#include <tchar.h>
#include <windows.h>
#endif

#include <cstdio>

#if defined(WIN32)
int _tmain(int /*argc*/, _TCHAR* /*argv*/[])
#else
int main(int /*argc*/, char* /*argv*/[])
#endif
{
  std::fflush(stdout);
  std::printf("hello world");
  std::fflush(stdout);
  return 0;
}


или 

Код

#if defined(WIN32)
#include <tchar.h>
#include <windows.h>
#endif

#include <iostream>

#if defined(WIN32)
int _tmain(int /*argc*/, _TCHAR* /*argv*/[])
#else
int main(int /*argc*/, char* /*argv*/[])
#endif
{
  std::cout << "hello world" << std::flush;
  return 0;
}



?

Автор: sergioK1 24.2.2020, 01:55
Цитата(mabrarov @ 23.2.2020,  19:43)
Похоже на буферизацию. 

https://stackoverflow.com/questions/1716296/why-does-printf-not-flush-after-the-call-unless-a-newline-is-in-the-format-strin

Что если добавить fflush(stdout) после вывода:

Код

#if defined(WIN32)
#include <tchar.h>
#include <windows.h>
#endif

#include <cstdio>

#if defined(WIN32)
int _tmain(int /*argc*/, _TCHAR* /*argv*/[])
#else
int main(int /*argc*/, char* /*argv*/[])
#endif
{
  std::fflush(stdout);
  std::printf("hello world");
  std::fflush(stdout);
  return 0;
}


или 

Код

#if defined(WIN32)
#include <tchar.h>
#include <windows.h>
#endif

#include <iostream>

#if defined(WIN32)
int _tmain(int /*argc*/, _TCHAR* /*argv*/[])
#else
int main(int /*argc*/, char* /*argv*/[])
#endif
{
  std::cout << "hello world" << std::flush;
  return 0;
}



?

у  меня Си а не плюсы, fflush(stdout) не помогло , но помогло рестарт винды, хз почему , 
он как то не хорошо с gcc под Windows работает, нету времени студию ставить ,

Автор: mabrarov 24.2.2020, 11:49
Windows 10 x64 Pro 1703 

Код

#if defined(WIN32)
#include <tchar.h>
#include <windows.h>
#endif

#include <stdio.h>

#if defined(WIN32)
int _tmain(int argc, _TCHAR* argv[])
#else
int main(int argc, char* argv[])
#endif
{
  fflush(stdout);
  printf("hello world");
  fflush(stdout);
  return 0;
}


Код

$ set MINGW_HOME=C:\Program Files\MinGW\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\mingw64
$ set PATH=%MINGW_HOME%\bin;%PATH%
$ gcc --version
gcc (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 8.1.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ gcc.exe main.c

$ echo %errorlevel%
0

$ a.exe
hello world


Опять же MinGW 8.1.0 x64. 32-битного нет чтобы проверить.

И даже оригинальный вариант работает

Код

#if defined(WIN32)
#include <tchar.h>
#include <windows.h>
#endif

#include <stdio.h>

#if defined(WIN32)
int _tmain(int argc, _TCHAR* argv[])
#else
int main(int argc, char* argv[])
#endif
{
  fflush(stdout);
  printf("hello world");
  return 0;
}

Автор: mabrarov 24.2.2020, 22:44
Проверил c MinGW 8.1.0 x86:

Код

$ dir /B
main.c

$ type main.c
#if defined(WIN32)
#include <tchar.h>
#include <windows.h>
#endif

#include <stdio.h>

#if defined(WIN32)
int _tmain(int argc, _TCHAR* argv[])
#else
int main(int argc, char* argv[])
#endif
{
  fflush(stdout);
  printf("hello world");
  return 0;
}

$ docker run --rm -e PATH=C:\mingw32\bin abrarov/mingw:2.6.0 g++ --version
g++ (i686-posix-dwarf-rev0, Built by MinGW-W64 project) 8.1.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ docker run --rm -v "%cd%:C:\build" -e PATH=C:\mingw32\bin -w C:\build abrarov/mingw:2.6.0 g++ -static main.c

$ echo %errorlevel%
0

$ dir /B
a.exe
main.c

$ a.exe
hello world

$ ver
Microsoft Windows [Version 10.0.17763.720]


Возможно и вправду что-то с Windows было не так

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)