gcc 4.4与Visual C ++ 2008

时间:2011-06-07 08:31:15

标签: c windows visual-c++ gcc ubuntu

我有些困惑,需要一些C / C ++大师。如果它是C并且原则上语言不能改变那么一些程序如何在Visual C ++上运行而不是在gcc上运行???

我正在使用Visual C ++ 2008和gcc 4.4.1并尝试编译一些非常古老的代码(1996)。它有点适用于Visual C ++(Windows XP),并且完全失败了gcc(Ubuntu 9.10)。

让我感到震惊的是,如果它是C / C ++,那么编译器应该不是问题。有什么帮助吗?

更新:这是代码http://www.ece.unh.edu/robots/cmacdemo.c

6 个答案:

答案 0 :(得分:4)

最明显的问题是:

#include <sys\types.h>
#include <sys\stat.h>

Visual Studio允许\作为Windows dir分隔符,而不是Linux / Unix上的gcc,目录分隔符为/

/应该可以在任何地方使用,所以我建议更改它们。

然后你应该添加编译错误,以便我们可以看到问题是什么/如果仍然存在。

答案 1 :(得分:3)

语言规范不能改变,但编译器遵循

答案 2 :(得分:3)

有很多因素:

    根据各自标准的定义,
  • CC++正在不断发展;
  • 标准依从性的级别因编译器而异;
  • gcc和Visual C ++都有非标准扩展,如果使用它们会导致其他编译器出现兼容性问题;
  • 每个操作系统都有自己的API,因此为Windows XP编写的代码不一定在Ubuntu上编译,反之亦然。

从你的问题中无法判断出这些问题的组合会导致你的问题。

答案 3 :(得分:2)

没有一些示例代码,人们只能猜测。

无论如何,一个常见的原因是非标准代码,无论使用何种编译器来开发代码都会出现意外,新编译器中的更好的诊断会禁止它,或者在新编译器中进行更好的优化以编译代码,以便它能够运行与原作者的意图不同。

答案 4 :(得分:2)

它不能用gcc编译,因为它使用特定于窗口的标题,如“conio.h”等和Windows特定的目录分隔符,如“\”而不是“/".

答案 5 :(得分:1)

我在linux上的gcc下编译和链接:

  • 正如已经指出的那样,在#include文件名中将“\”更改为“/”
  • #include "io.h"更改为#include "sys/io.h"
  • 评论#include "conio.h",它不在Linux上,似乎不需要
  • 在文件unh_cmac.c
  • 中注释掉仅限Windows的标志O_BINARY