我编写了一个简单的C程序,并尝试使用gcc编译器对其进行编译。但是当我执行gcc test.c -o test
它会引发一些错误:
test.c:1:19: error: cstdlib: No such file or directory
test.c:2:20: error: iostream: No such file or directory
test.c: In function ‘main’:
test.c:8: error: ‘for’ loop initial declaration used outside C99 mode
而且我的C程序非常简单,因此我认为问题不在代码中:
#include <cstdlib>
#include <iostream>
int main(int args, char **argv){
int result[500];
for (int i = 0; i < sizeof(result); ++i){
result[i] = 1;
}
return 0;
}
谢谢!
.c扩展名意味着GCC会将源文件解释为C代码。尽管您的标头包含的是C ++标头,所以C编译器为您提供了前两个错误。要解决此问题,您可以:
.cpp
而不是.c
,这将导致您的源代码被GCC解释为C ++代码。在C ++中,您编写的内容都是有效的。或者:
#include <stdlib.h>
remove #include <iostream>
,因为在C中没有与iostream完全相同的内容。但是,由于程序非常简单,因此实际上不需要程序中的任何一个标头。至于for循环错误,问题在于您已经i
在for循环的初始化步骤中声明了该变量。C99之前不允许这样做,因此您可以通过将的声明i
移到循环上方来解决此问题。
因此,工作程序可能如下所示:
#include <stdlib.h>
#include <stdio.h>
int main(int args, char **argv){
int result[500];
int i;
for (i = 0; i < sizeof(result)/sizeof(result[0]); ++i){
result[i] = 1;
}
return 0;
}
在这种情况下,即使不需要它们,我也将标题保留在程序中。stdio.h
是iostream
您在C语言中最接近的语言。
正如其他人指出的那样,为使行为正确,for循环条件也应更改为i < sizeof(result)/sizeof(result[0])
。
这是因为sizeof与数组一起使用时,以字节为单位给出了数组的大小,这取决于您的平台,这很可能意味着您在循环中获得了错误的迭代次数。(一个int通常为4个字节,因此编写该循环的方式将迭代2000次而不是500次。通过除以数组中一个元素的大小,您每次都能得到正确的结果)
更好的方法可能是#define
在程序开始时将魔术数设为500,并在需要时以这种方式进行引用。
总体而言,主要问题是您真正拥有的是C ++程序,但您希望它成为C程序。您必须下定决心要真正使用哪种语言。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句