Я занимаюсь разработкой нескольких многоуровневых программ, и мне нужен макрос, который помогает обнаруживать изменения в переменной. Я хотел бы использовать этот макрос для обнаружения триггеров в var:
#define TRIG_UP(X) ({ \
static typeof(X) __val_ant=0; \
unsigned char __trig = (X) && !__val_ant; \
__val_ant = (X); \
(__trig );\
})
для использования в таких инструкциях, как:
if (TRIG_UP(var1))
var2 = TRIG_UP(var3);
компиляция с последним GCC и arm-gcc, он прекрасно работает, но с другими компиляторами (Visual Studio или Integrity) я получаю некоторые ошибки в объявлении. У меня вопрос, почему этот макрос зависит от компилятора? Это зависит от стандарта языка C? Как я могу сделать его совместимым со всеми ситуациями?
Спасибо всем!
Я получаю следующие ошибки:
error #29: expected an expression
var2 = ({
или
error C2059: syntax error : '{
в зависимости от компилятора.