当前位置:  开发笔记 > 程序员 > 正文

功能参数的C地址?

如何解决《功能参数的C地址?》经验,为你挑选了1个好方法。

在C89/C99兼容编译器上使用函数参数的地址是否安全/可移植?

例如,如果函数参数满足特定的大小和对齐要求,则32位ARM的AAPCS使用寄存器r0-r3进行参数传递.我假设使用通过寄存器传递的参数的地址会产生意外的结果,但我对我正在使用的ARM编译器运行了测试,如果代码尝试引用地址,它似乎将这些参数重定位到堆栈这些参数.虽然它在我的特定应用程序中似乎是安全的,但我想知道是否可以跨架构(使用符合ANSI/ISO的编译器)保证可以直接利用寄存器来传递函数参数.

标准是否定义了这种行为?



1> fuz..:

在C中,唯一不能取地址的左值是位域(不能出现在函数参数中)和register存储类的变量或函数参数.获取参数的地址是完全安全的,但请记住,参数是按值传递的,因此您必须确保在其生命周期结束时不使用局部变量或参数的地址.

通常,编译器有一个传递,它检查哪些局部变量和参数是一元运算&符的操作数.然后在适当时将它们复制到合适的RAM中.调用约定不会影响这一点.

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有