Цитата(GetSmart @ Jun 8 2016, 00:45)

А причём тут это? При разборе текста кода этих имён в тексте не должно быть и если даже писатель кода туда вставит имя из MAP-файла, то компилятору надо заругаться. Если "уникальные имена" становятся видимы постфактум, то как их предугадывать? )) Плюс это уже далеко от стандарта.
----------
Вообще, если в стандарте написано, что доступ к члену структуры/юниона происходит через оператор точка или ->, и явно не указано, что есть другой способ, то анонимная compound-переменная (ака структура/юнион) не разрешена. Операторы точка и -> бинарные. Внутри объявления compound-константы связь с типом есть неявно, без необходимости использовать имя. То бишь есть смысл/удобство его опускать в тексте и для сокращения текста и для анонимного варианта. И ещё между объявлением анонимного compound-типа (вместе с переменной) и доступом к члену нет возможностей локального замещения имён. Но, признаюсь, в реале мне никогда не надобились такие анонимы и не проверял создание таких переменных и констант ни на каком компиляторе.
Вообще то это стандартное свойство C++ и оно очень удобно.
Для чего нужно - пример выше я привел.
Доступ к члену вложенной структуры короче:
Motor.Mode;
Иначе пришлось бы писать:
Motor.Aaa.Bbb.Ccc.Mode;
Что никакого практического смысла для алгоритма не имеет, только загромождает текст.
Вот, чтобы не рыться, глава из руководства на IAR MSP430:
Код
ANONYMOUS STRUCTS AND UNIONS
When a structure or union is declared without a name, it becomes anonymous. The effect is that its members will only be seen in the surrounding scope.
Anonymous structures are part of the C++ language; however, they are not part of the C standard. In the IAR C/C++ Compiler for MSP430 they can be used in C if language extensions are enabled.
Example
In this example, the members in the anonymous union can be accessed, in function f, without explicitly specifying the union name:
struct S {
char mTag;
union {
long mL;
float mF;
};
} St;
void F(void)
{
St.mL = 5;
}
The member names must be unique in the surrounding scope. Having an anonymous struct or union at file scope, as a global, external, or static variable is also allowed. This could for instance be used for declaring I/O registers, as in this example:
__no_init volatile
union {
unsigned char IOPORT;
struct {
unsigned char Way: 1;
unsigned char Out: 1;
};
} @ 8;
/* Here the variables are used*/
void Test(void)
{
IOPORT = 0;
Way = 1;
Out = 1;
}
This declares an I/O register byte IOPORT at address 0. The I/O register has 2 bits declared, Way and Out. Note that both the inner structure and the outer union are anonymous.
Anonymous structures and unions are implemented in terms of objects named after the first field, with a prefix _A_ to place the name in the implementation part of the namespace. In this example, the anonymous union will be implemented through an object named _A_IOPORT.