Я новичок пытался сделать немного C ++ программирования на Xcode. Он работает нормально, но когда я пытаюсь скомпилировать тот же файл c ++ на моем компьютере с Windows, используя VS, были некоторые ошибки. После того, как я внимательно посмотрел на мой код, я действительно сделал несколько глупых ошибок, которые привели к ошибкам, но Xcode, похоже, проигнорировал их …
У меня вопрос, есть ли какие-либо настройки, которые мне нужно изменить, чтобы Xcode не был таким умным?
Например, следующий код может фактически скомпилироваться в xcode:
#include <iostream>
using namespace std;
int main() {
if (true or false){
cout << "How is this possible? \n";
}
return 0;
}
Есть и другие случаи, когда код на самом деле неправильный, но он может хорошо компилироваться, это Xcode, который является раздражающей частью, и я хочу отключить это.
Насколько я вижу, в вашем коде нет ничего плохого.
Стандарт ISO C ++ не определяет, какие стандартные заголовки включены другими стандартными заголовками. Таким образом, вполне возможно, что версия iostream, используемая XCode прямо или косвенно, включает ciso646. Принимая во внимание, что версия iostream для Visual Studio не включает ciso646. Есть много подобных случаев с другими заголовками. Вам просто нужно прочитать сообщения об ошибках и понять, что ваша ошибка (при перемещении файла на другую платформу) связана с отсутствием заголовочного файла.
Было бы неплохо, если бы переносимый код означал написание кода в соответствии со стандартной спецификацией C ++, но, к сожалению, это не так. Хотя в различных реализациях существуют различные параметры компилятора, которые могут помочь сблизить различные реализации, в общем случае вам просто нужно перенести код в целевую среду и фактически протестировать его там.
Таким образом, в конечном счете, написание переносимого кода означает, что вам придется изучить некоторое подмножество C ++, которое принимается всеми реализациями, на которые вы хотите ориентироваться.
or
является «альтернативным токеном» в C ++, и VS неверно отклонять его. В Xcode нет возможности отключить поддержку альтернативных токенов. Однако VS имеет нестандартную поддержку or
в качестве макроса с использованием заголовка <ciso646>
и Xcode имеет заголовок <ciso646>
который ничего не делает (как указано в стандарте). Таким образом, вы можете написать код, который использует or
и который работает как в XCode, так и в VS, включая этот заголовок.
#include <iostream>
#include <ciso646> // does nothing in Xcode, allows `or` in VS
using namespace std;
int main() {
if (true or false){
cout << "How is this possible? \n";
}
return 0;
}
К сожалению, VS не может поддерживать все альтернативные токены с помощью макросов, и поэтому XCode по-прежнему будет поддерживать некоторые из них, которых VS не поддерживает.
Есть и другие случаи, когда код на самом деле неправильный, но он может хорошо компилироваться, это Xcode, который является раздражающей частью, и я хочу отключить это.
Если вы приведете конкретные примеры, я могу дать дополнительные советы о том, как писать переносимый код.
Вместо того, чтобы изменять настройки XCode, я предлагаю перепроверить ваш код, используя другую среду разработки.
Если вы ищете что-то дешевое и полное доказательство. Загрузите VirtualBox Windows VM и запустите загрузку Dev C ++ (кровопролитие)
VS не поддерживает or
: вам нужно использовать ||
вместо.
Вы можете включить некоторые специальные файлы, но он не вводит or
достаточно хорошо в язык, чтобы он работал во всех случаях.
Если вы хотите пресечь использование or
(и ваш компилятор не поддерживает лучший способ)
#define
это что-то, что выдает ошибку компилятора, например
#define or OR
Это по крайней мере означает, что природа ошибок компиляции будет одинаковой на Xcode и VC.