Преобразования из целочисленного типа в указатель и из указателя в целочисленный тип
====================================================================================

В данной статье описаны опции настройки предупреждений, относящихся к преобразованиям
из целочисленного типа в указатель и из указателя в целочисленный тип. Основной смысл
статьи в том, чтобы все опции, относящиеся к данным преобразованиям были перед глазами
в общей куче. Это полезно для понимания того, как упростить процесс портирования программ
из незащищённого режима в защищённый. В данном случае речь идёт о том, что в защищённом
режиме операция преобразования из целочисленного типа в указатель в общем случае является
недопустимой, т.к. полученный таким образом указатель нельзя разыменовывать

Неявные преобразования
----------------------

Неявные преобразования из целочисленного типа в указатель и из указателя в целочисленный
тип всегда можно считать "плохими". Единственная опция предупреждения для таких
преобразований работает симметрично как в незащищённых режимах, так и в защищённом
режиме

| ``-Wint-conversion``

  Предупреждать о неявных преобразованиях из целочисленного типа в указатель и из
  указателя в целочисленный тип. По умолчанию опция включена. Работа опции симметрична
  gcc. Опция работает только в режиме языка C (в режиме языка C++ игнорируется)

  Для информации: неявные преобразования разрешены только в языке C. В языке C++ неявные
  преобразования запрещены. В gcc неявные преобразования в Си++ разрешены по опции
  ``-fpermissive``, но в lcc данная функциональность пока не поддержана

Явные преобразования в незащищнных режимах
------------------------------------------

Все опции из данного раздела работают только в незащищённых режимах, а в защищённом
режиме молча игнорируются

| ``-Wint-to-pointer-cast``

  Предупреждать о явных преобразованиях из целочисленного типа в указатель с отличающимся
  размером. По умолчанию опция включена. Работа опции симметрична gcc. Опция работает
  в режиме языков C и C++

  По аналогии с gcc опция не выдаёт предупреждения для преобразований из целочисленной
  константы в указатель (даже если происходит потеря значащих бит), а так же для
  ``reinterpret_cast``'ов из языка C++

| ``-Wint-to-pointer-cast-same-size``

  Предупреждать о явных преобразованиях из целочисленного типа в указатель с совпадающим
  размером. По умолчанию опция выключена. В gcc такой опции нет. Опция работает в режиме
  языков C и C++

  Для симметрии с опцией ``-Wint-to-pointer-cast`` опция
  ``-Wint-to-pointer-cast-same-size`` не выдаёт предупреждения для преобразований из
  целочисленной константы в указатель, а так же для reinterpret_cast'ов из языка C++

  Сама по себе опция большого смысла не имеет, однако она полезна в тех случаях, когда
  требуется оценить масштаб бедствия при портировании программ из незащищённых режимов
  в защищённый: опция позволяет обнаружить преобразования из целочисленного типа в
  указатель, которые не обнаруживает опция ``-Wint-to-pointer-cast``

| ``-Wpointer-to-int-cast``

  Предупреждать о явных преобразованиях из указателя в целочисленный тип с отличающимся
  размером. По умолчанию опция включена. Работа опции симметрична gcc. Опция работает
  только в режиме языка C (в режиме языка C++ игнорируется)

  Для информации: в языке C++ запрещены явные преобразования из указателя в более
  короткий целочисленный тип, однако по аналогии с gcc по опции ``-fpermissive`` такие
  преобразования разрешены. В этом случае предупреждения будут привязаны к опции
  ``-fpermissive``, но не к ``-Wpointer-to-int-cast``

| ``-Wpointer-to-int-cast-same-size``

  Предупреждать о явных преобразованиях из указателя в целочисленный тип с совпадающим
  размером. По умолчанию опция выключена. В gcc такой опции нет. Опция работает только
  в режиме языка C (в режиме языка C++ игнорируется для симметрии с опцией
  ``-Wpointer-to-int-cast``)

  Сама по себе опция большого смысла не имеет, однако она полезна в тех случаях, когда
  требуется оценить масштаб бедствия при портировании программ из незащищённых режимов
  в защищённый: опция позволяет обнаружить преобразования из указателя в целочисленный
  тип, которые не обнаруживает опция ``-Wpointer-to-int-cast``

Явные преобразования в защищнном режиме
---------------------------------------

Все опции из данного раздела работают только в защищённом режиме, а в незащищённых
режимах молча игнорируются. Все опции включены в состав опции ``-Wall-protected``.
Ни одной из этих опций в gcc нет

| ``-Wint32-to-pointer-cast-protected``

  Предупреждать о явных преобразованиях из целочисленного типа размером 32 бита и меньше
  в указатель. По умолчанию опция включена. Опция работает в режиме языков C и C++

  Для симметрии с опцией ``-Wint-to-pointer-cast`` опция
  ``-Wint32-to-pointer-cast-protected`` не выдаёт предупреждения для преобразований
  из целочисленной константы в указатель, а так же для ``reinterpret_cast``'ов из
  языка C++

| ``-Wint64-to-pointer-cast-protected``

  Предупреждать о явных преобразованиях из целочисленного типа размером 64 бита
  в указатель. По умолчанию опция выключена. Опция работает в режиме языков C и C++

  Для симметрии с опцией ``-Wint-to-pointer-cast`` опция
  ``-Wint64-to-pointer-cast-protected`` не выдаёт предупреждения для преобразований
  из целочисленной константы в указатель, а так же для ``reinterpret_cast``'ов из
  языка C++

| ``-Wint128-to-pointer-cast-protected``

  Предупреждать о явных преобразованиях из целочисленного типа размером 128 бит
  в указатель. По умолчанию опция выключена. Опция работает в режиме языков C и C++

  Для симметрии с опцией ``-Wint-to-pointer-cast`` опция
  ``-Wint128-to-pointer-cast-protected`` не выдаёт предупреждения для преобразований
  из целочисленной константы в указатель, а так же для ``reinterpret_cast``'ов из
  языка C++

| ``-Wpointer-to-int32-cast-protected``

  Предупреждать о явных преобразованиях из указателя в целочисленный тип размером
  32 бита и меньше. По умолчанию опция включена. Опция работает только в режиме языка C
  (в режиме языка C++ игнорируется для симметрии с опцией ``-Wpointer-to-int-cast``)

  Для информации: в языке C++ запрещены явные преобразования из указателя в более
  короткий целочисленный тип, однако по аналогии с gcc по опции ``-fpermissive`` такие
  преобразования разрешены. В этом случае предупреждения будут привязаны к опции
  ``-fpermissive``, но не к ``-Wpointer-to-int32-cast-protected``

| ``-Wpointer-to-int64-cast-protected``

  Предупреждать о явных преобразованиях из указателя в целочисленный тип размером
  64 бита. По умолчанию опция выключена. Опция работает в режиме языков C и C++

  Для информации: в языке C++ запрещены явные преобразования из указателя в более
  короткий целочисленный тип. Тем не менее, в защищённом режиме явные преобразования
  из указателя в целочисленный тип размером 64 бита разрешены. Это обусловлено тем,
  что тип ``intptr_t`` в защищённом режиме является 64-битным

| ``-Wpointer-to-int128-cast-protected``

  Предупреждать о явных преобразованиях из указателя в целочисленный тип размером
  128 бит. По умолчанию опция выключена. Опция работает в режиме языков C и C++

