【问题标题】:Strange parse error with C and dlc compilerC 和 dlc 编译器的奇怪解析错误
【发布时间】:2014-07-25 07:44:16
【问题描述】:

我有以下代码:

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 编辑器/编译器(它不会捕获此错误)复制和粘贴,以防一些奇怪的字符可能潜入,我重新键入了整个函数。我之前有过随机字符,比如 Django 无法读取的复制粘贴引号,同时使用与我现在使用的文本编辑器(Sublime)相同的文本编辑器。但检查这种可能性并没有帮助。

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

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

如果那里有一个神奇的灵魂,他可能有任何想法或可能的解决方案...... :) 也许精通编译器知识的人可能知道可能出现此类问题的晦涩案例。我现在受制于这个编译器。

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

【问题讨论】:

  • 请发布一个可以编译但显示您的问题的最小示例。在您的代码中,我看不到 x 或 n 是什么类型。第一个之后的编译器错误应该被忽略。因为arthShift不能被计算出来,所以后面是未知的,导致后续错误。

标签: c compiler-errors


【解决方案1】:

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

【讨论】:

  • 我希望有一天能听到教会唱你的名字。这令人难以置信的令人沮丧,这让我感到困惑,为什么我们没有早点被告知。这解释了我遇到的所有烦人的错误。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-27
  • 1970-01-01
  • 2016-01-23
  • 2011-03-22
  • 1970-01-01
相关资源
最近更新 更多