#visual-studio #visual-c #compiler-errors
Вопрос:
Я переношу проект Windows с VC6 на VS2019, но получаю сообщение об ошибке:
Идентификатор E0020 «_segment» не определен
Я пытаюсь найти определение _segment, но безуспешно. Итак, мне интересно, возможно ли, что _segment-это ключевое слово в VC6. Однако я все еще ничего не нахожу в Google.
Есть идеи, как исправить ошибку? Спасибо.
Код таков:
#ifndef _MSC_Ver
#define _MSC_Ver
#endif
/* MS-C ?? */
#ifdef _MSC_VER
_segment SegDefine,SegType,SegSym,SegCode;
#endif
#define ALLOC_C
#include "common.h"
#include <malloc.h>
#include "extern.h"
#ifdef MSDOS
#include <dos.h>
#ifndef __WATCOMC__
#include <memory.h>
#endif
#endif
/* MM(????)? */
#define MaxClass 8
#ifdef _MSC_VER /* MS-C ?? */
/* FARBased ? */
static USHORT mmFarSeg[MaxClass]; /* ?? */
static USHORT mmFarBase[MaxClass]; /* */
static USHORT mmFarOrg[MaxClass]; /* ?? */
static USHORT mmFarSize[MaxClass]; /* */
Ответ №1:
_segment
было ключевым словом в 16-разрядных MSC 6 и VC 1.x (не VC 6), связанным с сегментацией памяти x86 и _based
указателями. Ключевое слово было удалено в 32-разрядных версиях VC, начиная с VC 2.0. Из Microsoft Q67882:
Следующие ключевые слова были впервые введены в Microsoft C версии 6.0:
_based
_segment
[…]
ПРИМЕЧАНИЕ. В 32-разрядной версии Microsoft Visual C версии 2.0
_segment
ключевое слово было удалено, а функциональность__based
ключевого слова изменена.
Комментарии:
1. Есть ли соответствующее ему ключевое слово в VS2019? Если нет, то чем я могу заменить _segment? Спасибо!
2. @David Нет соответствующего ключевого слова, потому что в моделях плоской памяти, используемых в 32 — и 64-разрядных версиях, больше нет » сегментов «, о которых можно было бы говорить в настоящее время. VC по-прежнему поддерживает указатели на основе , хотя они имеют довольно специализированное применение. Имеет ли смысл полностью переписать или вообще отказаться от 16-битного кода, в котором использовалась
_segment
адресация, невозможно ответить, не понимая полностью, что делал старый код в первую очередь.