c - C 和 dlc 编译器出现奇怪的解析错误

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

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

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

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

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

3。 我正在和这个人做同样的练习:Parse Error in C 他/她也遇到了同样的错误,而且似乎没有人能弄明白。

如果那里有一个神奇的灵魂,他可能有任何想法或可能的解决方案...:) 也许精通编译器知识的人可能知道可能出现此类问题的模糊情况。我现在任由这个编译器摆布。

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

最佳答案

您使用的编译器可能只支持 C89。在 C89 中,变量必须在 block 的开头声明,这在 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;
}

关于c - C 和 dlc 编译器出现奇怪的解析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24950553/

相关文章:

c - 在 C 中处理十六进制

c - 如何打印出双向链表(ADT队列)?

java - Sudoku生成器交互 Pane 错误

c - 长型 64 位 linux

c - 传递给 system() 时如何克服路径中的空格?

尽管 JavaFx 类存在于 JDK 中,但 Java 无法找到 JavaFx 类

c++ - 错误 : too many template-parameter-lists

c - 在初始化固定大小的 char 数组时没有足够的空终止符空间时没有编译器错误

gcc - 编译器错误 "missing binary operator before token"是什么意思?

c - 使用 NGINX 运行 C FastCGI 脚本