C和DLC编译器的奇怪解析错误

Spag Guy

我有以下代码:

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 >> n;

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

我正在使用一种称为DLC编译器的东西作为编程难题作业的一部分。它旨在确保您遵守特殊规则(例如:您只能使用某些值和运算符)。有时候,我会得到这些奇怪的“解析错误”(这是它提供的唯一信息;“解析错误”以及数字行。我不认为该错误与特殊规则有关,因为当您违反它们时,这是非常明确的。

1.我尝试重新键入代码。我已经从在线C编辑器/编译器(不会捕获此错误)进行复制和粘贴,以防万一某些奇怪的字符可能潜入其中,我重新键入了整个函数。我以前使用过随机字符,例如Django无法读取复制粘贴的引号,同时使用了与我现在使用的文本编辑器相同的文本编辑器(Sublime)。但是,检查这种可能性并没有帮助。

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

3.我正在与这个人进行相同的练习:解析C语言中的错误他(她)也遇到了同样的错误,而且似乎没有人能够弄清楚。

如果那里有一个魔幻的灵魂,他们可能有任何想法或可能的解决方案... :)也许精通编译器知识的人可能知道可能会出现类似问题的晦涩情况。我现在受这个编译器的摆布。

PS:如果您碰巧知道此功能的用途,我已经知道至少有一种情况不起作用。哈哈,我只是想弄清楚这个错误。

Yu Hao

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章