2016-06-26 3 views
0

Я написал небольшой код на C++ и скомпилировал его в MSVS 2013. Он скомпилирован отлично. Однако я попытался скомпилировать его на Ubuntu с помощью GCC, и он дал ошибку, что я использую std::abs, которого нет. Затем я решил проблему, включив cmath.Как отказать MSVC от включения заголовков самостоятельно

Почему MSVS не жаловался? Включает ли он некоторые заголовки. Если да, то как я могу отказать MSVS в включении всего, что захочет, чтобы этот вид межплатформенного кода исчез?

ответ

2

ли она включать некоторые заголовки по себе

Хотя это может сделать это в зависимости от настроек проекта, проблема, вероятно, не является прямым включать. То, что MSVC (и GCC тоже) делает, это включить заголовок A в заголовок B, потому что A имеет некоторую часть, которая необходима внутри B. Как побочный эффект, конечно, вы получите другие символы из заголовка В тоже ...

Если да, то как я могу отрицать МСВС от включая все, что хочет

без перезаписи всего дерева заголовка , вы не можете. Это (и многие другие специфические для компилятора вещи) является хорошей причиной для компиляции как с VS, так и с GCC, всегда или, по крайней мере, через регулярные промежутки времени, вместо того, чтобы сначала писать всю программу с одним компилятором. (особенно если VS - ваш основной инструмент).