Цитата(Professor Chaos @ Aug 5 2018, 22:53)

Если в объявлении типа Flag_State_t убрать volatile - предупреждения исчезнут.
Все правильно ругается компилятор, ведь typedef volatile можно применить лишь к
типам данных: переменные, структуры и классы, а
enum к ним не относится.
По сути
enum - это что-то вроде #define, "область деятельности" препроцессора, но не самого компилятора как такового. Это если грубо.
По сути
volatile - это некое "указание" компилятору что можно делать, а что нет с некоторым объектом данных или объектом указанного типа данных (например: typedef volatile struct).
От себя добавлю:
лучше использовать volatile непосредственно при объявлении/создании объекта (переменной), а не вставлять его при объявлении типа данных.
Это позволяет дать возможность компилятору оптимизировать те куски кода, где это действительно нужно, а точнее - только с теми объектами, которые явно указаны, что они
volatile.
В противном случае этот typedef с "внедренным" volatile может оказаться в коде там, где volitile окажется даже вредным. Явно это не увидите.
"В довесок": лучше вообще избегать глобальных переменных (поверьте, это вполне реально), тогда и volatile вообще не будет нужен
ps Принято указывать версию компилятора и версию самой среды. Хотя в данном случае это не важно, т.к. речь про неправильное применение компилятора как такового.