c - 为什么这个宏编译器依赖?

标签 c gcc integrity

我正在开发一些多设备程序,我需要一个宏来帮助检测变量的变化。我想使用这个宏来检测 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 : '{

取决于编译器。

最佳答案

因为 typeof 不是标准 C 而是 gcc 扩展。您可以尝试改用标准 _Generic 重写它。

此外,以双下划线 __ 开头的标识符保留用于标准库实现,不应在其他代码中使用。

关于c - 为什么这个宏编译器依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58217318/

相关文章:

c - 如何在C代码中使用F1到F10键

gcc - 如何设置 2 字节 wchar_t 输出?

linux - 如何列出非 native 二进制文件的库依赖项?

c - 如何在汇编中连接两个字符串?

c++ - char * string 的直接分配与动态分配

hash - HTTP 请求的真实性和完整性

c++ - Windows 7 x64 : low IL process msdn example does not work

mysql - 使用 username=email 保存用户时出现 IntegrityError

c - 来自不兼容指针类型警告的赋值,我没有 float 的原因?

c++ - 在 cygwin 中尝试通过 g++ 编译程序时收到 "access is denied "消息