uint8的冗余强制转换不适用于GCC 4.8.1
发布时间:2020-12-14 01:56:49 所属栏目:Windows 来源:网络整理
导读:我有一些遗留代码,通常使用GCC 3.4.4为PowerPC编译. 现在我正在移植一些我想用MinGW的GCC 4.8.1编译的代码部分. 在代码中的某个时刻我发现了这个: // Prototypesvoid foo(uint8* pData);uint8 bar();// Functionvoid foo(uint8* pData){ (uint8) *(pData++)
我有一些遗留代码,通常使用GCC 3.4.4为PowerPC编译.
现在我正在移植一些我想用MinGW的GCC 4.8.1编译的代码部分. 在代码中的某个时刻我发现了这个: // Prototypes void foo(uint8* pData); uint8 bar(); // Function void foo(uint8* pData) { (uint8) *(pData++) = bar(); // Original Code - Doesn't work with GCC 4.8.1 *(pData++) = bar(); // Works with GCC 4.8.1 } 如果我想用GCC 4.8.1从原始代码编译该行,我得到左值作为赋值错误的左操作数.如果我摆脱演员操作,它工作正常.有人可以解释为什么会这样吗?难道这不是多余的,无论如何都不重要吗?为什么它与GCC 3.4.4一起工作? 解决方法
cast操作符的结果不是左值(您可以将其视为与原始对象具有相同值的临时值,但它具有不同的类型 – 它只是一个您无法更改的未命名值),所以你不能分配给它.
编辑:至于为什么用GCC 4.3编译:因为编译器过于宽松.此外,我假设你没有启用警告编译. gcc -Wall发出以下诊断: quirk.c: In function ‘main’: quirk.c:8: warning: target of assignment not really an lvalue; this will be a hard error in the future (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Windows Azure中是否有强制标志来改变角色大小?
- windows – 是否可以远程检查PC主板中填充了多少个DIMM插槽
- windows-server-2003 – 如何在不提示管理员密码的情况下从
- 未来的Windows Server路线图?
- 窗口 – 给定一个崩溃偏移量.PDB和源,我如何找到源代码行?
- windows-server-2012 – 使用Powershell更新用户主目录
- windows – OpenGL – 直接渲染到位图
- windows-server-2003 – 更改Windows域用户名
- Windows – 64位大型mallocs
- windows – 从命令行修复“此访问控制列表不是规范形式”错
推荐文章
站长推荐
- Windows Azure存储(Blob,表,队列)是否针对从Wind
- windows – 从txt中扫描所有文件夹和子文件夹(带
- windows-server-2003 – 升级到MOSS SP2后获得BS
- 在Windows Shell中将包含*(星号)字符的字符串作为
- Windows Server 2012存储空间疑难解答
- windows-server-2008 – 当我使用Powershell将用
- windows-server-2003 – Windows Server 2003 –
- 测试 – 手动测试用例中的自定义参数
- 在没有Microsoft.NET.Sdk.Web的情况下使用Razor
- windows-7 – 为什么Windows 7兼容模式有Windows
热点阅读