Я пытаюсь написать код, который может быть скомпилирован с любой современной версией g++, и у меня возникают трудности. Я написал код с помощью Visual Studios, и он работал нормально, но я попытался собрать его на другом компьютере, и у него были проблемы.
Одна из проблем заключалась в том, что он не распознал макрос EXIT_SUCCESS
. Я вижу здесь, что он определен в cstdlib
но почему в VS мне не нужно было импортировать эту библиотеку?
Также в файле.h у меня был const private int PI = 3.1416
а на другом компьютере ему это не понравилось.
Итак, как вы знаете, что будет переносимым? Я думал, что C (и, следовательно, по своей сути C++) был изобретен для компиляции в любом месте. Я задал этот вопрос, но думаю, что это неверно истолковано, есть ли определенные настройки, которые необходимо сделать для IDE для обеспечения переносимости?
EDIT: я мог бы лучше понять, почему код компилировался в Visual Studio без include <cstdlib>
и как отключить такую функцию?
На практике единственный способ определить, является ли переносимый код, - это скомпилировать его во всех целевых компиляторах/платформах. Вы можете попытаться придерживаться стандарта C++, но реальность суровая и нет 100% -ных компиляторов-компиляторов. Даже простая программа может дать вам сюрпризы другим компиляторам.
-std=c++11
или-std=c++98
, чтобы избежать расширений компилятора. И выясните, в каких макросах, функциях и типах заголовков живут, и включите их при необходимости. Не полагайтесь на косвенные включения.