neor007i Ответов: 2

Использование модификаторов типа (near, far, huge) с нормальными переменными в C


Я использовал модификаторы типов (far,near,huge) с нормальными переменными, а не указателями, и обнаружил, что эти модификаторы типов указателей применимы только для глобальной нормальной переменной, но при использовании с переменной, локальной для блока, генерируется ошибка.

int near a,far b,huge c;

    int main()
    {
      int d,e,f;
      printf("\n address of a=%u ,b=%u ,c=%u ,d=%u ,e=%u ,f=%u",&a,&b,&c,&d,&e,&f);
      return 0;
      }


почему это разрешено с глобальной переменной, а не с локальной переменной? Кроме того,что делает переменная, наконец, становится то есть она становится указателем, целым числом с большим диапазоном или совершенно чем-то другим.

Вопрос уже размещен более года на сайте StackOverflow

Что я уже пробовал:

int near a,far b,huge c;

    int main()
    {
      int d,e,f;
      // int near a,far b,,huge c;
      // long int near a,far b,huge c;
      // long long int near a,far b,huge c;

      //printf("\n size of a=%d ,b=%d ,c=%d ,d=%d ,e=%d ,f=%d",sizeof(a),sizeof(b),sizeof(c),sizeof(d),sizeof(e),sizeof(f));
      printf("\n address of a=%u ,b=%u ,c=%u ,d=%u ,e=%u ,f=%u",&a,&b,&c,&d,&e,&f);
      return 0;
      }

2 Ответов

Рейтинг:
1

«_Superman_»

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

Но чтобы ответить на ваш вопрос, все локальные переменные находятся в одном сегменте (стеке), и, следовательно, ключевые слова к ним не относятся.


neor007i

#include< stdio.h>
тап_п(){
char far *p =(char far *) 0x55550005;
char far *q =(char far *)0x53332225;
* Р = 80;
(*p)++;
printf ("%d",*q);
возвращает 0;
}

neor007i

Как я уже сказал, указатели far разрешены в сегменте стека, но когда я использовал far с нормальной переменной, не имеющей типа указателя, возникает ошибка.

Рейтинг:
0

KarstenK

Это старое ключевое слово для компиляторов, чтобы улучшить модель адреса указателя. Хорошее объяснение находится в cplusplus-форум.

В современном мире программирования эти ключевые слова не нужны.

С небольшим количеством Google вы бы нашли ответ в прошлом году. Как и объяснение того, что дальний указатель в Википедии.


neor007i

опять же модификаторы типа используются с обычными переменными, а не с указателями.