Что означает "const char far * inStrSource"? - PullRequest
3 голосов
/ 24 января 2011

Я слежу за статьей о загрузчике,
(http://www.codeproject.com/KB/tips/boot-loader.aspx?msg=3745692#xx3745692xx)
и я нашел эту часть:

"const char far* inStrSource"

Всего:

typedef unsigned char   byte;
typedef unsigned short  word;
typedef unsigned long   dword;
typedef char            bool;

byte CString::Strlen( const char far* inStrSource )
{
        byte lenghtOfString = 0;

        while(*inStrSource++ != '\0')
        {
            ++lenghtOfString;
        }
        return lenghtOfString;
}

Может кто-нибудь объяснить мне, пожалуйста, почему он определяет тип символа как bool, и что происходит с этим указателем?

MVC ++ 10 распознает их как ошибку (typedef char bool и char far * intSource), однако компиляция с 16-битным VC 1.52 работает без сомнения.

Ответы [ 3 ]

4 голосов
/ 24 января 2011

В компьютере с сегментированной архитектурой дальний указатель - это указатель, который включает в себя селектор сегмента, позволяющий указывать адреса за пределами текущего сегмента.

Здесь вы можете найти больше .На самом деле, вышеупомянутое определение украдено из Википедии:)

РЕДАКТИРОВАТЬ: Кажется, что подобный вопрос уже ответил в stackoverflow .

2 голосов
/ 24 января 2011

Это дальний указатель : указатель, который может быть длиннее (то есть: брать больше битов), чем нормальные указатели.

Используется для ссылки на ячейки памяти, которыене могут быть обработаны обычными указателями (то есть: если указатели в ваших системах состоят из 8 битов, вы можете ссылаться только на 2 ^ 8 ячеек памяти; если вам нужно обратиться к большему количеству памяти, вы можете использовать дальний указатель).

0 голосов
/ 25 января 2011

Этот код сделан с помощью Microsoft Visual Studio 1.52 для 16-битных систем. Это были первые дни C ++, и реализации на самом деле не соответствовали стандартам. Там даже не было никакого стандарта.

Итак, он определяет bool для char, так как у этого компилятора C ++ нет встроенного типа bool, и он хочет его.

far обозначает дальний указатель , который является указателем, состоящим из селектора сегмента и смещения, так что вы можете указывать на вещи вне ваших обычных 64 КБ памяти, на которые могут обращаться «нормальные» указатели , Сегодня вы вряд ли увидите что-либо подобное, например, плоское адресное пространство, если оно обычно используется, и части (в ОС или загрузчике), которые все еще должны заботиться о модели сегментированной памяти процессоров X86, часто пишутся на ассемблере

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...