Написано:

struct
{
//...
} A,B,C;


Это должно об'являть три переменных, типом которых является (безымянный) тип этой структуры.

Однако компилятор сообщает, что вместо A,B,C он ожидает идентификаторы. Но ведь это и есть идентификаторы!

Проверяю на кириллицу -- не подходит, буквы латинские. Заменяю на A0,B0,C0 -- всё работает.

Странно.

ОКАЗАЛОСЬ

что в заголовочном файле уже были строки:

#define A 0
#define B 1
#define C 2

В итоге последняя строка определения переменных после подстановок выглядела так:

} 0,1,2;

Да, тут идентификаторов действительно нет.

Главное, что в наличии таких дефайнов в заголовочном файле виноват я сам. Сначала я вместо об'ектов собирался использовать их условные номера. И подстановочные константы назвал по смыслу теми же именами. И забыл об этом.