【发布时间】:2015-07-14 12:43:10
【问题描述】:
这行代码没有在 GCC 4.2.2 上为我编译
m_Pout->m_R[i][j] = MIN(MAX(unsigned short(m_Pin->m_R[i][j]), 0), ((1 << 15) - 1));
错误:“无符号”之前的预期主表达式
但是,如果我在(unsigned short) 中添加大括号,它就可以正常工作。
您能解释一下这里正在进行什么类型的转换(分配)吗?
为什么词法解析器/编译器不能理解 GCC 中的这个 c++ 代码?
您能否建议一种“更好”的方式来编写此代码?支持 GCC 4.2.2(无 c++11,跨平台)
【问题讨论】:
-
GCC 4.2 是一个非常古老的编译器 (2008)。请将其升级到较新的版本。您可以下载更新的版本(GCC 5.1,2015 年 7 月)并从其源代码编译。
-
@BasileStarynkevitch 如果由我决定的话......哦,如果只是...... :(
-
为什么不能从它的源代码编译 GCC 5?您不需要任何 root 权限(仅在 GCC 5 构建树中 ..
../gcc-5.1/configure --prefix=$HOME/soft --program-suffix=-mine...)然后是make然后是make install) -
@BasileStarynkevitch:问题是 GCC 假设一个 glibc 版本,而 Linux 附带一个 glibc 版本。两者不一定相同,这可能会导致重大问题。在 Windows 上,微软已经明确表示不同的 MSVCRT 版本不是操作系统的一部分,并且从 7.0 开始,它们甚至命名不同,以便它们可以共存。
-
如果你从源代码编译 GCC,它将适合你的 glibc。
标签: c++ gcc language-lawyer