我有一个曾经工作过的程序,但现在编译器出现故障了。我认为编译器的问题是因为它的报告错误不存在。当我在终端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)
答案 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 这样的调试器来逐步完成码。可能你会在调试器中确定你的循环工作不正常的原因。