作为功能参数的“指向变量的指针”做什么?

鲁斯兰

据我了解,register说明符提示编译器将变量存储在寄存器中。一切都很好,直到我在XKBlib.hXorg-7.7中遇到以下声明

extern  int     XkbTranslateKeySym(
    Display *           /* dpy */,
    register KeySym *       /* sym_return */,
    unsigned int        /* modifiers */,
    char *          /* buffer */,
    int             /* nbytes */,
    int *           /* extra_rtrn */
);

注意如何sym_return将其作为指针传递给寄存器变量让我感到奇怪的是

  1. 尽管不可能获取寄存器变量的地址,这似乎是允许的,
  2. 在函数声明中提到这一点似乎很重要。

第一点似乎是无效的,因为我似乎能够传递一个指向非register变量的指针,即使带有-pedantic-errorsGCC的标志也是如此。

那么,与没有register关键字的声明相比,此声明有什么变化它会改变通话习惯还是什么?

伦丁

register关键字大多在现代C.过时的功能。它做了两两件事:

  • 告诉编译器,如果可能,应尝试将变量存储在CPU寄存器中。如今,编译器比程序员更适合进行此类调用,因此已过时。
  • 阻止程序员获取变量的地址。

在您的情况下,它表示最好将指针本身而不是指向的数据存储在寄存器中,大概是地址/索引寄存器中。从标准C角度来看,它除了执行其他操作外,不会做其他任何事情。

register作为函数的一部分给出时,某个特定的编译器可能会选择某种调用约定,尽管我以前从未见过。调用约定的实践大致是这样的:“如果参数n是指针,则将其存储在索引寄存器x中,如果参数n + 1是指针,则将其存储索引寄存器y”等。

我怀疑register这里最可能的关键字解释是程序员不知道他们在做什么。特别是因为在标题中没有留下任何评论-这相当确定地表明了自己的能力。从整个标题来看,还有许多其他迹象支持无能理论,例如这个明显的错误:#define XkbLC_BeepOnComposeFail (1<<31)在简短查看源代码后的几分钟内找到UB时,请远离它。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Python

在Python中将“指向虚拟函数的指针”作为参数传递

来自分类Dev

指向功能指针

来自分类Dev

指向外围硬件的指针作为模板参数

来自分类Dev

在Julia中将指向struct的指针作为参数传递

来自分类Dev

使用指向QObject的原始指针作为信号参数是否安全?

来自分类Dev

指向2D数组的指针作为函数参数

来自分类Dev

指向成员模板参数的指针是什么?

来自分类Dev

如何传递指针变量作为参考参数?

来自分类Dev

将指向多维数组的指针作为参数传递

来自分类Dev

C ++将指向成员的指针作为模板参数传递

来自分类Dev

使用指向成员的指针将成员函数作为参数传递

来自分类Dev

指向const的指针作为函数参数

来自分类Dev

使用Rcpp公开以指向对象的指针作为参数的构造函数

来自分类Dev

使用指向作为函数参数传递的数组的指针

来自分类Dev

可变参数函数模板接受任何指针(指向变量,函数,成员函数等)作为参数

来自分类Dev

指向成员变量作为静态成员的指针

来自分类Dev

将指向类方法的指针作为函数参数传递

来自分类Dev

指向功能参数与功能参数的指针?

来自分类Dev

指向函数的C ++指针作为参数

来自分类Dev

接收指向C样式字符串的指针作为参数并能够分配或修改内存的正确方法是什么?

来自分类Dev

当您可以直接将变量作为指针指向时,为什么要在C中创建指针?

来自分类Dev

C const 指向 const struct 数组的指针作为函数参数

来自分类Dev

为什么在尝试将指向数组的指针作为函数的参数时出现访问冲突错误?

来自分类Dev

C++:访问作为函数参数传递的双指针数组指向的变量的值

来自分类Dev

指向类字段的指针作为 lambda 参数

来自分类Dev

指向struct的指针作为函数的参数有什么用?

来自分类Dev

c - 如何将参数作为指向数组的指针传递

来自分类Dev

在 C 中将指针变量作为函数参数而不是变量地址传递有什么问题?

来自分类Dev

“单个变量作为语句”会做什么?

Related 相关文章

  1. 1

    在Python中将“指向虚拟函数的指针”作为参数传递

  2. 2

    指向功能指针

  3. 3

    指向外围硬件的指针作为模板参数

  4. 4

    在Julia中将指向struct的指针作为参数传递

  5. 5

    使用指向QObject的原始指针作为信号参数是否安全?

  6. 6

    指向2D数组的指针作为函数参数

  7. 7

    指向成员模板参数的指针是什么?

  8. 8

    如何传递指针变量作为参考参数?

  9. 9

    将指向多维数组的指针作为参数传递

  10. 10

    C ++将指向成员的指针作为模板参数传递

  11. 11

    使用指向成员的指针将成员函数作为参数传递

  12. 12

    指向const的指针作为函数参数

  13. 13

    使用Rcpp公开以指向对象的指针作为参数的构造函数

  14. 14

    使用指向作为函数参数传递的数组的指针

  15. 15

    可变参数函数模板接受任何指针(指向变量,函数,成员函数等)作为参数

  16. 16

    指向成员变量作为静态成员的指针

  17. 17

    将指向类方法的指针作为函数参数传递

  18. 18

    指向功能参数与功能参数的指针?

  19. 19

    指向函数的C ++指针作为参数

  20. 20

    接收指向C样式字符串的指针作为参数并能够分配或修改内存的正确方法是什么?

  21. 21

    当您可以直接将变量作为指针指向时,为什么要在C中创建指针?

  22. 22

    C const 指向 const struct 数组的指针作为函数参数

  23. 23

    为什么在尝试将指向数组的指针作为函数的参数时出现访问冲突错误?

  24. 24

    C++:访问作为函数参数传递的双指针数组指向的变量的值

  25. 25

    指向类字段的指针作为 lambda 参数

  26. 26

    指向struct的指针作为函数的参数有什么用?

  27. 27

    c - 如何将参数作为指向数组的指针传递

  28. 28

    在 C 中将指针变量作为函数参数而不是变量地址传递有什么问题?

  29. 29

    “单个变量作为语句”会做什么?

热门标签

归档