Сообщаем, является ли код C ++ переносимым

0

Я пытаюсь написать код, который может быть скомпилирован с любой современной версией g++, и у меня возникают трудности. Я написал код с помощью Visual Studios, и он работал нормально, но я попытался собрать его на другом компьютере, и у него были проблемы.

Одна из проблем заключалась в том, что он не распознал макрос EXIT_SUCCESS. Я вижу здесь, что он определен в cstdlib но почему в VS мне не нужно было импортировать эту библиотеку?

Также в файле.h у меня был const private int PI = 3.1416 а на другом компьютере ему это не понравилось.

Итак, как вы знаете, что будет переносимым? Я думал, что C (и, следовательно, по своей сути C++) был изобретен для компиляции в любом месте. Я задал этот вопрос, но думаю, что это неверно истолковано, есть ли определенные настройки, которые необходимо сделать для IDE для обеспечения переносимости?

EDIT: я мог бы лучше понять, почему код компилировался в Visual Studio без include <cstdlib> и как отключить такую функцию?

  • 1
    1) узнать разницу между C и C ++. 2) узнать разницу между целыми числами и числами с плавающей точкой. 3) изучать C и C ++. 4) написать правильный, соответствующий стандарту код. Тогда у вас будет довольно хорошее начало с точки зрения мобильности.
  • 0
    Что сказал KerrekSB. Кроме того, попробуйте выполнить компиляцию с использованием новейших компиляторов G ++ и CLANG с флагами, указывающими конкретный стандарт, например -std=c++11 или -std=c++98 , чтобы избежать расширений компилятора. И выясните, в каких макросах, функциях и типах заголовков живут, и включите их при необходимости. Не полагайтесь на косвенные включения.
Показать ещё 7 комментариев
Теги:
visual-studio
cross-platform
portability

1 ответ

2

На практике единственный способ определить, является ли переносимый код, - это скомпилировать его во всех целевых компиляторах/платформах. Вы можете попытаться придерживаться стандарта C++, но реальность суровая и нет 100% -ных компиляторов-компиляторов. Даже простая программа может дать вам сюрпризы другим компиляторам.

  • 0
    +1, но речь идет не только о том, чтобы быть на 100% совместимым ... переносимость также предполагает старательное избегание зависимости от неопределенного, неопределенного и определяемого реализацией поведения, которое «работает» (достаточно хорошо) в одной системе, но может не работать в другой ....
  • 0
    Для этой конкретной ситуации (с использованием компилятора MS в качестве основного) MinGW является хорошим инструментом для проверки переносимости

Ещё вопросы

Сообщество Overcoder
Наверх
Меню