C和dlc编译器发生奇怪的解析错误

时间:2014-07-25 07:44:16

标签: c compiler-errors

我有以下代码:

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;

解析错误的行是:      int arthShift = x&gt;&gt; N;

编译器还说,在最后一行:     返回wasNegShift ^ wasPosShift; wasNegShift和wasPosShift是未声明的,我认为这是因为他们的声明要么直接使用arthShift,要么使用其声明取决于arthShift的其他变量。

我使用称为DLC编译器的东西作为编程拼图分配的一部分。它旨在确保您遵循特殊规则(例如:您可能只使用某些值和运算符)。偶尔我会得到这些奇怪的解析错误&#34; (这是它提供的唯一信息;&#34;解析错误&#34;以及数字行。我不怀疑错误与特殊规则有关,因为当你违反它们时,它会&#39对此非常明确。

1。 我尝试重新输入代码。我已经从在线C编辑器/编译器(它没有捕获到这个错误)中复制和粘贴,并且,为了防止一些奇怪的字符可能已经悄悄进入,我重新输入了整个函数。我之前有过随机字符蠕变,就像Django无法读取的复制粘贴引号,同时使用与我现在使用相同的文本编辑器(Sublime)。检查这种可能性并没有帮助。

2。 我使用的在线编译器不仅不会引发任何解析错误,GCC也不会。

3。 我和这个人做同样的运动:Parse Error in C 他/她也得到了同样的错误,似乎没有人能够弄明白。

如果有一个神奇的灵魂可能有任何想法或可能的解决方案...... :)也许掌握编译器知识的人可能会知道这样的问题可能出现的模糊情况。我现在受这个编译器的支配。

PS:如果你碰巧弄明白这个功能的目的,我已经知道至少有一个案例不起作用。哈哈,我只是想弄清楚这个错误。

1 个答案:

答案 0 :(得分:5)

您使用的编译器可能只支持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;
}