Я портирую существующий код, совместимый с компилятором VC12, на VC14 (Visual Studio 2015), и я столкнулся с проблемой разрыва кода.
Пример программы для воспроизведения вопроса:
#include "iostream"using namespace std;
#define mybuffer(param) ((param)->_flag & (_IOMYBUF))
int main()
{
mybuffer(stderr); // I don't understand what is the purpose of this line.
// So, facing issue in replacing this code statement.
return 0;
}
На visual studio 2013: вышеуказанная программа работает абсолютно нормально.
На visual studio 2015: вышеуказанная программа выдает ошибку компиляции.
Ошибка C2039 «_flag»: не является членом «_iobuf»
Ошибка C2065 ‘_IOMYBUF’: необъявленный идентификатор
Анализ:
В VS2013 wchar.h имеет следующее:
struct _iobuf {
char *_ptr;
int _cnt;
char *_base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char *_tmpfname;
};
typedef struct _iobuf FILE;
Где, как в VS2015, в файле: corecrt_wstdio.h
#ifndef _FILE_DEFINED
#define _FILE_DEFINED
typedef struct _iobuf
{
void* _Placeholder;
} FILE;
#endif
Можете ли вы помочь мне предложить исправление для вышеуказанной ошибки?
Задача ещё не решена.
Других решений пока нет …