数字上的 LLU 后缀错误
LLU bad suffix on number
我有一个使用 LLU
作为 uint64 文字后缀的库。
Visual Studio 2010(在Windows7-64上)抱怨"数字后缀错误",修补库以使用LL
工作。我是否必须设置一些预处理器定义或属性复选框才能启用LLU
?
PS有人知道哪个是正确的行为吗?我一直认为VC++所做的一切都与标准相反 - 但最近情况有所改善。
查看我可用的标准(仅草稿,但相当新的版本),C++ 和 C 都将"ULL"和"LLU"定义为整数文本的有效后缀。这可能是VS2010没有遵循的最新更改,但我注意到VS2012做了完全相同的事情(即只有ULL有效)。
使用有符号文本和无符号文本之间存在差异,这就是右移有符号值时 MSVC 的行为。有符号文本将进行符号扩展,但无符号文本将填充零。
换句话说,以下人为示例:
unsigned long long l2 = ~0LL >> 5;
unsigned long long l3 = ~0ULL >> 5;
。将在 MSVC 下生成两个不同的值。
因此,如果您的库期望通过规定无符号值来定义的行为,则将它们转换为无符号值可能会导致未定义的行为。
简而言之,我认为 MSVC 只接受一种形式的后缀有点顽皮,但最好的解决方法是切换"U"出现的位置,而不是完全删除它。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 导致错误的后缀和前缀增量
- 当我尝试创建两个后缀阵列时,为什么要获得EXC_BAD_ACCESS错误
- 将中缀转换为后缀并获取分段错误核心转储错误
- 将中缀转换为后缀:无法识别堆栈错误
- 使用堆栈评估后缀表达式时出现分段错误
- 错误:"push"的指令后缀无效
- 中缀到后缀转换括号错误
- 错误:整数常量的后缀Ui64无效
- 错误:整数常量上的后缀"i64"无效
- 错误:后缀"unaryOperators unaryOperator::operator++(const unaryOperator&)"必须将"int"作为其参数
- 在c++中计算后缀表达式时接收堆栈错误
- 错误:整数常量上的后缀"b11111111111111111111111111111111"无效
- 错误:"cmpxchg"的指令后缀无效
- 数字上的 LLU 后缀错误
- 错误:整数常量上的后缀"x"无效