Linux编译器出现故障

时间:2016-02-15 22:00:38

标签: c linux

我有一个曾经工作过的程序,但现在编译器出现故障了。我认为编译器的问题是因为它的报告错误不存在。当我在终端bash上作为sudo进行黑客攻击时,它必定已经在内存中被破坏了。我已将此报告给gnu,但我没有收到回复。如果您有任何建议我使用Archlinux(推荐类型),请提供帮助。

C || A + B  // is better than C ? C : A + B
C + A || B  // is better than C + A ? C + A : B
A() || B() || C // is better than A() ? A() : (B() ? B() : C)
A ? B : C || D || A   // is better than A ? B : (C ? C : (D ? D : A))
A === 1 || B < C || D // is better than A === 1 ? true : (B < C ? true : D)

2 个答案:

答案 0 :(得分:4)

;

结尾处有一个迷路for
for (i=0; i<x; i++);

应该是:

for (i=0; i<x; i++)

此外,您还要从void函数返回一个值。由于main应该返回int,因此将void main更改为int main

答案 1 :(得分:2)

我认为这个问题是一个简单的印刷错误:

for (i=0; i<x; i++);
    printf("This line used to print 5 times but now compiler is borked");

for语句末尾的分号是问题所在。如果你重新格式化它,那就和写作一样:

for (i=0; i<x; i++)
    ;
printf("This line used to print 5 times but now compiler is borked");

这将循环5次并打印This line used to print 5 times but now compiler is borked一次。将其更改为:

for (i=0; i<x; i++)
    printf("This line used to print 5 times but now compiler is borked");

您的主要声明不正确,但您通常会收到关于此的警告:

void main()

您应该使用:

int main()

特别是因为您实际上使用以下行从main返回值:

return 1;

我建议在编译时使用 CLANG GCC 至少使用这些额外选项-Wall -pedantic。这将尝试通知您可能可检测到的其他潜在问题。您应该始终查看编译器的输出。不同版本的编译器可以产生不同的警告。通常,与旧版本相比,最近的编译器可以更好地检测问题。

如果您按照前面提到的那样修复了循环,您可能希望在各自的行中打印出来:

    printf("This line used to print 5 times but now compiler is borked\n");

为此,您可以将\n添加到字符串的末尾。这会将换行序列发送到终端,终端将光标移动到第一列的下一行。

一个非常方便的工具是调试器。如果您正在进行开发,可以将-g添加到 GCC 编译器选项(它将输出调试信息),然后使用像 GDB 这样的调试器来逐步完成码。可能你会在调试器中确定你的循环工作不正常的原因。