类型 将 volatile char 转换为寄存器 char 类型

发布于 2024-11-30 18:38:10 字数 332 浏览 4 评论 0原文

我的 C 代码中收到额外警告。

警告 #2513-D:“volatile char *”类型的值不能分配给“char *”类型的实体 A = B;

当我检查我的代码时,我发现 A 和 B 的定义如下:

register char *A;
extern volatile char *B;

任何人都可以建议我如何输入强制转换来忽略上述警告。如果我进行类型转换,是否会有任何不良影响或副作用?我不想更改 A 的声明,尽管它工作正常并删除了警告。但是更改 A 的声明将对我的代码产生重大影响。

请建议一些方法。

谢谢 戈尔迪

I am in a situation where i am getting an extra warning in my C code.

warning #2513-D: a value of type "volatile char *" cannot be assigned to an entity of type "char *" A = B;

when i checked my code i found that A and B are defined like:

register char *A;
extern volatile char *B;

Can anyone please suggest me how do i type cast to ignore the above warning. Is there any bad impact or side effect if i do type casting. I dont want to change the declaration of A, though it works fine and remove the warning. But changing the declaration of A will have major impact in my code.

Please suggest some way.

Thanks
Goldi

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

小…楫夜泊 2024-12-07 18:38:10

寄存器关键字可以忽略。
您可以像

A = (char *) B;

抛弃易失性一样进行强制转换,这意味着某些优化(当使用 A 的新值时)可能会导致使用过时的值,而使用 B 进行相同的计算会产生不同的(并且可以说更好) ) 结果。
假设我们谈论的是 C。C++ 是相似的,但据我所知并不完全相同,即使在这种情况下它不重要。

The register keyword can be ignored.
You could cast like

A = (char *) B;

Casting away the volatile means that some optimizations (when using the new value of A) could lead to stale values being used, whereas the same computation using B would produce a different (and arguably better) result.
Assuming we're talking about C. C++ is similar, but not quite identical AFAIK, even if it shouldn't matter in this case.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文