Mar*_*ett 5 c++ visual-studio-2010
我有一个库,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;
Run Code Online (Sandbox Code Playgroud)
......将在MSVC下产生两个不同的值.
因此,如果您的库通过规定无符号值来期望定义的行为,那么将它们转换为无符号值可能会导致未定义的行为.
简而言之,我认为MSVC在接受一种形式的后缀时有点顽皮,但最好的解决方法是切换"U"出现的位置,而不是完全删除它.
| 归档时间: |
|
| 查看次数: |
5002 次 |
| 最近记录: |