适用于位字段的typeof / __ auto_type的GNU C替换/解决方法

抢劫

GNU C有两个扩展,它提议使之成为安全的宏MAXMIN并且只会对参数进行一次评估:typeof__auto_type给出两个MAX演示每个宏的示例:

#define MAX(a, b) ({    \
    typeof(a) _a = (a); \
    typeof(b) _b = (b); \
    _a > _b ? _a : _b;  \
})

#define MAX(a, b) ({      \
    __auto_type _a = (a); \
    __auto_type _b = (b); \
    _a > _b ? _a : _b;    \
})

对于这两个问题是,typeof__auto_type给出错误,如果它是对位的领域。此示例代码使用以下任一项显示位字段的问题MAX

#include <stdio.h>
#include <stdint.h>

// Insert one of the MAX macros here

struct bitfields {
    uint8_t a: 4;
    uint8_t b: 4;
};

int main(int argc, char *args[]) {
    struct bitfields x = {12, 4};
    printf("%d\n", MAX(x.a, x.b));
    return 0;
}

GCC分别typeof提供以下错误消息__auto_type

error: 'typeof' applied to a bit-field
error: '__auto_type' used with a bit-field initializer

因此,问题是:为什么GCC不允许将这些字段与位字段一起使用(我找不到关于它的任何文档),以及如何做一个MAX宏来对仍然适用于任何类型的任何类型的参数仅计算一次宏位字段?

R .. GitHub停止帮助ICE

您用于__typeof__(+(a))根据默认促销获取促销类型。至少对type的位域有效int我不确定编译器如何处理较大的位域类型的类型,这些位域类型是实现定义的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

[必填]字段不适用于下拉框的解决方法

来自分类Dev

是否有解决方法,使类运算符适用于内置类型

来自分类Dev

适用于100,000个主题的AWS SNS解决方法

来自分类Dev

Gradle的冲突解决方法不适用于Android项目吗?

来自分类Dev

适用于Linux的Powershell:缺少“ out-gridview”的解决方法?

来自分类Dev

背景尺寸不适用于普通类,是否需要任何解决方法

来自分类Dev

仅适用于Opera的错误:CSS悬停菜单剩余的重绘错误-解决方法?

来自分类Dev

是否有解决方法,使类运算符适用于内置类型

来自分类Dev

适用于Ubuntu 17.10的openvpn的tls-remote解决方法

来自分类Dev

适用于Linux的Powershell:缺少“ out-gridview”的解决方法?

来自分类Dev

非方法的eta扩展适用于字段,但不适用于局部变量

来自分类Dev

C#Linq orderby仅适用于返回的字段?

来自分类Dev

M_PI不适用于gcc --std = c11但适用于--std = gnu11?

来自分类Dev

使用括号进行邻近搜索“ Tolkien。{0,300} Martin”不适用于换行符。解决方法?

来自分类Dev

绑定参数不适用于Firebird 2.0。有没有解决方法?

来自分类Dev

长文件名不适用于 png 设备。故障排除和解决方法建议

来自分类Dev

用于阻止连接或更改连接超时的MongoDB解决方法。[C ++]

来自分类Dev

警告:分解声明仅适用于-std = c ++ 1z或-std = gnu ++ 1

来自分类Dev

Java Hibernate标记替换不适用于Oracle数据库中的大字段

来自分类Dev

用于表的__gc元方法的Lua 5.1解决方法

来自分类Dev

哪个SCM适用于GNU / Smalltalk?

来自分类Dev

适用于GNU Radio的cmake教程

来自分类Dev

哪个SCM适用于GNU / Smalltalk?

来自分类Dev

auto和__auto_type有什么区别?

来自分类Dev

auto和__auto_type有什么区别?

来自分类Dev

Odoo Onchange方法不适用于many2one字段

来自分类Dev

没有适用于Matlab类的适当方法,属性或字段路径

来自分类Dev

QlikView“未找到字段”解决方法,用于添加新字段

来自分类Dev

X-Content-Type-Options = nosniff解决方法

Related 相关文章

  1. 1

    [必填]字段不适用于下拉框的解决方法

  2. 2

    是否有解决方法,使类运算符适用于内置类型

  3. 3

    适用于100,000个主题的AWS SNS解决方法

  4. 4

    Gradle的冲突解决方法不适用于Android项目吗?

  5. 5

    适用于Linux的Powershell:缺少“ out-gridview”的解决方法?

  6. 6

    背景尺寸不适用于普通类,是否需要任何解决方法

  7. 7

    仅适用于Opera的错误:CSS悬停菜单剩余的重绘错误-解决方法?

  8. 8

    是否有解决方法,使类运算符适用于内置类型

  9. 9

    适用于Ubuntu 17.10的openvpn的tls-remote解决方法

  10. 10

    适用于Linux的Powershell:缺少“ out-gridview”的解决方法?

  11. 11

    非方法的eta扩展适用于字段,但不适用于局部变量

  12. 12

    C#Linq orderby仅适用于返回的字段?

  13. 13

    M_PI不适用于gcc --std = c11但适用于--std = gnu11?

  14. 14

    使用括号进行邻近搜索“ Tolkien。{0,300} Martin”不适用于换行符。解决方法?

  15. 15

    绑定参数不适用于Firebird 2.0。有没有解决方法?

  16. 16

    长文件名不适用于 png 设备。故障排除和解决方法建议

  17. 17

    用于阻止连接或更改连接超时的MongoDB解决方法。[C ++]

  18. 18

    警告:分解声明仅适用于-std = c ++ 1z或-std = gnu ++ 1

  19. 19

    Java Hibernate标记替换不适用于Oracle数据库中的大字段

  20. 20

    用于表的__gc元方法的Lua 5.1解决方法

  21. 21

    哪个SCM适用于GNU / Smalltalk?

  22. 22

    适用于GNU Radio的cmake教程

  23. 23

    哪个SCM适用于GNU / Smalltalk?

  24. 24

    auto和__auto_type有什么区别?

  25. 25

    auto和__auto_type有什么区别?

  26. 26

    Odoo Onchange方法不适用于many2one字段

  27. 27

    没有适用于Matlab类的适当方法,属性或字段路径

  28. 28

    QlikView“未找到字段”解决方法,用于添加新字段

  29. 29

    X-Content-Type-Options = nosniff解决方法

热门标签

归档