Я работаю над созданием Qt 4.8.1 в VisualStudio 2005, и у меня возникла проблема с тем, что компилятор не смог найти _fileno
.Qt, windows и _POSIX_
После некоторых исследований я обнаружил, что в stdio.h имеет
#ifdef _POSIX_
_CRTIMP __checkReturn int __cdecl fileno(__in FILE * _File);
#else
_CRTIMP __checkReturn int __cdecl _fileno(__in FILE * _File);
#endif
Я посмотрел через кварт кода и обнаружили, что qfsfilengine_win.cpp и qfilesystemengine_win.cpp оба имеют
#define _POSIX_
Мне кажется, что это было бы ошибкой, и если я удалю эти строки, это, похоже, будет успешным.
Кто-нибудь знает, почему эти файлы будут определять _POSIX_
?
Спасибо.
Это не ошибка, имена posix устарели долгое время. Эти файлы не определяют * '_POSIX_', они просто #if. Похож на то, что Qt взял короткий вызов, чтобы попытаться решить проблему. Не редактируйте файлы заголовков компилятора, вы выкопаете себе действительно глубокую дыру. –
qfsfilengine_win.cpp и qfilesystemengine_win.cpp обе имеют #define _POSIX _ в них. stdio.h просто # если это так, но мой вопрос касается файлов Qt cpp, которые, похоже, имеют неправильный #define. – Liron
Ну, это технически некорректно в Windows, но это те хаки, которые используют библиотеки, когда им нужно поддерживать несколько платформ и компиляторов. Вы задаете XY-вопрос. Вы предполагаете, что Y - проблема, но вряд ли это реальная проблема. Мы не представляем, как выглядит X. Если вы хотите использовать 'fileno' в своем коде вместо' _fileno', то вы, вероятно, не используете класс QSomething, как вы должны. –