【发布时间】:2019-10-05 23:19:36
【问题描述】:
我正在开发一些多设备程序,我需要一个宏来帮助检测变量的变化。我想使用这个宏来检测 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 : '{
取决于编译器。
【问题讨论】:
-
你遇到了什么错误?
-
我将它们添加到描述中