我有些困惑,需要一些C / C ++大师。如果它是C并且原则上语言不能改变那么一些程序如何在Visual C ++上运行而不是在gcc上运行???
我正在使用Visual C ++ 2008和gcc 4.4.1并尝试编译一些非常古老的代码(1996)。它有点适用于Visual C ++(Windows XP),并且完全失败了gcc(Ubuntu 9.10)。
让我感到震惊的是,如果它是C / C ++,那么编译器应该不是问题。有什么帮助吗?
答案 0 :(得分:4)
最明显的问题是:
#include <sys\types.h>
#include <sys\stat.h>
Visual Studio允许\
作为Windows dir分隔符,而不是Linux / Unix上的gcc,目录分隔符为/
。
/
应该可以在任何地方使用,所以我建议更改它们。
然后你应该添加编译错误,以便我们可以看到问题是什么/如果仍然存在。
答案 1 :(得分:3)
语言规范不能改变,但编译器遵循 。
答案 2 :(得分:3)
有很多因素:
C
和C++
正在不断发展; gcc
和Visual C ++都有非标准扩展,如果使用它们会导致其他编译器出现兼容性问题; 从你的问题中无法判断出这些问题的组合会导致你的问题。
答案 3 :(得分:2)
没有一些示例代码,人们只能猜测。
无论如何,一个常见的原因是非标准代码,无论使用何种编译器来开发代码都会出现意外,新编译器中的更好的诊断会禁止它,或者在新编译器中进行更好的优化以编译代码,以便它能够运行与原作者的意图不同。
答案 4 :(得分:2)
它不能用gcc编译,因为它使用特定于窗口的标题,如“conio.h”等和Windows特定的目录分隔符,如“\”而不是“/".
答案 5 :(得分:1)
我在linux上的gcc下编译和链接:
#include
文件名中将“\”更改为“/”#include "io.h"
更改为#include "sys/io.h"
#include "conio.h"
,它不在Linux上,似乎不需要O_BINARY