GCC 4.4 против Visual C ++ 2008 - PullRequest
1 голос
/ 07 июня 2011

Я немного запутался, мне нужен гуру 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 ]

4 голосов
/ 07 июня 2011

Наиболее очевидная проблема:

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

Visual Studio \ допускается как разделитель dir для Windows, но не для gcc в Linux / Unix, где разделитель каталогов равен /.

/ должно работать везде, хотя, поэтому я предлагаю изменить их.

Затем вы должны добавить ошибки компиляции, чтобы мы могли видеть, что / если проблемы остаются.

3 голосов
/ 07 июня 2011

Существует ряд факторов:

  • C и C++, как определено их соответствующими стандартами, развиваются;
  • уровень стандартного соответствия варьируется от компилятора к компилятору;
  • и gcc, и Visual C ++ имеют нестандартные расширения, которые - при их использовании - вызовут проблемы совместимости с другими компиляторами;
  • каждая операционная система имеет свои собственные API, поэтому код, написанный для Windows XP, не обязательно будет компилироваться в Ubuntu, и наоборот.

Невозможно определить по вашему вопросу, какая комбинация из них вызывает проблемы в вашем случае.

3 голосов
/ 07 июня 2011

Язык спецификация не может измениться, но насколько точно компилятор следует этим спецификациям может .

2 голосов
/ 07 июня 2011

Он не компилируется с gcc, потому что он использует специфичные для Windows заголовки, такие как «conio.h» и т. Д., И специфичные для Windows разделители каталогов, такие как «\» вместо «/".

».
2 голосов
/ 07 июня 2011

Без некоторого примера кода можно только догадываться.

В любом случае, распространенной причиной является нестандартный код, который работал случайно с любым компилятором, использованным для разработки кода, и лучшая диагностика в новых компиляторах запрещает это, или лучшая оптимизация в новых компиляторах компилирует код так, чтобы он вел себя иначе, чем предполагал оригинальный автор.

1 голос
/ 07 июня 2011

Я получил его для компиляции и линковки, под gcc на linux:

  • как уже указывалось, замените "\" на "/" в #include именах файлов
  • изменить #include "io.h" на #include "sys/io.h"
  • закомментируйте #include "conio.h", это не Linux и, похоже, не нужно
  • закомментируйте флаг «только для Windows» O_BINARY в файле unh_cmac.c
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...