我有以下代码:
int bitSwitcher = (1 << n) + ~0;
bitSwitcher = bitSwitcher << (32 + (~n + 1));
int arthShift = x >> n;
int logShift = arthShift ^ bitSwitcher;
int xSign = x >> 31;
int wasNegShift = xSign & logShift;
int wasPosShift = arthShift;
return wasNegShift ^ wasPosShift;
Run Code Online (Sandbox Code Playgroud)
解析错误的行是: int arthShift = x >> n;
编译器还说,在最后一行: return wasNegShift ^ wasPosShift; wasNegShift和wasPosShift是未声明的,我假设因为他们的声明直接使用arthShift或使用其声明依赖于arthShift的其他变量.
我正在使用一种称为DLC编译器的东西作为编程拼图分配的一部分.它旨在确保您遵循特殊规则(例如:您可能只使用某些值和运算符).偶尔我会得到这些奇怪的"解析错误"(这是它给出的唯一信息;"解析错误"以及数字行.我不怀疑错误与特殊规则有关,因为当你违反它们时,它非常明确.
我试过重新输入代码.我已经从在线C编辑器/编译器(它没有捕获到这个错误)中复制和粘贴,并且,为了防止一些奇怪的字符可能已经悄悄进入,我重新键入了整个函数.我之前有过随机字符蠕变,就像Django无法读取的复制粘贴引号,同时使用我现在使用的相同文本编辑器(Sublime).检查这种可能性并没有帮助.
2.我使用的在线编译器不仅不会引发任何解析错误,GCC也不会.
3.我正在和这个人做同样的练习:在C中解析错误 他/她也得到了同样的错误,似乎没有人能够弄明白.
如果有一个神奇的灵魂可能有任何想法或可能的解决方案...... :)也许掌握编译器知识的人可能会知道这样的问题可能出现的模糊情况.我现在受这个编译器的支配.
PS:如果你碰巧弄明白这个功能的目的,我已经知道至少有一个案例它不起作用.哈哈,我只是想弄清楚这个错误.
您使用的编译器可能仅支持C89.在C89中,必须在块的开头声明变量,这在C99中不再正确.
尝试将声明移动到开头,如下所示:
int foo()
{
int arthShift, logShift, xSign, wasNegShift, wasPosShift; //declarations
int bitSwitcher = (1 << n) + ~0;
bitSwitcher = bitSwitcher << (32 + (~n + 1));
arthShift = x >> n;
logShift = arthShift ^ bitSwitcher;
xSign = x >> 31;
wasNegShift = xSign & logShift;
wasPosShift = arthShift;
return wasNegShift ^ wasPosShift;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1204 次 |
| 最近记录: |