_FAR_NO_NAMELESS_UNIONS

Mакроопределение _FAR_NO_NAMELESS_UNIONS определяет, будут ли в структуре FarDialogItem использоваться неименованные объединения (union). Такие конструкции допустимы стандартом C++, но не в ANSI C.

Если не определено макроопределение _FAR_NO_NAMELESS_UNIONS, структура FarDialogItem имеет вид, совместимый с FAR 1.65 и FAR 1.70 beta 3 и более ранними. При этом структура FarDialogItem будет иметь следующий вид:

struct FarDialogItem
{
  ...
  union {
    int Selected;
    char *History;
    char *Mask;
    struct FarList *ListItems;
    CHAR_INFO *VBuf;
  };
  ...
  union {
    char Data[512];

    struct {
      DWORD PtrFlags;
      int   PtrLength;
      char *PtrData;
      char  PtrTail[1];
    } Ptr;
  };
};
Таким образом, для обращения, например, к полю Data структуры FarDialogItem достаточно будет писать Data, а к полю Selected - Selected.

Если определено макроопределение _FAR_NO_NAMELESS_UNIONS, в структуре будут использоваться именованные объединения. При этом структура будет совместима с компиляторами ANSI C, но не будет совместима на уровне исходных текстов с плагинами, написанными для FAR 1.65. Структура будет иметь следующий вид:

struct FarDialogItem
{
  ...
  union {
    int Selected;
    char *History;
    char *Mask;
    struct FarList *ListItems;
    CHAR_INFO *VBuf;
  } Param;
  ...
  union {
    char Data[512];

    struct {
      DWORD PtrFlags;
      int   PtrLength;
      char *PtrData;
      char  PtrTail[1];
    } Ptr;
  } Data;
};

В этом случае для обращения, например, к полю Data структуры необходимо будет писать Data.Data, а к полю Selected - Param.Selected.

То или иное макроопределение должна быть объявлено перед директивой #include "plugin.hpp":

#define _FAR_NO_NAMELESS_UNIONS
#include "plugin.hpp"

Внимание! Внимание!

Смотрите также:
GetMinFarVersion