# _FAR_NO_NAMELESS_UNIONS

The macro _FAR_NO_NAMELESS_UNIONS controls whether the FarDialogItem structure uses anonymous unions. Anonymous unions are a language feature that is allowed by the C++ standard but not supported in ANSI C.

If the macro _FAR_NO_NAMELESS_UNIONS is not defined, the `FarDialogItem` structure will be compatible with FAR Manager versions prior to FAR 1.70 beta 3 (inclusive). So the FarDialogItem structure will have the following form:

    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;
      };
    };

So to access the `Data` member of the FarDialogItem structure it will be suficient to write `Data`, and to access the `Selected` member - `Selected`.

If the macro _FAR_NO_NAMELESS_UNIONS is defined, the structure will use named unions. Then it will be compatible with ANSI C compilers, but will not be source-level compatible with plugins written for FAR 1.65. The structure will have the following form:

    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;
    };

In this case to access the `Data` member of the structure you will have to write `Data.Data`, and to access the `Selected` member - `Param.Selected`.

The macro must be defined before the `#include "plugin.hpp"` directive:

    #define _FAR_NO_NAMELESS_UNIONS
    #include "plugin.hpp"

Attention!

- In FAR 1.70 beta 4, the default variant is compatible with old plugins (_FAR_NO_NAMELESS_UNIONS is not defined). However, in FAR 1.70 release the new default will be _FAR_NO_NAMELESS_UNIONS. So if you want your plugins to be source-level compatible with FAR 1.70 release, you can right now define the _FAR_NO_NAMELESS_UNIONS macro and modify the source code of your plugins accordingly.

See also:
GetMinFarVersion