尝试编译C程序

马克·奥尔蒂斯

我编写了一个简单的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更改为#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.hiostream您在C语言中最接近的语言。

正如其他人指出的那样,为使行为正确,for循环条件也应更改为i < sizeof(result)/sizeof(result[0])

这是因为sizeof与数组一起使用时,以字节为单位给出了数组的大小,这取决于您的平台,这很可能意味着您在循环中获得了错误的迭代次数。(一个int通常为4个字节,因此编写该循环的方式将迭代2000次而不是500次。通过除以数组中一个元素的大小,您每次都能得到正确的结果)

更好的方法可能是#define在程序开始时将魔术数设为500,并在需要时以这种方式进行引用。

总体而言,主要问题是您真正拥有的是C ++程序,但您希望它成为C程序。您必须下定决心要真正使用哪种语言。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

尝试编译使用共享库的C ++程序时出错

来自分类Dev

尝试编译时C ++的新错误

来自分类Dev

尝试编译程序时,c ++无法解析的外部符号

来自分类Dev

尝试编译MixKit库(C ++)时出错

来自分类Dev

尝试编译时出现Boost C2064错误

来自分类Dev

当我尝试编译用C#代码编写的WPF应用程序时出现错误

来自分类Dev

尝试编译GNU屏幕

来自分类Dev

尝试编译Java程序时无法映射Cp1252的不可映射字符

来自分类Dev

尝试编译OpenCV程序,但在Visual Studio 2012中收到LNK2038错误

来自分类Dev

尝试编译应用程序时出现 javax.net.ssl.SSLHandshakeException

来自分类Dev

Maven尝试编译到1.5

来自分类Dev

尝试编译fftw时返回错误

来自分类Dev

尝试编译C文件时出错:mkfifo:无法创建fifo'stderr':不支持的操作

来自分类Dev

尝试编译 C++ 代码时出现不明确的错误

来自分类Dev

Swift编译器正在尝试编译ObjC

来自分类Dev

尝试编译abgx360时出错:C ++编译器无法创建可执行文件

来自分类Dev

尝试编译abgx360时出错:C ++编译器无法创建可执行文件

来自分类Dev

尝试编写程序用C中的随机数填充数组

来自分类Dev

尝试设置GNU C ++编译器,但是在尝试编译hello.cpp时出现一个我不明白的错误

来自分类Dev

尝试设置GNU C ++编译器,但是在尝试编译hello.cpp时出现一个我不明白的错误

来自分类Dev

为什么在尝试编译时出现“ __CrtGetFileInformationByHandleEx”错误

来自分类Dev

尝试编译时,webpack退出状态4294967295

来自分类Dev

当我尝试编译代码时发生错误

来自分类Dev

尝试编译libeemd时找不到库

来自分类Dev

尝试编译代码-无法找到或加载主类

来自分类Dev

尝试编译时发生typedef重定义错误

来自分类Dev

当我尝试编译我的代码时发生错误

来自分类Dev

NDK构建GLuint在尝试编译时未命名类型

来自分类Dev

尝试编译代码时,gcc不会执行任何操作

Related 相关文章

  1. 1

    尝试编译使用共享库的C ++程序时出错

  2. 2

    尝试编译时C ++的新错误

  3. 3

    尝试编译程序时,c ++无法解析的外部符号

  4. 4

    尝试编译MixKit库(C ++)时出错

  5. 5

    尝试编译时出现Boost C2064错误

  6. 6

    当我尝试编译用C#代码编写的WPF应用程序时出现错误

  7. 7

    尝试编译GNU屏幕

  8. 8

    尝试编译Java程序时无法映射Cp1252的不可映射字符

  9. 9

    尝试编译OpenCV程序,但在Visual Studio 2012中收到LNK2038错误

  10. 10

    尝试编译应用程序时出现 javax.net.ssl.SSLHandshakeException

  11. 11

    Maven尝试编译到1.5

  12. 12

    尝试编译fftw时返回错误

  13. 13

    尝试编译C文件时出错:mkfifo:无法创建fifo'stderr':不支持的操作

  14. 14

    尝试编译 C++ 代码时出现不明确的错误

  15. 15

    Swift编译器正在尝试编译ObjC

  16. 16

    尝试编译abgx360时出错:C ++编译器无法创建可执行文件

  17. 17

    尝试编译abgx360时出错:C ++编译器无法创建可执行文件

  18. 18

    尝试编写程序用C中的随机数填充数组

  19. 19

    尝试设置GNU C ++编译器,但是在尝试编译hello.cpp时出现一个我不明白的错误

  20. 20

    尝试设置GNU C ++编译器,但是在尝试编译hello.cpp时出现一个我不明白的错误

  21. 21

    为什么在尝试编译时出现“ __CrtGetFileInformationByHandleEx”错误

  22. 22

    尝试编译时,webpack退出状态4294967295

  23. 23

    当我尝试编译代码时发生错误

  24. 24

    尝试编译libeemd时找不到库

  25. 25

    尝试编译代码-无法找到或加载主类

  26. 26

    尝试编译时发生typedef重定义错误

  27. 27

    当我尝试编译我的代码时发生错误

  28. 28

    NDK构建GLuint在尝试编译时未命名类型

  29. 29

    尝试编译代码时,gcc不会执行任何操作

热门标签

归档